【问题标题】:Do the unused properties consume size in gae datastore?未使用的属性是否会占用 gae 数据存储中的大小?
【发布时间】:2014-10-14 13:13:36
【问题描述】:

在我的设计中,我必须在同一个数据存储表中存储大量属性(比如 20 个属性)。 但通常大多数实体至少会占用 5 个属性。

这个设计是一个消耗资源的想法吗?未使用的属性会消耗任何内存或性能吗?

谢谢, 卡西克。

【问题讨论】:

  • 是的,存储属性的名称=名称的存储空间*记录数。
  • 您可以给模型一个“长”名称,用于查看模型等,以及一个实际保存在数据存储中的短名称。如果您有许多模型实例,这可能很有用。没有提到手自动取款机
  • 嗨,Paul,我现在不是在同一个实体中拥有许多属性,而是为同一个用户创建许多实体。一个用户可以有 0 个或 n 个角色。我为每个实体(每个学生的角色的实体)编辑用户名(它是键),方法是向其添加一个代码,例如 studentname_captain、studentname_star、studentname_constructor 等。每个角色都将具有相同的参数。所以当一个学生想查看他的详细信息时,系统通过在用户名中添加'_captain'、'_star'等来查询表,并通过getObjectById查找详细信息。您认为这种技术将来会产生其他问题吗?
  • 我的另一个疑问是,如果我们用 getObjectById 搜索并且 key 不存在,它会被算作 1 读取吗?谢谢,卡西克。

标签: google-cloud-datastore entities


【解决方案1】:

如果我对您的问题的理解正确,您正在设想一个系统,您的数据存储区中有一个种类,其中该种类的实体可以具有公共属性键空间W 的不同子集。实体 1 的属性集可能是 {W[0], W[1]},而实体 2 的属性集可能是 {W[1], W[2], W[5]}。您想知道这种多态性(或“无模式”)是否会占用您的空间,以及每个实体是否像某些幼稚的 MySQL 实现那样

简短的回答是否定的 - 由于 Datastore 的无模式特性,在一种类型中具有多态实体(实体具有所有不同的名称和属性组合)不会消耗额外的空间。让这些“未使用”属性消耗额外空间的唯一方法是,如果您确实在实体上设置了它们,但将它们设置为“null”。如果您使用的是低级 API,您需要在保存实体之前手动将属性添加到实体中。将这些视为 JSON 对象的属性。如果他们不在那里,他们就不在那里。

在 MySQL 中,根据引擎、索引等,拥有一个包含许多可 NULL 列的表可能不是一个好主意...但是take a look at this talk 如果您想了解有关 Datastore 实际如何存储其数据的更多信息使用大表。它是不同的底层存储实现,因此有不同的最佳实践或可能性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    相关资源
    最近更新 更多