GEODE ​​

时间:2016-06-19 15:14:31

标签: gemfire spring-data-gemfire geode

我们很快将开始与GEODE有关参考数据的事情。我想得到一些指导方针。

正如您所知,在财务参考数据世界中,各种参考数据实体(如工具,帐户,客户等)之间存在复杂的关系,这些实体可能在数据库中以3NF的形式提供。

  

如果我的查询主要是读取密集型,需要连接   表(2-5表),处理相同的最佳方式是什么   内存网格?

案例1 : 为数据库中的所有表分隔区域,然后像在数据库中一样使用OQL进行类似的连接?

即使您这样做,也必须谨慎设计,相关实体始终位于同一分区内。

使用对象图建模1对多和多对关系?

案例2 : 如果您知道连接查询的外观,请为每个连接查询创建一个具有等连接特征的视图模型。

混乱:

(1)我有1个连接查询需要Employee,Department使用emp.deptId = dept.deptId [确定奇妙的1区域存在这样的视图模型]

(2)我有另一个连接查询要求,员工,部门,薪水,地址连接以满足不同的要求

所以我必须创建一个视图模型来解决(2),它将包含与(1)类似的Employee和Department数据。这可能很快达到记忆阈值。

数据库中的更改仍然可以由事件侦听器管理,但建议是什么?

谢谢, Dharam

1 个答案:

答案 0 :(得分:1)

我认为您的一般性问题非常广泛,并且不仅有一种推荐方法可以涵盖所有UC(主要是您的应用程序所需的所有数据分析视图/模型)。

此类问题涉及许多因素,例如单个数据元素的大小,数据量,源自应用程序或应用程序的访问或访问模式的频率,及时传递信息,数据需要的准确程度,群集的大小,每台(虚拟)计算机的物理资源等。因此,任何给定的方法无疑都需要应用程序调优,相应地调整GemFire和JVM调优,而不管您的数据模型如何。不过,精心设计的数据模型可以确定这种调整的程度。

具体而言,在GemFire中,此类调整将涉及不同的配置,例如但不限于:data management policiesevictionOverflow)和expiration(LRU,或许是custom)设置以及不同的逐出/到期阈值,可能在Off-Heap memory中存储数据,采用不同的分区策略(PartitionResolver),依此类推。

例如,如果您的地址信息是相对静态的,不变的(即实际的“参考”数据),那么您可以考虑将地址数据存储在REPLICATE 区域中。在PARTITION 区域中,经常写入的数据(通常是“交易”数据)最好。

当然,正如您所知,任何PARTITION数据(在单独的 Regions 中管理)您在查询中“加入”(使用OQL)必须并置。 GemFire / Geode目前不支持分布式连接。

此外,某些节点可以托管某些区域,从而将您的群集划分为“事务”与“分析”节点,其中基于分析的节点从CacheListeners开始更新<事务节点中的em> Regions (注意this),或者可能更好,使用AEQ with AsyncEventListeners异步。 AEQ可以单独制作高度可用和耐用。这种交易与分析方法是CQRS的基础。

您的数据大小也受其存储形式的影响,即序列化与非序列化,与Java序列化相比,GemFire的专有序列化格式(PDX)非常优化。这完全取决于您的数据需要“可移植”的程度以及是否可以将数据保持为序列化形式。

此外,您可能会考虑即时加入数据的成本。这意味着,如果您能够在运行时相对便宜地聚合,转换和丰富数据(计算与内存/存储),那么您可以考虑使用GemFire的Function Execution服务,将您的逻辑带到数据而不是数据到你的逻辑( MapReduce 的基础)。

你应该知道,我相信你知道,GemFire是一个键值存储,因此将复杂的对象图映射到单独的 Regions 并不是一个小问题。通过引用(特别是多对多)划分对象,并确切地知道何时急切地和懒惰地加载它们是一个重载问题,尤其是在分布式复制数据存储中,例如存在一致性和可用性权衡的GemFire。

有不同的API和框架可以简化GemFire的持久性和查询。其中一个比较值得注意的方法是 Spring Data GemFire的 extension Spring Data Commons 存储库抽象。

也可能是为工作使用正确的数据模型。如果您有非常复杂的数据关系,那么使用图形数据库(例如Neo4j)创建分析模型可能是一个更简单的选择。 Spring 还为Neo4j提供了很棒的support,由Neo4j团队领导。

毫无疑问,您所做的任何设计选择无疑都涉及混合方法。通常路径不明确,因为它真的“依赖”(即取决于应用程序和数据访问模式,负载,所有这些)。

但有一件事是肯定的,请确保您对基础数据存储及其数据管理功能有一个良好的粗略知识和理解,特别是因为它与一致性和可用性有关,从this开始。 / p>

请注意,如果您遇到更具体的问题,还可以使用GemFire slack channel以及Apache DEV mailing list与GemFire专家和(高级)GemFire / Geode用户社区联系。你沿着这条建筑设计路径前进。