我正在构建一个具有多对多关系的应用程序; 实体“图片”的项目可以链接到任意数量的图库(“图库”)。当然,画廊可以容纳任意数量的图片。
因此,按照Google Suggestion的说法,我将使用“图片”中的列表来保存“图库”的外键。这是BigTable方法。
(旧式的Relational DB方法是在'Picture'和'Gallery'之间有一个表/实体。)
这是我的问题:存储密钥时,我应该在“图片”上找到“StringListProperty”还是“ListProperty(db.Key)”更好?
我看到 StringList 的一个原因是,我可以存储其他值,然后是Keys,但另一方面,无论如何都是脏样式。但我也很确定Google建议不要在实体上使用多个List,因为索引会爆炸。所以这会让我成为一个后门。
对于类型为“ Key ”的 ListProperty ,如果该值实际上是一个Key,则一个点将是自动验证。
由于将字符串转换为键非常容易,反之亦然,我认为没有任何理由可以选择其中一种列表类型。
说到性能问题,我不知道如何测试它 - 但看起来这将是决定的主要因素。
对您的输入感到好奇。特别是如果某人已经对此进行了性能测试,或者会非常友善并且做到这一点。
干杯, //汉纳斯
答案 0 :(得分:0)
如果您打算存储密钥列表,请使用db.ListProperty(db.Key)
。它们将以二进制表示形式存储,这比您在字符串列表中使用的字符串表示更紧凑。
将键与列表中的其他对象混合是很混乱的。在一个实体中有多个列表是可以的,只要你不在同一个自定义索引中索引多个列表 - 这就是导致爆炸索引的原因。
答案 1 :(得分:0)
使用db.ListProperty(db.Key),这将使数据获取比字符串更容易..如果Gallery模型具有属性pic_list,其类型为db.ListProperty(db.Key),其中包含图片实体的键..假设图片是你的实体的名称..然后Picture.get(// GalleryObject // .pic_list)将获得所有的图片..