Po pierwsze, Nodejs jest niesamowity do zapisywania odwrotnych serwerów proxy TCP do baz danych NoSQL. Możesz przepuścić wszystkie standardowe polecenia, ale zmienić/rozszerzyć ich interfejsy API za pomocą własnej magii, np. dzięki czemu MongoDB mówi HTTP lub CouchDB mówi protokół binarny przez gniazda.
Jeśli chodzi o wybór rozwiązania NoSQL do przechowywania elementów gier planszowych i monitorowania ruchów graczy, myślę, że najlepszymi kandydatami są Redis i CouchDB.
- CouchDB. Jest szybki, niezawodny i może obsługiwać wiele jednoczesnych połączeń HTTP. Jest to prawdopodobnie najlepsza opcja, ponieważ w przeciwieństwie do Redis może nadawać komunikat, gdy dokument się zmieni. interfejs API ciągłych zmian
sprawia, że bardzo łatwo jest monitorować aplikację każdego gracza pod kątem zmian na ich tablicy. Żądanie może wyglądać tak:
curl "$HOST/dbname/_changes?filter=app/gameboard&feed=continuous&gameid=38934&heartbeat=1000
Każdy klient otrzyma obiekt JSON w każdym wierszu w odpowiedzi za każdym razem, gdy odpowiedni dokument zostanie zmieniony. (I pusty znak nowej linii co 1000 ms jako rodzaj podtrzymania aktywności). - Redis. Używa prostego protokołu opartego na liniach (takiego jak MemcacheD++) do rozmawiania przez gniazdo i umożliwia przechowywanie list, zestawów, skrótów z arbitralnymi - nawet binarnymi - wartościami. Jest bardzo szybki, ponieważ wszystko dzieje się w pamięci, ale jest utrwalane na dysku asynchronicznie. Ale przede wszystkim powinieneś to ocenić, ponieważ ma już PubSub powiadomienia wypiekane. Pamiętaj, że musisz jawnie publikować powiadomienia o przeniesieniu na kanale współdzielonym przez graczy, ponieważ Redis nie opublikuje automatycznie po zmianie klucza/wartości.
Ponieważ MongoDB nie ma mechanizmu do obserwowania zmian w miarę ich zachodzenia lub robienia pubsub, nie uważam tego za dobrą opcję, chociaż przy dodatkowym wysiłku można sprawić, by to zadziałało.
Podsumowując, możesz być w stanie zastąpić „duży stos LAMP” samym CouchDB, samym Redis lub jednym umieszczonym za aplikacją węzła w celu filtrowania/rozszerzania interfejsów API, które już zapewniają, do czegoś, co pasuje do Twojej gry.
Powodzenia!