嘿 我正在使用AppEngine作为我正在编写的应用程序。所以我需要为每个对象分配标签。我想知道这样做的最佳方法是什么。 我应该创建一个空格分隔的标签字符串,然后查询%search_tag%(我不确定你是否可以在JDOQL中这样做)?
我还有其他选择吗? 我应该创建另一个将每个对象映射到标签的类吗?
从可扩展性,性能和易用性的角度来看哪个最好?
由于
答案 0 :(得分:2)
首先,'%search_tag%'类型'LIKE'查询不适用于App Engine的数据存储区。您可以做的最好的是前缀搜索。
很难回答像这样的非常笼统的问题。最佳解决方案将取决于几个因素,您希望每个实体有多少个标签?标签数量是否有限制?你将如何使用这些标签?寻找?仅供显示?所有这些问题的答案都会影响您设计模型的方式。
标记的一个通用解决方案是使用多值属性,例如标记列表。 http://code.google.com/appengine/docs/java/datastore/dataclasses.html#Collections
请注意,如果您的实体上有许多标签,它会在写入时增加开销,因为索引写入也需要时间。此外,您应该尝试避免在具有不等式或顺序的查询中多次使用多值属性(或多个多值属性)。这可能导致“爆炸索引”,因为为索引字段的每个组合编写了一个索引行。