2014-10-17 4 views
1

Хорошо, прежде всего я хочу сказать вам, что я новичок во всех этих методах, упомянутых в названии.Realtime: Node.js, MongoDB и Redis?

Я хочу создать новое приложение. Подумайте об этом как о механизме торговли в реальном времени (например, для акций).

Итак, есть две вещи, которые действительно имеют значение:

  1. Скорость/Производительность: Каждый человек должен видеть сделки в режиме реального времени
  2. безопасности: Такие же сделки могут быть сделаны одновременно, но только один может быть успешным

Я думал о том подходе, как это:

Если пользователь хочет купить 10 мирах акций X за $ 100 каждый, он размещает заказ, который я STO re с Redis (скорость) и нажмите его всем клиентам с socket.io. Ну, как только другой пользователь хочет продать 15 моментов за 100 долларов, скрипт должен проверить, есть ли открытый заказ на покупку. Если это так, он сохраняет его как успешную транзакцию в MongoDB (persistance) и закрывает порядок покупки в 10 экземпляров.

В этом примере осталось 5 точек. Сценарий будет отображать это с таким расчетом: 15 (продается по цене 100 долларов США) минус 10 (покупка по цене 100 долларов США) равна 5 левым. Каждый раз, когда кто-то хочет торговать чем-то, этот расчет будет сделан, потому что я не знаю, сколько акций осталось для торговли.

Редактировать: Или я мог бы вычесть 10 миров из 15-ти краев в Redis, так что мне не нужно будет вычислять каждый раз. Но если что-то пойдет не так, я не знаю, что такое исходные данные. Это проблема.

Теперь вопросы:

  1. ли вы сделать это, как это? Может быть, лучше идеи?
  2. Что произойдет, если два пользователя сделают один и тот же заказ за одно и то же время? Может ли случиться, что он хранится два раза в MongoDB как разные успешные транзакции? Конечно, вы можете провести аудит Redis и MongoDB и сравнить его. Но это было бы ужасным решением.

Надеюсь, вы поймете, что я пытаюсь спросить. Заранее спасибо!

+0

Вы должны сделать это как транзакцию – webduvet

+0

Вы имеете в виду, как начать транзакцию, записать ее в mongo и в рамках этой транзакции изменить данные в redis? Действительно ли транзакции последовательно? – sleepless

ответ

2

Прежде всего, если вы ничего не знаете из стека, который вы используете, не стоит говорить, что мне нужна высокая производительность (высокая доступность, хорошая безопасность и т. Д.). Будучи абсолютно новым для всех инструментов, которые вы используете, вы должны быть счастливы, если они будут работать.

Что касается вашего вопроса: в первую очередь посмотрите, как другие люди сделали подобные вещи. Here is an open source bitcoin trading engine which uses node.js, что делает его отличным примером для изучения (он сложный, поэтому сделайте глубокий вдох). Если вы хотите использовать mongo, вам нужно знать, что он не поддерживает транзакции, поэтому вам нужно взглянуть, как их реализовать самостоятельно. These two примеры действительно хороши в explaining it.

+0

Спасибо! Проект с открытым исходным кодом, безусловно, очень помогает. Конечно, это проблема, если вы новичок в этом.Поэтому я думал об обучении, делая это лучше и лучше шаг за шагом. Но для этого мне нужно было правильное направление. Было бы глупо создавать его только для того, чтобы позже обнаружить, что это был совершенно неправильный путь. – sleepless