2012-03-24 4 views
3

мне интересно, если NoSQL вариант для этого сценария:Выбор базы данных для данных о запасах

вход почасовые данные о запасах (sku, количество, цена и некоторые более конкретные) из нескольких источников. Старые версии будут просто потеряны. Таким образом, мы не сможем получить более 1 млн. наборов данных в ближайшем будущем, и не будет никаких запросов бизнес-аналитики, например, в хранилищах данных. Но будет скопления, по крайней мере для минимальная цена группы статей, которые должны быть обновлены, если статья с минимальной ценой группы будет продана. В дополнение к этим объемным записям на частой основе будут единичные декременты на сумму статьи, которая может произойти в любое время.

База данных будет частью службы, которая должна давать быстрые ответы на запросы через REST. Так что должно быть какое-то кэширование. Нет необходимости в строгой консистенции, но долговечности.

Далее лист желания:

  • должен хорошо масштабируется для выращивания запроса на загрузке
  • недорогих технологий в денежном выражении и сложности (не Oracle кластера)
  • нет собственных языков (без PL/SQL)

MongoDB с его aggregation framework кажется многообещающим. Можете ли вы подумать об альтернативах? (Я не придерживаюсь NoSQL!)

ответ

2

Я хотел бы начать с Redis, и вот почему:

  • «там должно быть какое-то кэширование» => и это то, что Redis это лучше всего. Если по какой-либо причине вы решите, что вам нужно «больше», вы можете добавить «больше», но все равно сохраните все, что вы уже разработали в Redis, в качестве кеша для этого «больше»

  • Один Redis быстрый. Два повторения - быстрее. Три Redises - это единица быстрее, чем два, и т. Д.

  • кривой обучения довольно плоский, и весело =>, так как теория множеств действительно весело

  • Надбавки/Декрементирует/Min/Max является родным говорить Redis'

  • Redis интеграции с XYZ (вас упоминается необходимость в REST API) является все более гугл и GitHub

  • Redis честен < = на самом деле одна из моих любимых особенностей Redis


MongoDB будет работать на первый, так будет и любой другой крупный NoSQL, но почему !?

Я бы пошел с Redis, и если вы решите позже, вам нужно «больше», я бы сначала посмотрел на «Redis + SQL db (Postgre/MySQL/etc ..)», он даст вам оба из двух worlds => «Кэширование/Скорость» и «Агрегационная мощность» в случае, если вам потребуется скопление агрегатов выше и выше Min/Max/Incr/Decr.

Кто вам сообщает PostgreSQL «не достаточно быстро для написания« не знает этого.

Кто вам скажет, что MySQL «недостаточно масштабируется« не знает этого (например, Facebook работает на MySQL).

Как я уже на ролике :) => кто вам скажет, что у MongoDB есть «наборы реплик и окантовка», вам не очень нравится, так как наборы реплик и очертания выглядят только сексуально из документов и обмана. После того, как вам понадобится набор реплик reshard/reorg, вы узнаете цену неправильного выбора ключа осколка и движений маховых кусков ...

Снова =>Redis FTW!

0

Ну, мне кажется, что MongoDB - лучший выбор.

Он имеет не только функции агрегации, но и возможности отображения карт/сокращений для целей расчета статистики. Он может масштабироваться через replica sets и sharding, имеет атомные обновления для приращений (декременты - это только отрицательные приращения).

Альтернативы:

  • CouchDB - не достаточно быстро на чтение
  • Redis - это ключ/значение дб. вам нужно будет запрограммировать статьи логики на уровне приложений
  • MySQL - не достаточно масштабируемый
  • PostgreSQL - может быть хорошей альтернативой, если масштабируется с помощью pgbouncer, но не достаточно быстро писать
Смежные вопросы