Я борюсь с Firestore.Вопрос в том, как структурировать данные, не сталкиваясь с ловушкой / кошмаром.
У меня следующая структура данных:
school
course1
section1
page1
page2
section2
page1
page2
...
Я предполагаю, что курс обычно не имеет более 50разделы.
Использовать коллекцию
Таким образом, я мог бы использовать коллекцию и создать документ для каждого раздела, содержащий имя и описание каждого раздела.
db.collection("schools")
.document("school1")
.collection("courses")
.document("course1")
.collection("sections").snapshots()
Структура документа:
name: "Section 1"
description: "Description 1"
Однако, если мне нужно отобразить список разделов, то в соответствии с биллингом Firestore я получу плату за каждое чтение документа.Это означает, что если есть 20 разделов, я получу плату за 20 чтений.
Использование документа с вложенными коллекциями
Я также мог бы просто создать документ "Курс 1"и вложите все разделы.
db.collection("schools")
.document("school1")
.collection("courses")
.document("course1")
.get()
Структура документа:
name: "Course 1"
description: "The description",
sections: [
{
name: "Section 1",
description: "Description 1"
pages: [
{name: "Page 1", description: "Page Description 1"},
{name: "Page 2", description: "Page Description 2"}
]
},
{
name: "Section 2",
description: "Description 2"},
pages: [
{name: "Page 1", description: "Page Description 1"},
{name: "Page 2", description: "Page Description 2"}
]
...
]
Тогда я получу плату только за 1 чтение.Скорее всего, я бы не столкнулся с лимитом в 40 000 атрибутов, а также с лимитом в 1 МБ.
Но похоже, что загрузка данных из документа с помощью FutureBuilder занимает некоторое время, что кажется более быстрым, если я получаю документы в коллекции с помощью StreamBuilder.
Так что я как-тоне могу решить, какой подход выбрать.Каким-то образом было бы более логично использовать коллекцию, потому что я никогда не буду работать в каких-либо пределах, и она загружается быстрее, но с точки зрения биллинга было бы разумнее вкладывать разделы.
Какой вариант лучше?