Java 内存数据网格中的细粒度与粗粒度域模型

Java 内存数据网格中的细粒度与粗粒度域模型,java,model,domain-driven-design,hazelcast,key-value-store,Java,Model,Domain Driven Design,Hazelcast,Key Value Store,我想知道哪种方法更好。我们应该在网格上使用细粒度实体,然后用细粒度实体构建功能丰富的域对象吗 或者,我们应该构造课程粒度的域对象,并将它们直接存储在网格和仅用于持久化的实体上 编辑:我认为这个问题还没有完全回答。到目前为止,我们收到了来自Hazelcast、Gemfire和Ignite的评论。我们缺少英菲尼斯潘,连贯性。。。。这是为了完成:)我相信不同的数据网格可能会有所不同。我更熟悉ApacheIgnite,在本例中,细粒度方法工作得更好,因为它更灵活,在许多情况下提供更好的数据分布,因此具有

我想知道哪种方法更好。我们应该在网格上使用细粒度实体,然后用细粒度实体构建功能丰富的域对象吗

或者,我们应该构造课程粒度的域对象,并将它们直接存储在网格和仅用于持久化的实体上


编辑:我认为这个问题还没有完全回答。到目前为止,我们收到了来自Hazelcast、Gemfire和Ignite的评论。我们缺少英菲尼斯潘,连贯性。。。。这是为了完成:)

我相信不同的数据网格可能会有所不同。我更熟悉ApacheIgnite,在本例中,细粒度方法工作得更好,因为它更灵活,在许多情况下提供更好的数据分布,因此具有更好的可伸缩性。Ignite还提供了丰富的SQL功能[1],允许加入不同的实体并执行索引搜索。这样,您就不会失去细粒度模型的性能


[1] 我同意瓦伦丁的观点,这主要取决于你想要使用的系统。通常,我会直接存储增强的域对象,不管怎样,如果您只拥有很少的对象,但它们的大小是巨大的,则最终会导致节点上的不良分布和不相等的内存使用。如果您的域对象是“正常”大小的,并且您有很多,那么您不必担心


在Hazelcast中,最好直接存储这些对象,但要注意使用好的序列化系统,因为Java序列化速度很慢。如果您想查询域对象中的属性,还应该考虑添加索引。

< P>粗粒度对象的一个优点是数据一致性。该对象中的所有内容都以原子方式保存。但如果将该对象拆分为4个小对象,则可能会有3个对象保存,1个对象失败(无论出于何种原因)

我们使用GemFire,并且在某种程度上倾向于使用粗粒度对象。例如,我们的客户对象包含一个地址列表。另一种设计是为“客户”创建一个GemFire区域,为“客户地址”创建一个单独的GemFire区域,然后希望您能够保持这些区域的同步

缺点是每次有人更新地址时,我们都会重写整个Customer对象。这不是很有效,但我们的流量模式表明地址更改非常罕见(与所有其他活动相比),所以这很好


不过,我们有一个经验,就是使用Java序列化进行长期数据存储的缺点。我们现在避免了它,因为随着时间的推移,对象的兼容性会引起各种问题。更不用说.NET客户端读取对象会让人头疼。:)

同一地点呢?当您在网格上保留复杂的对象时,您肯定知道数据位于同一位置,但是如果您使用细粒度对象,您如何知道嵌套的agregion位于同一台计算机上?这是正确的,在使用联接时,您必须正确地并置数据。以下是在Ignite中应该如何完成的:还请注意,从1.6开始,Ignite将允许执行连接而无需配置。但这当然不是免费的,而且会对性能产生不良影响。所以仍然建议使用并置方法。您好,非常感谢您的回答。为什么Hazelcast增强型对象更好?Hazelcast有什么不同?Hazelcast不提供连接操作,因此您必须执行多个请求来检索所有对象,或者,添加数据关联和EntryProcessor来动态生成域对象(节点本地),这与连接操作的想法类似。无论如何,Hazelcast都是关于速度的,重新生成相同的对象听起来并不正确:)如果你不知道这个术语,我建议你读一下关于非规范化的内容()。我希望这是有道理的,否则请随意提出进一步的问题:)你提供了很多信息,我在消化这些信息方面有点困难。我有点不确定您是否建议存储细粒度对象,然后使用EntityProcessor生成增强的对象。这是一个替代方案,如果我们不能直接存储增强的权利?好的,我想我开始理解你说的。您的意思是,您的第一选择是直接存储增强对象。如果不可能,您的第二个选择是使用data afinity+Entry处理器。只有一件事我不能完全确定。使用EntyProcessor处理映射以创建富对象后,您是保留它还是仅使用它来完成任务?我个人不认为再次坚持下去有什么价值。这不就是浪费内存吗?EntryProcessor不存储丰富的对象,它只是根据您的“查询”返回它,因此每次都会重新生成它们。是的,直接存储丰富的对象是首选方式。