Использовать готовые решения
На мой взгляд, готовый Riak недостаточно безопасен для использования в качестве основного хранилища данных в приложении для электронной коммерции. Это связано с возможной согласованностью Riak (и многих решений NoSQL).
В Теореме CAP распределенные хранилища данных (одним из них является Riak) могут гарантировать не более двух из следующих условий:
- Согласованность (все узлы видят одни и те же данные одновременно)
- Доступность (гарантия того, что каждый запрос получает ответ о том, был ли он успешным или нет)
- Устойчивость к разделам (система продолжает работать, несмотря на произвольное разделение из-за сетевых сбоев)
В частности, Riak допускает ошибку в отношении доступности и устойчивости к разделам, имея согласованность в конечном счете данных, хранящихся в его хранилище данных
Что Riak может сделать для приложения электронной коммерции
Используя Riak «из коробки», он может стать хорошим источником контента о товарах, продаваемых в вашем приложении для электронной коммерции (контент, который обычно пишется один раз и читается много раз, является отличным вариантом использования Riak), но с сохранением:
- подсчитайте, сколько предметов осталось
- деньги на счету пользователя
Требуется осторожное обращение в распределенном хранилище данных.
Реализация согласованности в потенциально согласованном хранилище данных
Есть несколько методов, которые вы можете использовать, они включают в себя:
Реализуйте метод сериализации при записи обновлений значений, которые должны быть согласованными (т. е. пройти через единую/контролируемую службу, которая гарантирует последовательное обновление только одного элемента), это нужно будет сделать вне Riak в вашем API. слой
Измените свойства репликации. ваших непротиворечивых сегментов, чтобы вы могли «гарантировать», что никогда не получите устаревшие данные
На уровне корзины вы можете выбрать, сколько копий данных вы хотите хранить в своем кластере (N или n_val), сколько копий вы хотите считывать за один раз (R или r) и сколько копий должно храниться в вашем кластере. быть записано, чтобы считаться успешным (W или w).
- Приведенный выше метод аналогичен использованию доступной модели строгой согласованности. в последних версиях Riak.
Важное примечание. Во всех этих системах хранения данных (распределенных или нет) вы обычно будете делать следующее:
- Прочитать текущие данные
- Принять решение на основе текущего значения
- Изменить данные (уменьшить количество элементов)
Если все три вышеперечисленных действия нельзя выполнить атомарно (путем блокировки или сбоя третьего, если значение было изменено чем-то другим), приложение электронной коммерции открыто для злоупотреблений. Эта проблема существует в традиционных решениях для хранения SQL (именно поэтому у вас есть транзакции SQL).
04.11.2015