Предложения для моей структуры данных / схемы с Pouchdb - Couchdb - PullRequest
0 голосов
/ 17 мая 2019

Доброе утро!

Я хочу использовать couchdb / pouchdb для моего pwa, над которым я сейчас работаю.

В моем проекте я хочу сохранить «Проекты», в «Проекте» я хочу сохранить название проекта и «Главы», в «Главе» я хочу сохранить заголовок главы и«Сцены», а «Сцена» содержит текст.

Какая схема наиболее разумна и эффективна?

Сейчас я думаю о плане, подобном следующему:

  • Проект 1

    • название: строка
    • Глава 1

      • Сцена 1
        • текст: строка
      • Сцена 2
        • текст: строка
      • Сцена 3
        • текст: строка
    • Глава 2

      • ...
  • Проект 2

    • title: string
    • Глава 1

      • Сцена 1
      • ...

Поскольку у меня есть только опыт работы с SQL иникогда раньше не использовал базы данных на основе документов, я действительно не знаю, как разместить структуру, которая имеет смысл.

Сохраняю ли я документы внутри документов, чтобы иметь схему, которая выглядит точно так же, как описано выше, или я создаюбаза данных для каждого компонента (проекты, главы, сцены)?

1 Ответ

1 голос
/ 17 мая 2019

У вас есть несколько вариантов.

  1. Каждый проект представляет собой документ со списком глав, каждая со списком сцен.
  2. Проекты, главы и сцены представляют собой три разных типа документов в одной базе данных.

Какой из них является лучшим, зависит от вероятного общего размера и того, как изменяется каждый из этих компонентов.CouchDB лучше всего работает с небольшими документами (килобайтами).Поскольку вы можете обновлять только целые документы, изменение битов внутри списков или внутри объектов в больших документах быстро становится неэффективным и потенциально может привести к конфликтам обновлений.

Второе предложение выше будет масштабироваться лучше, но (в настоящее время (см. Ссылку ниже)отсутствует удобство возможности извлекать все о проекте с помощью одного вызова API.Вы можете использовать поле идентификатора для большого эффекта:

{
    "_id": "project1:toplevel",
    "type": "project",
    "title": "Project 1"
}

{
    "_id": "project1:chapter1",
    "type": "chapter",
    "title": "Project 1, chapter 1"
}

{
    "_id": "project1:chapter1#scene1",
    "type": "scene",
    "title": "Project 1, chapter 1, scene 1"
}

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

https://blog.cloudant.com/2019/03/05/Partition-Databases-Introduction.html

...