- Очереди для управления обновлениями инвентаря для каждого канала.
Это не обязательно проблема базы данных.Возможно, вам лучше взглянуть на систему обмена сообщениями (например, RabbitMQ)
- Таблица инвентаризации, в которой есть правильный моментальный снимок распределения по каждому каналу.
- Сохранение идентификаторов сеансов и другихданные быстрого доступа в кеше.
данные сеанса, вероятно, следует поместить в отдельную базу данных, более подходящую для этой задачи (например, memcached, redis и т. д.)-all DB
- Предоставление Facebook-панели управления (XMPP), чтобы держать продавца в курсе как можно скорее.
Мои ограничения: 1. Обновления инвентаря не могут быть потеряны.
Есть 3 способа ответить на этот вопрос:
Эта функция должна предоставляться вашим приложением.База данных может гарантировать отклонение и откат неверной записи, но не может гарантировать, что каждый запрос будет введен.Приложение должно быть достаточно умным, чтобы распознавать, когда происходит ошибка, и пытаться снова.
некоторые БД хранят записи в памяти, а затем перезаписывают память на диск, это может привести к потере данныхв случае сбоя питания.(например, Mongo работает таким образом по умолчанию, если вы не включите ведение журнала. CouchDB всегда добавляет к записям (даже удаление - это флаг, добавляемый к записи, поэтому потеря данных чрезвычайно затруднительна))
Некоторые БД спроектированы так, чтобы быть чрезвычайно надежными, даже если в результате землетрясения, урагана или другого стихийного бедствия они остаются долговечными.К ним относятся Cassandra, Hbase, Riak, Hadoop и т. д.
К какому виду долговечности вы относитесь?
- Очереди заданий должны выполняться впорядок и желательно никогда не теряется.
Большинство решений noSQL предпочитают работать параллельно.так что у вас есть два варианта здесь.1. использовать базу данных, которая блокирует всю таблицу для каждого запроса (медленнее) 2. построить приложение, чтобы оно было умнее или ровнее (последовательная организация очереди на стороне клиента)
- Простая / быстрая разработка и будущееобслуживание.
Как правило, сначала вы обнаружите, что SQL быстрее разрабатывается, но для реализации изменений может оказаться сложнее, для noSQL может потребоваться немного больше планирования, но это проще сделать ad hocзапросы или изменения схемы.
Вопросы, которые вам, вероятно, нужно задать себе, больше похожи на:
"Будут ли мне нужны интенсивные запросы или глубокий анализ, что Map /Reduce лучше подходит для? "
" мне нужно будет часто менять свою схему?
"Являются ли мои данные высоко реляционными?каким образом? "
" Достаточно ли у продавца за моей выбранной БД опыта, чтобы помочь мне, когда мне это понадобится? "Понадобятся ли мне специальные функции, такие как GeoSpatial indexing, полнотекстовый поиск и т. д.? "
" Насколько близко к реальному времени мне понадобятся мои данные?Будет ли больно, если я не увижу последние записи в моих запросах до 1 секунды позже?какой уровень задержки приемлем? "
" что мне действительно нужно с точки зрения переключения при сбое "
" насколько велик мойданные?это поместится в памяти?это будет соответствовать на одном компьютере?каждая отдельная запись большая или маленькая?
"как часто меняются мои данные? это архив?"
Если вы собираетесьчтобы иметь несколько клиентов (каналов?), каждый из которых имеет свои собственные схемы инвентаризации, БД на основе документов может иметь свои преимущества.Я помню, как однажды я посмотрел на систему электронной коммерции с инвентарем, и в ней было почти 235 таблиц!Опять же, если у вас есть определенные реляционные данные, решение SQL может действительно иметь некоторые преимущества.
Я, конечно, могу видеть, как я мог бы построить решение, используя mongo, couch, riak или orientdb с заданными ограничениями. А что для чего лучше? Я бы попытался поговорить напрямую с поставщиками БД и, возможно, посмотреть ленты nosql