Реляционная модель данных для NoSQL, Amazon DynamoDB

Мы собираемся начать новый проект, и одним из требований является использование решения NoSQL. С вероятностью 90% это будет Amazon DynamoDB, поскольку мы «зависим от aws». Мы рассматриваем TitanDB (график) поверх хранилища DynamoDB.

Модель данных состоит из:

  • Роли пользователей, разрешения, хранилище токенов
  • Более реляционные, такие как данные с ассоциациями один ко многим / один к одному

Задача, которую мы собираемся решить:

  • Создавайте отчеты на основе данных. Некоторые отчеты могут включать поля из разных сущностей.
  • Фильтровать по диапазону (от - до)
  • Сортировка, подсчет, пагинация
  • Все вышеперечисленное можно применять одновременно

Объем данных:

  • Объем данных не такой большой, мы не транслируем события в реальном времени

Предположения: Насколько я понимаю, нам нужно будет создать денормализованные представления для отчетов, которые мы собираемся построить (объединить данные из разных «таблиц») — хранить копии данных в нескольких таблицах. Или нам нужно использовать Elasticsearch или другое решение для индексации.

Graph db выглядит безумно, но предоставляет четкую модель данных, в которой каждый объект связан с другим. Необходимо знать ограничения db api для запросов.

Вопросы:

  • Каковы наилучшие способы управления реляционными данными в нереляционной базе данных и обеспечения их согласованности?
  • Есть ли какая-либо поддержка транзакций (например, в DynamoDB) для обеспечения согласованности данных (во время обновления данных мы должны записывать в несколько таблиц из-за денормализации)?
  • Это хорошее решение для интеграции с Elasticsearch и выполнения поисковых запросов, а затем получения данных по идентификаторам из БД?

person 7alcon    schedule 05.07.2016    source источник


Ответы (2)


TitanDB на Dynamo — это поддерживаемое решение Amazon Web Services, задокументированное по адресу http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tools.TitanDB.html

Для отчетов и других взаимодействий вы будете использовать Apache Tikerpop ( http://tinkerpop.apache.org ), который не включает в себя «механизм создания отчетов» или коннектор JDBC, но предоставляет коннекторы для многих языков, которые можно легко использовать для создания отчетов: python, scala, go, .NET/C# и другие.

person Darin Briskman    schedule 07.07.2016

Согласованность чтения в DynamoDB может быть в конечном счете согласованной или строго согласованной; взгляните на http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadConsistency.html для получения подробной информации о различиях между ними.

Использование ElasticSearch с графом все еще является новой комбинацией технологий. Есть несколько проектов (elastic-gremlin и unipop), которые решают эту проблему. В зависимости от вашего варианта использования вы должны иметь возможность получать данные, просматривая график Титана с помощью Gremlin (который является частью Tinkerpop) без добавления дополнительного уровня ElasticSearch... но вы не можете. Если вам нужен простой способ поэкспериментировать со средой ES в AWS, вы можете посмотреть на https://aws.amazon.com/elasticsearch-service/

Кроме того: если у вас есть контракт на поддержку AWS, вам следует обратиться к ним — это касается не только поломки/исправления. Группа поддержки может связать вас с техническими специалистами AWS, которые помогут проверить и даже протестировать ваши планы.

person Darin Briskman    schedule 07.07.2016