Найти лучший способ поместить многоуровневый документ в DynamoDB - PullRequest
3 голосов
/ 14 января 2020

Я работал с обычными SQL базами данных и теперь хотел начать новый проект с использованием AWS сервисов. Я хочу, чтобы внутренним хранилищем данных было DynamoDB, а то, что я хочу сохранить, - это многоуровневый документ, похожий на буклет инструкций из всех выученных мной советов по программированию, которые можно извлечь и вызвать через интерфейс React.

Таким образом, данные будут иметь формат, подобный Python -> Classes -> General -> «Информация о классах Текстовая стена»

Временами будет более одного подкаталога.

В будущем планируется иметь возможность добавлять новые подпапки, перемещать данные в разные папки, «большие пальцы» и, в конечном итоге, создавать многопользовательскую учетную запись с доступом для чтения к данным друг друга.

Я знаю, как это сделать в SQL БД, но никогда раньше не использовал № SQL и подумал, что это будет отличной отправной точкой.

Я также думаю о том, как отсортировать раздел, и я сомневаюсь, что эта побочная программа когда-либо вырастет до нескольких кластеров, но я знаю, что без SQL вам придется планировать свой макет заранее.

Если Нет SQL просто ужасно подходит для этого стиля данных, дайте мне знать. Это в основном для практики и для практики AWS систем.

1 Ответ

1 голос
/ 15 января 2020

DynamoDb - это база данных ключ-значение с опциями добавления вторичных индексов. Хорошо хранить документы, которые не требуют полного сканирования или агрегирования запросов. Если вы разрабатываете свое многоуровневое приложение для документов, чтобы показывать только один документ за раз, тогда DynamoDB был бы хорошим выбором. Вы можете поместить документы с такой структурой:

DocumentTable:
{
 "title": "Python",
 "parent_document": "root"
 "child_documents": ["Classes", "Built In", ...]
 "content": "text"
}

Где:

  • parent_document - "заголовок" родительского документа может быть пустым для "Python "в вашем примере для документа под названием" Классы "
  • content - текстовый или неструктурированный документ с примечаниями, большими пальцами и т. Д. c, но вы не планируете выполнять над ним условные запросы в противном случае вам нужен глобальный вторичный индекс. Но поскольку у вас не будет много документов, полное сканирование таблицы не займет много времени.

У вас также может быть другая таблица с оглавлением для многоуровневого документа пользователя, который вы можете используйте для более удобной навигации по документам, однако в этом случае вам нужно заботиться о согласованности этой таблицы.

Пример:

ContentsTable:
{
    "user": -- primary key for this table in case you have many users
    "root": [
        "Python":[
            "Classes": [
                "General": [
                    "Information on Classes Text Wall"
                ]
            ]
        ]
    ]
}

Где Python, Classes, General и Information on Classes Text Wall - ключи для DocumentTable.title. Вы также можете использовать что-то вместо заголовков, чтобы ключи были уникальными. Максимальный размер документа DynamoDB составляет 400 КБ, поэтому этого будет достаточно для довольно большого оглавления

...