Gemfire 基于GEODE的数据模型设计准则

Gemfire 基于GEODE的数据模型设计准则,gemfire,spring-data-gemfire,geode,Gemfire,Spring Data Gemfire,Geode,我们很快就要开始关于参考数据的GEODE。我想得到一些同样的指导方针 正如您所知,在金融参考数据世界中,各种参考数据实体之间存在着复杂的关系,如工具、账户、客户等,这些实体可能在数据库中作为3NF提供 如果我的查询主要是读密集型的,这需要跨 表(2-5个表),处理相同问题的最佳方法是什么 内存网格 案例1: 为数据库中的所有表分离区域,然后像在数据库中一样使用OQL进行类似的连接 即使这样做,您也必须非常小心地设计它,确保相关实体始终位于同一分区内 使用对象图建模一对多和多对多关系 案例2: 如

我们很快就要开始关于参考数据的
GEODE
。我想得到一些同样的指导方针

正如您所知,在金融参考数据世界中,各种参考数据实体之间存在着复杂的关系,如工具、账户、客户等,这些实体可能在数据库中作为3NF提供

如果我的查询主要是读密集型的,这需要跨 表(2-5个表),处理相同问题的最佳方法是什么 内存网格

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

即使这样做,您也必须非常小心地设计它,确保相关实体始终位于同一分区内

使用对象图建模一对多和多对多关系

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

混乱:

(1) 我有一个加入查询,要求员工、部门使用emp.deptId=dept.deptId[确定1个具有这种视图模型的区域存在]

(2) 我有另一个加入查询要求,员工,部门,工资,地址加入,以满足不同的要求

因此,我必须再次创建一个视图模型来处理(2),它将包含与(1)类似的员工和部门数据。这可能很快达到内存阈值

数据库中的更改仍然可以由事件侦听器管理,但对此有何建议

谢谢,
达拉姆

我认为您的一般问题相当广泛,并且没有一种推荐的方法涵盖所有UCs(主要是应用程序要求的所有数据分析视图/模型)

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

特别是在GemFire中,这种调优将涉及不同的配置,例如但不限于:、()和(LRU,或者可能)设置,以及不同的逐出/过期阈值,可能在中存储数据,使用不同的分区策略(),等等

例如,如果您的地址信息是相对静态的、不变的(即实际的“引用”数据),那么您可以考虑将地址数据存储在<代码>复制< /代码>区域中。频繁写入的数据(通常是“事务性”数据)最好在
分区中写入

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

此外,某些节点可以承载某些区域,从而将集群划分为“事务性”节点和“分析性”节点,其中基于分析的节点从事务性节点区域上的
CacheListeners
更新(请注意),或者更好的是,使用。AEQ可以单独提供,并且具有高可用性和耐久性。这种事务性与分析性的方法是进行分析的基础

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

也可以考虑加入数据是多么昂贵。意思是,如果你能够在运行时相对廉价地聚合、转换和丰富数据(计算与内存/存储),那么你可以考虑使用GEMFILE的服务,将你的逻辑带到数据而不是数据到你的逻辑(MapReduce的基本基础)。 您应该知道,我相信您也知道,GemFire是一个键值存储,因此将复杂的对象图映射到单独的区域并不是一个简单的问题。用引用(尤其是多对多引用)划分对象并准确地知道何时急切地或懒散地加载它们是一个过载的问题,特别是在分布式复制数据存储(如GemFire)中,一致性和可用性之间存在权衡

有不同的API和框架可以简化GemFire的持久性和查询。更值得注意的方法之一是SpringDataGemfire的SpringDataCommons存储库抽象

这也可能是为作业使用正确的数据模型的问题。如果您有非常复杂的数据关系,那么使用图形数据库(如Neo4j)创建分析模型可能是一个更简单的选择。Spring还为Neo4j团队领导的Neo4j提供了强大的支持

毫无疑问,您所做的任何设计选择都将涉及混合方法。通常情况下,路径并不清晰,因为它确实“取决于”(即取决于应用程序和数据访问模式、负载等)

但有一点是肯定的,首先要确保您对底层数据存储及其数据管理功能有很好的粗略了解和理解,特别是在一致性和可用性方面

注意,如果您在继续下一步时遇到更具体的问题,您还可以使用和联系GemFire专家和(高级)GemFire/Geode用户社区