В конечном итоге согласованность означает, что изменениям требуется время для распространения, и данные могут не находиться в одном и том же состоянии после каждого действия, даже для идентичных действий или преобразований данных. Это может привести к очень плохим вещам, когда люди не знают, что они делают при взаимодействии с такой системой.
Не создавайте хранилища данных критически важных для бизнеса документов, пока вы хорошо не поймете эту концепцию. Ошибку в реализации хранилища данных документа исправить гораздо сложнее, чем в реляционной модели, потому что фундаментальные вещи, которые будут испорчены, просто не могут быть исправлены, поскольку вещи, которые требуются для их исправления, просто отсутствуют в экосистеме. Рефакторинг данных бортового хранилища также намного сложнее, чем простые преобразования ETL в СУБД.
Не все хранилища документов одинаковы. Некоторые в наши дни (MongoDB) действительно поддерживают своего рода транзакции, но миграция хранилищ данных, вероятно, сопоставима со стоимостью повторной реализации.
ПРЕДУПРЕЖДЕНИЕ: разработчики и даже архитекторы, которые не знают или не понимают технологию хранилища данных документа и боятся признать это из-за страха потерять работу, но прошли классическое обучение работе с СУБД и знают только системы ACID (насколько это может отличаться ?) и кто не знает технологии или не торопится изучать ее, пропустит разработку хранилища данных документа. Они также могут попробовать использовать его в качестве СУБД или для таких вещей, как кеширование. Они разбивают то, что должно быть атомарными транзакциями, которые должны работать со всем документом, на «реляционные» части, забывая, что репликация и задержка - это вещи, или, что еще хуже, втягивают сторонние системы в «транзакцию». Они сделают это, чтобы их РСУБД могла отражать их озеро данных, независимо от того, будет оно работать или нет, и без тестирования, потому что они знают, что делают. Тогда они будут удивлены, когда в сложных объектах, хранящихся в отдельных документах, таких как «заказы», «элементов заказа» будет меньше, чем ожидалось, или, возможно, их вообще нет. Но это случится не часто или достаточно часто, поэтому они просто идут вперед. Они могут даже не столкнуться с проблемой в разработке. Затем, вместо того, чтобы переделывать вещи, они будут использовать «задержки», «повторные попытки» и «проверки», чтобы подделать реляционную модель данных, которая не будет работать, но добавит дополнительной сложности без всякой пользы. Но уже слишком поздно - вещь развернута, и теперь на ней работает бизнес. В конце концов, вся система будет выброшена, а отдел будет отдан на аутсорсинг, и кто-то другой будет его обслуживать. Он по-прежнему не будет работать правильно, но они могут выйти из строя дешевле, чем текущий сбой.