Client可以配置连接到哪个Server服务器,但更合理的配置方式是连接到某个Locator上,由这个Locator为Client分配一个负载较低的Server,Client启动后只会和Locator沟通一次,在获知被分配到的Server的IP和端口之后,每次读写都会直接连接到Server上 。
2.1.3 数据存储形式和区域市面上大部分的内存数据存储,都将数据按键值对的格式进行存放,Geode也是如此 。但与Redis等简单的KV不同,Geode将KV数据们按数据区域(Region)进行组织 。对于不同的区域可以单独配置(如是否分区或需要副本) 。
数据区域可以类比于关系型数据库中的表的概念 , 是一系列结构相同的数据结构的集合 。实际上,在实现上数据区域就是一个ConcurrentMap<K, V>,其键就是一条数据的唯一性标识(类型任意 , 只要重写了equals和hashcode以便于Region确认键的唯一),其值是一个表达完整数据概念的对象,这样其实也让一条数据中按类的成员又划分出了列的概念 。基于这种类似关系型数据库的存储模式,Geode提供了一种类似于SQL的查询语言,称为OQL,并支持多区域查询(类似于连表查询) 。下面是一个OQL查询的小例子:
class DictPlatform implements DataSerializable { short platformId; String name; String status;}class TestServiceImpl { public void query() { String queryString = "SELECT dp.platformId, dp.name FROM /dict_platform dp WHERE dp.status >= 0;" QueryService queryService = cache.getQueryService(); Query query = queryService.newQuery(queryString); SelectResults results = (SelectResults)query.execute(); DictPlatform p = (DictPlatform)results.iterator().next(); }}
- 2.1.3.1 区域的分布式存储和复制
数据区域可配置的类型主要为 Partitioned , Replicated , Distributed non-replicated,Non-distributed 这四种 。下面重点介绍前两种类型 。
- Partitioned 分区区域如果某个区域数据量很大,一个成员放不下,可以将这个区域划分为多个bucket,分别存储在不同的server上 , 为了保证高可用 , 可以让不同的bucket的副本分布在多个server上,以某个server上的bucket作为master,很类似于Apache Kafka的设计 。当存储不够,可以增加新的server,增加新server后的需要发起重平衡 , 重平衡不需要停机,但可能会导致正在执行的事务失败 。可以从任何一个副本中读取到数据 , 如果和Client联系的那个Server没有想访问的分区的副本,需要经过server间的一跳,将请求转给目标server 。因此,分区的读性能稍差 。
- Replicated 复制区域如果某个区域数据量不大 , 为了提高读性能 , 复制区域可以将区域中所有数据完整地复制给其它副本,这样所有server中保存着完全相同的数据 。
- 2.1.4.1 持久化
持久化(Persisted) 和 溢出(Overflowed) 是配合使用的两个概念,配置共同使用持久化和溢出之后,所有数据都会被复制到磁盘,在内存中只保留热点数据的值,但所有数据的键都会被保留,以便于确认数据在磁盘上是否存在 。内存中数据量达到阈值后(指定条数或内存负载),排在LRU队尾的数据会被溢出到磁盘中(也即删除),当这个键对应的数据又一次被访问到,这个键会被恢复到内存中 。磁盘中的值和内存中的值在应用程序看来没有任何区别 。
- 2.1.4.2 失效
驱逐(Eviction) 和 到期(Expiration) 是可配置的两种数据失效的方式,总的来说 , 失效就是值当数据满足某些条件时,就从内存中删除掉 。
- 驱逐驱逐是指当内存中的数据量到达一定阈值时,将LRU队尾的数据销毁 。这个阈值可以是条数或占用的内存大小 。驱逐和溢出并不是互斥的,溢出实际上是一种不会丢失数据的驱逐 。
推荐阅读
- 基于 Apache Hudi 极致查询优化的探索实践
- 一文搞定 Spring事务
- 汽车灯语是什么意思 怎么读懂汽车灯语
- 如何轻松读懂三国演义 如何读《三国演义》
- 水浒传怎么读懂 水浒传怎么读
- 八字详解,一步步读懂你的命运
- 一文掌握手动对焦操作技巧 华为手机手动对焦怎么操作
- 一文弄懂快充是否损害手机电池 120w充电器可以充普通手机吗
- 一文看懂声卡接口类型 speaker是什么接口
- 3分钟读懂空调上的能效等级 空调能效标识怎么解读