Оптимизация индекса Google DataStore - PullRequest
0 голосов
/ 06 марта 2020

При разработке запросов только для ключей для фильтрации объектов Google Datastore я создаю много составных индексов, которые являются подмножествами другого индекса. Можно ли использовать тот же составной индекс для запросов, которые фильтруют подмножество уже проиндексированных свойств? Например, если у меня есть следующие запросы только для ключей, возможно ли иметь менее трех индексов?

Query 1: Entities where a = 1, b = 1, c = 1;
Query 2: Entities where a = 1, b = 1;
Query 3: Entities where a = 1;

Вот пример фактического запроса, с которым я работаю:

Query<Key> query = Query.newKeyQueryBuilder()
              .setKind("track")
              .setFilter(CompositeFilter.and(PropertyFilter.eq("status", 1), PropertyFilter.eq("bpm", 138), PropertyFilter.eq("artist", "AVB"), PropertyFilter.eq("label", "Armada")))
              .setOrderBy(OrderBy.asc("date"))
              .build();

1 Ответ

1 голос
/ 06 марта 2020

Хранилище данных может объединять меньшие индексы для поддержки больших запросов на равенство, см. объединение индексов . Используя эту функцию, минимальный набор индексов для вашего набора запросов будет выглядеть примерно так:

index.yaml

indexes:

- kind: Albums
  properties:
  - name: artist
  - name: date

- kind: Albums
  properties:
  - name: bpm
  - name: date

- kind: Albums
  properties:
  - name: label
  - name: date

- kind: Albums
  properties:
  - name: status
  - name: date

Это поддерживает запросы на равенство для любого числа из этих свойств, отсортированных по дате. Однако обратите внимание, что слияние индекса имеет компромисс производительности в некоторых случаях .

...