在我的设计中,我必须在同一个数据存储表中存储许多属性(比如20个属性)。 但通常大多数实体将至少占用5个属性。
这种设计是一种资源消耗的想法吗?未使用的属性会消耗任何内存或性能吗?
谢谢, Karthick。
答案 0 :(得分:0)
如果我正确地理解了您的问题,那么您正在设想一个系统,其中包含:数据存储区中的一种类型,其中该类实体可以具有公共属性 - 密钥空间W
的不同子集。实体1的属性集可能是{W[0], W[1]}
,实体2的属性集可能是{W[1], W[2], W[5]}
。您想知道这种多态性(或“无模式”)是否会花费您的空间,以及每个实体是否都像在一些天真的MySQL实现中那样
简短的答案是否定的 - 由于数据存储的无模式特性,在一种类型中具有多态实体(实体具有所有不同的名称和属性组合)将不会消耗额外的空间。使这些“未使用”属性消耗额外空间的唯一方法是,如果您确实在实体上设置了它们,但将它们设置为“null”。如果您使用的是低级API,则在保存之前手动将属性添加到实体。将这些视为JSON对象上的属性。如果他们不在那里,他们就不在那里。
在MySQL中,拥有一个包含许多NULL列的表可能是一个坏主意,具体取决于引擎,索引等...但如果您想了解有关数据存储区实际存储方式的更多信息,请take a look at this talk它是使用BigTable的数据。它是一个不同的存储实现,因此有不同的最佳实践或可能性。