MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Дизайн на схема на MongoDB - Чат в реално време

Използвах Redis , NGINX &PHP-FPM за моя проект за чат. Не е супер елегантен, но върши работа. Има няколко части от пъзела.

  1. Има много прост PHP скрипт, който получава клиентски команди и ги поставя в един масивен СПИСЪК. Той също така проверява всички СПИСЪЦИ на стаи и личния СПИСЪК на потребителите, за да види дали има съобщения, които трябва да достави. Това се анкетира от клиент, написан на jQuery, и се прави на всеки няколко секунди.

  2. Има PHP скрипт на командния ред, който работи от страната на сървъра в безкраен цикъл, 20 пъти в секунда, който проверява този списък и след това обработва тези команди. Скриптът управлява кой в ​​каква стая е и разрешенията в паметта на скриптовете, тази информация не се съхранява в Redis.

  3. Redis има СПИСЪК за всяка стая и СПИСЪК за всеки потребител, който работи като частна опашка. Освен това има множество броячи за всяка стая, в която се намира потребителят. Ако броячът на потребителите е по-малък от общия брой съобщения в стаята, тогава получава разликата и я изпраща на потребителя.

Не успях да направя стрес тест на това решение, но поне от моя основен сравнителен анализ вероятно би могло да се справи с много хиляди съобщения в секунда. Има и възможност това да се пренесе към нещо като Node.js, за да се увеличи производителността. Redis също се развива и има някои интересни функции като Pub/Subscribe команди, които може да представляват интерес, които евентуално биха премахнали запитването от страната на сървъра.

Разгледах решения, базирани на Comet, но много от тях бяха сложни, лошо документирани или изискваха от мен да науча изцяло нов език (напр. Jetty->Java, APE->C) и т.н... Освен това доставката и преминаването през проксита може понякога да бъде проблем с Comet. Ето защо останах в анкетата.

Предполагам, че бихте могли да направите нещо подобно с MongoDB. Колекция на стая, колекция на потребител и след това колекция, която поддържа броячи. Все пак ще трябва да напишете back-end демон или скрипт, за да управлявате къде отиват тези съобщения. Можете също така да използвате „ограничените колекции“ на MongoDB, които поддържат документите сортирани и също автоматично изчистват старите съобщения, но това може да е сложно при поддържането на правилни броячи.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да изчислим процента с помощта на фасет в MongoDB?

  2. Как мога да актуализирам увеличение на две полета в една команда в MongoDB?

  3. Кой е алтернативният плъгин за elastic river-mongodb, поддържан от elasticsearch 2.2.0?

  4. Mongoose, масив от местоположения на индекси

  5. MongoDB count команда