Пожалуйста, убедитесь, что вы прочитали введение Мартина Фаулера о базах данных NoSQL . И соответствующее видео.
Прежде всего, мы можем выделить два типа баз данных NoSQL:
- Агрегатно-ориентированные базы данных;
- Графо-ориентированные базы данных (например, Neo4J).
По своей структуре большинство Графо-ориентированных баз данных являются ACID !
Тогда как насчет других типов?
В агрегированных базах данных мы можем поместить три подтипа:
- Базы данных NoSQL на основе документов (например, MongoDB, CouchDB);
- Базы данных Key / Value NoSQL (например, Redis);
- Базы данных NoSQL семейства столбцов (например, Hibase, Cassandra).
То, что мы здесь называем Aggregate , - это то, что Эрик Эванс определил в своем доменно-управляемом дизайне как самодостаточный для сущностей и объектов-значений в данном ограниченном контексте.
Как следствие, агрегат представляет собой набор данных, которые мы
взаимодействовать как единое целое. Агрегаты образуют границы для ACID
операции с базой данных. (Мартин Фаулер)
Итак, на уровне совокупности, мы можем сказать, что большинство баз данных NoSQL могут быть такими же безопасными, как СУБД ACID , с правильными настройками. Исходя из этого, если вы настроите свой сервер на лучшую скорость, вы можете столкнуться с чем-то не-ACID. Но репликация поможет.
Моя главная мысль заключается в том, что вы должны использовать базы данных NoSQL такими, какие они есть, а не (дешевой) альтернативой СУБД. Я видел слишком много проектов, злоупотребляющих отношениями между документами. Это не может быть кислотой. Если вы остаетесь на уровне документа, то есть на агрегированных границах, вам не нужна транзакция. И ваши данные будут такими же безопасными, как и в базе данных ACID, даже если они не являются действительно ACID, поскольку вам не нужны эти транзакции! Если вам нужны транзакции и обновление нескольких «документов» одновременно, вы больше не находитесь в мире NoSQL - так что используйте вместо этого движок СУБД!
некоторые обновления 2019 года: начиная с версии 4.0, для ситуаций, когда требуется атомарность для обновлений нескольких документов или согласованность между чтениями нескольких документов, MongoDB обеспечивает многодокументных транзакций для наборов реплик .