- 对于复制区域,每个server上都保存着相同的数据,因此一个server宕机完全不影响数据的正常读写 。
- 对于分区区域,为了保证高可用性,可以对分区设置冗余副本,在某个server宕机后,Geode会自动地将副本标记为master,当可用的副本数量到达一个阈值后,Geode会启动一个线程,启用一个新的server作为新的副本的据点,将所有数据复制到这个新的server上并标记为可用副本 。这个过程是否立即执行是可配置的,也可以等一会看宕机的server是否能恢复 。
分区容错性Apache Geode作为分布式内存数据库,天然地满足了分区容错性 。
3.3 复杂业务场景的需要 3.2.1 事务支持Geode提供了ACID事务的能力,但基于乐观锁,重新定义了ACID 。
- 原子性乐观事务通过使用预约系统提供原子性并实现速度,而不是使用传统的两阶段锁行关系数据库技术 。这种保留阻止了其他交叉事务的完成,允许提交检查冲突,并在对数据进行更改之前以全有或全无的方式保留资源 。在本地和远程完成所有更改之后,将释放预订 。在预订系统中,交叉事务将被简单地丢弃 。避免了获取锁的序列化 。
- 一致性一致性要求在事务中编写的数据必须遵守为受影响区域建立的键和值约束 。请注意,事务的有效性是应用程序的责任 。
- 隔离隔离是事务状态对系统组件可见的级别 。Geode事务具有可重复的读隔离 。一旦为给定的键读取提交的值,它总是返回相同的值 。如果事务中的写操作删除了已读取的键的值,则后续的读操作将返回事务引用 。默认配置在流程线程级别隔离事务 。当一个事务正在进行时,它的更改只在运行该事务的线程中可见 。同一进程中的其他线程和其他进程中的线程在提交操作开始之前不能看到更改 。在开始提交之后,更改在缓存中是可见的,但是访问更改数据的其他线程可能会看到事务的部分结果,从而导致脏读 。但可以通过修改配置避免脏读 。
- 持久性关系数据库通过使用磁盘存储进行恢复和事务日志记录来提供持久性 。Geode针对性能进行了优化,不支持事务的磁盘持久性 。
3.2.3 连续查询这是一个类似于消息队列的机制,Client向Server发布一个OQL查询,当Server执行了会导致这个OQL的查询结果发生变更的事件后,会将这个事件和新的结果通知给Client,Client可以基于此做一些特殊的操作 。比如我们在缓存中管理库存量,发布一个连续查询 "SELECT * FROM /stock s WHERE s.stock_num + +s.purchase_num < 100",当这个查询收到值时,就向采购领域发布采购预警事件 。
3.2.4 异构Geode提供了多种序列化方式,当想要在异构的系统中使用Geode时,可以不使用Java的序列化,而是其它更通用的序列化方式,如PDX或DataSerializer,PDX可以不用反序列化整个数据对象,就读到其中的字段的值,还能兼容多版本的对象;DataSerializable则提供了更快速的序列化 。
经验总结扩展阅读
- 基于 Apache Hudi 极致查询优化的探索实践
- 如何读懂狗心里在想什么
- 一文搞定 Spring事务
- 可爱在性感面前一文不值是什么意思?
- 一文带你读懂小米手环6和7的区别 小米手环7比6多了什么功能
- 一文看懂华为充电新技术 华为mate30支持无线充电吗
- 苹果如何录入nfc门禁卡 (一文了解iPhone手机添加门禁卡的方法)
- cad表格怎么统一文字高度?
- 牵手一文有哪些方面的含义 牵手一文都有哪些方面的含义
- 情人节:读懂9位作家的婚姻,你就知道何谓家、何谓爱