Firestore, где пункт с большим набором данных - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть следующая структура в моей базе данных firestore:

messages:
    m1:
        title: "Message 1"
        ...
        archived: false
    m2:
        title: "Message 2"
        ...
        archived: true

Допустим, у меня 20k сообщений, и я хочу получать заархивированные сообщения с помощью предложения where, будет ли мой запрос медленнеечем если бы я структурировал свою базу данных следующим образом ?

nonArchivedMessages:
    m1:
        title: "Message 1"
        ...
archivedMessages:
    m2:
        title: "Message 2"
        ...

Использование второй структуры кажется мне более приспособленным для больших наборов данных, но в некоторых случаях подразумевает проблемы, такие как получение сообщения, не зная,в архиве или нет.

1 Ответ

0 голосов
/ 27 сентября 2018

Одной из гарантий для Cloud Firestore является то, что время, необходимое для извлечения определенного количества документов, не зависит от общего количества документов в коллекции.

Это означает, что в вашей первой модели данных, если вы загружаете 100 архивных документов и (например) это занимает 1 секунду, вы знаете, что для загрузки 100 архивных документов всегда будет требоваться около 1 секунды, независимо от того,сколько документов в коллекции.

С этим знанием единственное различие между вашими двумя моделями данных состоит в том, что в первой модели вам нужен запрос для захвата заархивированных сообщений, а во второй модели нетМне не нужен запрос.Запросы в Cloud Firestore выполняются путем доступа к индексу, поэтому разница заключается в том, что в первой модели данных читается один (более) индекс.Хотя это оказывает минимальное влияние на время выполнения, оно будет незначительным по сравнению со временем, которое требуется для фактического чтения документов и их возврата клиенту.

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

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