У нас есть приложение, которое работает с финансовыми данными без схемы. Точнее, данные без схемы - это информация о заказе, где поля настраиваются продавцом. Последовательность и долговечность важны.
Из-за того, насколько динамичны наши данные, отчетность очень сложна. Каждая запись может немного отличаться или быть совершенно другой. Если мы продолжим использовать реляционную базу данных, похоже, наш единственный вариант - это сериализовать «документ» в виде большого двоичного объекта. Отчетность должна быть выполнена отдельно, возможно, путем копирования данных в общую структуру, определяемую пользовательскими отчетами (каждый «отчет» будет иметь собственную таблицу).
Другим вариантом является документно-ориентированная база данных NoSQL, такая как MongoDB. После некоторых исследований выяснилось, что большинство людей не будут доверять базе данных NoSQL финансовым данным, поскольку она опирается на BASE , а не ACID .
Кажется, я оказался в центре двух совершенно разных вариантов использования. Мои данные очень хорошо вписываются в документно-ориентированную базу данных (MongoDB), но мне нужна надежность базы данных ACID. В то же время необходимы сложные пользовательские отчеты.
Так что, похоже, у меня есть три варианта:
- Используйте две базы данных MySQL: одну для хранения данных (blob), а другую для пользовательских отчетов (множество таблиц).
- Используйте MongoDB, которая поддерживает большие базы данных, но имеет глобальную блокировку записи и является "в конечном итоге согласованной".
- Используйте MySQL для хранения данных (больших двоичных объектов), а затем скопируйте их в MongoDB для создания отчетов. Учитывая, что единственным индексом, вероятно, будет merchantID, насколько хорошо это будет работать?
Итак, какой из трех вариантов является моим лучшим вариантом (наибольшая гибкость и долговечность)? Есть ли другие варианты, о которых я не подумал, зная, что я не могу изменить динамику данных? Кто-нибудь использует MongoDB для отчетности в производстве?
(Для нашей СУБД мы используем MySQL. Думая о переходе на MariaDB. Выбор языка программирования - PHP. Думая об использовании Sphinx для поиска в полном тексте, например, поиска чьего-либо имени.)