我正在尝试使用数据存储 API 创建单个排序对象列表。(它在一个列表中的原因是因为对象在写入时是有序的——它基本上就像一个美化的 LOG 文件)。
我的问题是我想存储在列表中的东西是我定义的接口/抽象类的子类型。
我有一个使用我的 SQL 的当前商店,它看起来像:ID、组 ID、序列号、子类的序列化字符串。
我希望通过将其推送到数据存储中,我不必序列化,而是可以存储对象。但我现在有点不确定这是最好的方法。
注意。我使用的是直接数据存储 API,而不是 JDO/JPA 等。
我想一个选择是继续序列化 - 我不清楚对 AppEngine 上的各种序列化方法的支持有多好?我想我可以存储为字节数组 - 直接使用可串行化接口写入?
或者,我可以存储一些主元列表,并将每个对象子类型存储为它自己的实体 - 我不确定能否引用它,以及速度影响?我有大约 100 种不同的子类型需要存储。
有人对如何做到这一点有任何建议吗?
这似乎是一个非常基本的问题——我认为使用 noSQL 数据存储自然不会有问题——但我对这整个概念很陌生——直到现在我还是一个关系数据库人:)
谢谢!!
更新/编辑
嗯,我刚刚重新阅读了实体/查询等的文档页面......我想我可能落入了关系数据库思考者的陷阱......
实体下的一节指出:
注意:数据存储区实体是无模式的:与传统的关系数据库不同,App Engine 数据存储区不要求给定类型的所有实体都具有相同的属性,或者给定属性的所有实体值都必须具有相同的数据类型。如果需要一个正式的模式,应用程序本身负责确保实体符合它;为此,Python SDK 包含丰富的数据建模功能库。
我认为这意味着我可以将所有子类存储在接口的“实体”引用下,例如..
A 类扩展 Z
B 类扩展 Z
将 A 类和 B 类保存为实体“Z”。不另存为实体 A 和实体 B。
似乎并不关心大多数属性等完全不同:)
这是正确的吗?出于理智,任何人都可以验证这确实是在这种情况下所期望的吗?