Я оцениваю MongoDB как хранилище для нашего финансового / бухгалтерского RESTful API. Однако я знаю об отсутствии транзакций в MongoDB и типе десятичных данных:
Полагаю, я мог бы преодолеть отсутствие десятичных дробей, сохранив их как целые числа, и разделив / умножив их на коэффициент точности по мере необходимости. Потребители будут загружать (GET) и сохранять (PUT / POST) через уровень API, что позволит мне позаботиться о преобразовании на уровне API. Хранение целых чисел позволит выполнять вычисления и атомарные обновления по мере необходимости.
Я также не вижу недостатка транзакций в MongoDB как ограничителя показа, по крайней мере, в моем случае: API REST не позволял бы выполнять огромные многократные обновления «один вызов подходит всем». Ответственность потребителя будет заключаться в реализации логики отката в случае сбоя во время «логической» транзакции (цепочка множественных последующих вызовов обновления).
«Объекты», хранящиеся в БД, будут счетами, запасами, платежами ... стандартными учетными материалами. Хотя реляционная модель данных оказалась хорошим решением для хранения данных такого типа, я не понимаю, как хранение без схемы может вызвать проблемы. Возьмите пункт счета. Я мог бы хранить каждый документ в коллекции документов с вложенными позициями. Конечно, мне все еще нужно было бы несколько коллекций: документы, платежи, контакты и т. Д., Поэтому использование коллекций MongoDB мне подходит.
Кто-нибудь делал что-то подобное хотя бы отдаленно? Я все еще на стадии разработки, поэтому я бы действительно использовал отзывы от ветеранов MongoDB / REST - спасибо.
PS: если вам интересно, я бы отлично подошел к решению RDBMS, но мне нравится рассматривать альтернативы, и я вижу некоторые преимущества, идущие без схемы. Например, MongoDB выводит JSON / BSON, с которым работает REST API. Во-вторых, отсутствие схемы означает, что я могу получить документ с переменным количеством полей и сразу же сохранить его, не беспокоясь о пропущенных полях (которые будут нулевыми в БД и потребуют большого количества if IsNULL (fieldname) при построении ответ на запрос GET) и т. д.