在GQL中更喜欢什么; StringListProperty还是ListProperty?
-
10-10-2019 - |
题
我正在建立一个具有许多与许多关系的应用程序;实体“图片”项目可以链接到任何数量的画廊(“画廊”)。当然,画廊可以容纳任何数量的图片。
因此,在此处的Google建议下,我将使用“图片”中的列表,其中包含“画廊”的外国钥匙。这是宏伟的方法。
(老式的关系数据库方法是在“图片”和“画廊”之间拥有一个表 /实体。)
这是我的问题:当存储钥匙时,我应该在'图片'上购买“ stringlistproperty”,或者“ listproperty(db.key)”会更好?
我看到的一个原因之一 stringList 可能的是,我还可以存储其他值然后键,但另一方面,这是肮脏的样式。但是我也很确定Google建议不要在实体上使用一个列表,因为索引会爆炸。因此,这将使我成为后门。
至于 ListProperty 与类型钥匙“如果值实际上是键,则有一个是自动验证。
由于将字符串转换为钥匙非常容易,反之亦然,我看不出有任何列表类型在这里更喜欢的原因。
在绩效问题上,我不知道如何测试这一点 - 但是看来这将是该决定的主要因素。
对您的输入感到好奇。尤其是如果有人在此测试了表现或会如此友善并做到这一点。
欢呼,//汉尼斯
解决方案
用一个 db.ListProperty(db.Key)
如果您打算存储钥匙列表。它们将存储在二进制表示中,它比您在字符串列表中使用的字符串表示更紧凑。
正确的是,将键与列表中的其他对象混合在一起是混乱的。在实体中拥有多个列表是可以的,只要您在相同的习惯索引中没有索引超过一个列表 - 这就是导致爆炸索引的原因。
其他提示
使用db.listproperty(db.key),这将使数据获取比字符串更容易。如果画廊模型具有属性为pic_list,属于db.listproperty(db.key),其中包含图片键列表实体..假设图片是您实体的名称..然后picture.get(// galleryObject//。pic_list)将获得所有图片entites ..