Ударяя максимальное количество составных индексов в Firestore - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть база данных Firestore, в которой я храню счет уровня игры для различных уровней в коллекции scores, например:

player1: { levels: {
 1: { score: 2343, timestamp: t1 },
 2: { score: 434, timestamp: t2 },
},
player2: { levels: {
 1: { score: 23, timestamp: t3 },
 2: { score: 34, timestamp: t4 },
}

Чтобы получить максимальные оценки любого уровня X, я запускаю запрос:

collection('scores')
 .orderBy('levels.X.score')
 .orderBy('levels.X.timestamp', 'desc')

Для этого требуется создать составной индекс для каждого уровня: collection:score, levels.x.score asc, levels.x.timestamp desc

Ограничение в 200 составных индексов означает, что я смогу создать только 200 уровней в своей базе данных. Есть ли способ, которым мы можем увеличить лимит, может быть, по какой-то цене? Или есть способ изменить структуру базы данных / запрос, чтобы этот предел не достиг?

1 Ответ

1 голос
/ 29 апреля 2019

Ограничения Firestore не могут быть изменены.

Вам придется изменить способ моделирования ваших данных. Подумайте о том, чтобы сохранить каждый счет в виде отдельного документа в коллекции, к которой вы можете обратиться. Таким образом, вы должны иметь:

/scores             // collection for all scores
  /some-id          // random id for this document with scores
    - playerId
    - level
    - score
    - timestamp

Затем вы можете запросить все оценки для данного уровня

firestore
    .collection('scores')
    .where('level', '==', X)
    .orderBy('score')
    .orderBy('timestamp')

Или что-то в этом роде. Для поддержки этого запроса вам потребуется только один составной индекс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...