在Google App Engine数据存储(Java)中存储和搜索字符串数组

在Google App Engine数据存储(Java)中存储和搜索字符串数组,java,google-app-engine,google-cloud-datastore,Java,Google App Engine,Google Cloud Datastore,我正在尝试实现一种多对一的关系。我计划将一个模型的键数组(数据存储实体键)存储在另一个模型的实体中,作为列表 e、 g.假设模型A的4个实体(a1、a2、a3、a4)分别具有数据存储键:键1、键2、键3和键4。现在,我将模型B的一个实体存储为List,该实体具有一个名为“ids”的属性。“id”将这些字符串作为元素:key1、key2、key3和key4 到目前为止一切都很好。 但是现在如何查询模型B中的每个ID呢 我想做的是这样的: query.setFilter(FilterOperator

我正在尝试实现一种多对一的关系。我计划将一个模型的键数组(数据存储实体键)存储在另一个模型的实体中,作为
列表

e、 g.假设模型A的4个实体(a1、a2、a3、a4)分别具有数据存储键:键1、键2、键3和键4。现在,我将模型B的一个实体存储为
List
,该实体具有一个名为“ids”的属性。“id”将这些
字符串作为元素:key1、key2、key3和key4

到目前为止一切都很好。 但是现在如何查询模型B中的每个ID呢

我想做的是这样的:

query.setFilter(FilterOperator.EQUAL.of(id,“key1”))

显然,现在不能这样做。 现在我要做的是获取每个B实体的ids属性,然后手动反序列化到字符串列表中,然后检查键是否存在

正如你所看到的,这是非常低效的。我应该如何接近这里?我应该将这些映射存储在单独的模型中吗。我不想处理连接,但是如果我不能得到当前解决方案以外的任何东西,我将不得不处理连接

我没有使用JPA或JDO,我计划不使用它们


如果有任何帮助,我们将不胜感激。

对于值列表,使用EQUAL filter的查询非常有效。确保在执行此查询时传递正确的值

例如,如果仅在服务器端使用此实体,则可以存储列表


如果您在客户端需要此列表,并且始终存储同类实体的键,则可以存储用于创建这些键的
id
(列表)或“name”(列表)列表。这将占用更少的空间。

谢谢您的回答。你能告诉我在一个多值属性中搜索一个值的效率吗。gae是如何处理的?它和查询单个值一样快。要记住的唯一问题是,此列表中的每个值都会为涉及此属性的每个复合索引生成一个额外条目。如果使用包括此属性在内的多个复合索引,则可能会很昂贵。请参阅: