Мы собираемся начать новый проект, и одним из требований является использование решения NoSQL. С вероятностью 90% это будет Amazon DynamoDB, поскольку мы «зависим от aws». Мы рассматриваем TitanDB (график) поверх хранилища DynamoDB.
Модель данных состоит из:
- Роли пользователей, разрешения, хранилище токенов
- Более реляционные, такие как данные с ассоциациями один ко многим / один к одному
Задача, которую мы собираемся решить:
- Создавайте отчеты на основе данных. Некоторые отчеты могут включать поля из разных сущностей.
- Фильтровать по диапазону (от - до)
- Сортировка, подсчет, пагинация
- Все вышеперечисленное можно применять одновременно
Объем данных:
- Объем данных не такой большой, мы не транслируем события в реальном времени
Предположения: Насколько я понимаю, нам нужно будет создать денормализованные представления для отчетов, которые мы собираемся построить (объединить данные из разных «таблиц») — хранить копии данных в нескольких таблицах. Или нам нужно использовать Elasticsearch или другое решение для индексации.
Graph db выглядит безумно, но предоставляет четкую модель данных, в которой каждый объект связан с другим. Необходимо знать ограничения db api для запросов.
Вопросы:
- Каковы наилучшие способы управления реляционными данными в нереляционной базе данных и обеспечения их согласованности?
- Есть ли какая-либо поддержка транзакций (например, в DynamoDB) для обеспечения согласованности данных (во время обновления данных мы должны записывать в несколько таблиц из-за денормализации)?
- Это хорошее решение для интеграции с Elasticsearch и выполнения поисковых запросов, а затем получения данных по идентификаторам из БД?