假设我有3个PARTITIONED_REDUNDANT区域:
/ Sequences区域将有许多条目,每个条目是存储在另一个区域中的某些持久类型的ID序列(例如,/ Orders,/ OrderLineItems,/ Products等)。
我想运行一个Geode事务,它将一个Order和一个OrderLineItem集合在一起。
并且,我想从/ Sequences区域中的条目分配ID和OrderLineItems的ID,它们的键分别是“Orders”和“OrderLineItems”。这类似于关系数据库中的“自动增量”列 - 在插入时将ID作为事务的一部分进行分配/分配。
Orders和OrderLineItems的插入以及/ Sequences区域中ID的分配需要在事务上保持一致 - 它们一起成功或失败。
据我所知,如果区域被分区,Geode要求在事务中操作的数据位于同一位置。
显而易见的是将OrderLineItems与拥有的Order共同定位,这可以通过PartitionResolver完成,该PartitionResolver返回Order的ID作为路由对象。
但是,事务中仍然存在/ Sequences区域,我不清楚如何将这些数据与Order和OrderLineItem共同定位。
/ Sequences reqion的“Orders”条目需要与生成ID的每个Order位于同一位置......不是吗?显然这是不可能的。
或者是否有其他/更好的方法(例如,更改/ Sequences的区域类型)?
谢谢你的任何建议。
根据/ Sequences区域中的数据量 - 您可以将该区域设为复制区域。复制区域被认为与所有其他区域位于同一位置,因为它可在所有成员上使用。
https://geode.apache.org/docs/guide/15/developing/transactions/data_location_cache_transactions.html
如果您同时创建大量条目,则此模式可能很昂贵。每个创建都将通过这些共享的全局序列。最终可能会遇到很多事务冲突,特别是如果通过递增最后使用的序列号来获取下一个序列号。
作为替代方案,您可能希望将UUID视为Orders和OrderLineItem等的键.UUID占用的空间是long的两倍,但您可以分配随机UUID而无需在并发创建之间进行任何协调。