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