Как перенести вложенную коллекцию в CloudFirestore - PullRequest
3 голосов
/ 22 апреля 2019

Мы планируем внедрить виртуальную файловую систему с использованием Google Firestore.

Идея вложенных коллекций хороша тем, что она позволяет нам моделировать наши данные с точки зрения иерархии папок, например: /folders/folderA/entities/folderB/entities/fileX

Подобно реальной файловой системе, мы хотели бы обрабатывать перемещения между папками, такие как перемещение вложенной подпапки folderB из родительской folderA в родительскую folderC.Действительно, часто бывает, что папка, которую мы хотим переместить, может содержать свои собственные коллекции файлов и папок произвольной глубины K.

Этот комментарий предполагает, что перемещение документане будет автоматически перемещать связанные подколлекции.Точно так же, удаление документа приведет к удалению его подколлекций, оставляя их как сирот.Кажется, что единственный способ переместить папку (и ее сущности) от одного родителя к другому - это использовать рекурсивную стратегию клонирования + удаления, что может быть затруднительно для надежного и транзакционного выполнения, если ее дочерние сущности массивны.

Альтернативой является отказ от использования вложенных коллекций и сохранение всех папок в корневом каталоге, используя поле документа, например parent_id, для указания на другие документы в плоской коллекции.Это не должно влиять на скорость запросов из-за агрессивной индексации Firestore, , но мы не смогли воспроизвести это утверждение локально;т. е. запросы через вложенные коллекции становятся значительно более производительными, поскольку общее количество документов в БД увеличивается по сравнению с хранением всего на верхнем уровне. Воспроизводимое репо доступно здесь .Обратите внимание, что в репо используется локальный экземпляр эмулятора, а не реальный сервер Firestore.

Любой совет будет очень полезным!

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