如何在数据存储中创建复合索引以过滤实体中的多个属性

Posted

技术标签:

【中文标题】如何在数据存储中创建复合索引以过滤实体中的多个属性【英文标题】:How to create composite indexes in datastore to filter with multiple attributes in entity 【发布时间】:2021-10-26 04:30:16 【问题描述】:

我们正在为我们的仪表板使用 Google Datastore。在仪表板中,我们为最终用户提供过滤选项。

假设我们有一个数据存储类型,其结构是:


    'attribute1': 'val1',
    'attribute2': 'val2',
    'attribute3': 'val3',
    'timestamp': 123456789,


有一个用例,我们需要过滤特定时间段内的数据,并结合不同的其他属性。

在 Datastore 中创建复合索引以实现此功能的最佳方法是什么?

有什么想法吗?

【问题讨论】:

【参考方案1】:

Cloud Datastore 提供两种类型的索引

内置索引 -

这些是 Cloud Datastore 自动为每种实体类型的每个属性创建的索引。这些内置索引是单属性索引,适用于简单查询。

复合索引 -

复合索引是由用户而非 Cloud Datastore 自动构建的手动索引。这些是多属性索引。涉及使用两个或多个属性过滤数据的复杂查询需要复合索引。要构建复合索引,需要配置一个 index.yaml 文件,然后通过运行以下命令来创建它 -

gcloud datastore indexes create ~/path/to/index.yaml/file

现在来到你的用例 -

由于您要根据两个以上的属性过滤数据,因此您不能使用内置索引。所以你必须使用复合或手动索引。为此,您需要定义一个索引配置文件并如上所述部署它。您希望根据特定时间段结合一个或多个属性来过滤数据。因此,对于用例,以下索引配置文件应该可以正常工作。

index.yaml

indexes:
- kind: demo
 properties:
 - name: attribute1
   direction: asc
 - name: attribute2
   direction: asc
 - name: attribute3
   direction: asc
 - name: timestamp
   direction: asc

在上面的配置文件中,direction 属性是可选的,如果你不指定它,它会默认为升序(asc)。对于降序排序,您可以将其指定为desc。这将通过组合配置文件中提到的两个或多个属性来过滤数据。您可以通过this page 了解更多关于 Cloud Datastore 中的索引的信息。

请注意,基于索引的查询机制支持范围广泛的查询,适用于大多数应用程序。 Datastore 查询仍然存在一些限制或限制。我建议您通过this page 了解更多有关在 Cloud Datastore 中查询时的限制。

【讨论】:

这能回答你的问题吗?

以上是关于如何在数据存储中创建复合索引以过滤实体中的多个属性的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个值存储到 CoreData 中的一个属性中?

如何从 List 中创建多个 GenServer 进程并映射存储在其中的数据?

如何在 mongoDB 中创建复合唯一键

Swift:如何在应用程序中创建核心数据实体 [关闭]

如何让用户在核心数据xcode中创建自己的属性

在mysql中创建实体关系图