【问题标题】:GAE - Java - Keyword classification of Datastore EntitiesGAE - Java - 数据存储实体的关键字分类
【发布时间】:2014-04-28 18:49:12
【问题描述】:

在我的场景中,数据存储区中有 3 种主要类型的实体,即用户、对象和关键字。 问题是对对象之间的关系和对它们进行分类的关键字进行建模。

用户可以创建任意数量的对象,并且可以通过 ascestor 链接轻松实现用户-对象关系。
我通过为任何关系定义实体来对对象间和用户间关系进行建模。这是因为这样我可以拥有我想要的所有扇入和扇出以及与结果集的关系搜索规模,因此它也很省时。

现在我需要为关键字分类对象。每个对象可以关联到有限数量的键,而每个键不能有扇出限制。
如何最有效地实施它们? (时间效率(复杂性,...)和数据库活动)

第一种方法可以是:为每个对象分配一个键列表:
搜索将随结果集扩展,因此它不依赖于关系和键的数量。

将键和键-对象关系建模为实体,例如用户间的对象间情况:
搜索将再次随结果集缩放,因此再次不依赖于网络大小。

我可以考虑什么作为比较标准?

【问题讨论】:

    标签: java database google-app-engine google-cloud-datastore


    【解决方案1】:

    如果您在您的 Object 实体中放置一个关键字列表(或它们的 id),您将产生额外的写入成本:添加每个关键字将导致更新 Object 实体,需要每个实体写入和每个实体写入索引属性,包括每个关键字的写入。

    如果这种情况很少发生,这将是一笔不小的额外费用,我建议使用列表方法,因为它比较简单。另一方面,如果更频繁地添加/删除关键字,成本会迅速增加。

    使用 Keyword_Object 实体,您可以避免更新 Object 实体的额外成本,但您必须维护另一种实体类型,并且您存储的数据将占用更多空间(每个关键字-对象对一个额外的键)。

    我建议您使用这两种方法中的任何一种,并在有更多数据可用时进行优化,除非您确定很快就会拥有数百万条记录,并且您已经知道您的数据访问模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多