sql >> Databáze >  >> NoSQL >> MongoDB

Jak mám navrhnout svůj DB &API server pro tahovou multiplayerovou deskovou hru pro iPhone? (přemýšlím o nodejs, mongo, gauči atd.)

Za prvé, Nodejs je úžasný pro psaní reverzních TCP proxy do databází NoSQL. Můžete nechat projít všechny standardní příkazy, ale změnit/rozšířit jejich API vlastní magií, např. umožňuje MongoDB mluvit HTTP nebo CouchDB mluvit binárním protokolem přes sokety.

Pokud jde o výběr řešení NoSQL pro ukládání figurek deskových her a sledování pohybů hráčů, myslím si, že nejlepšími kandidáty jsou Redis a CouchDB.

  1. CouchDB. Je rychlý, spolehlivý a zvládne spoustu souběžných HTTP připojení. Je to pravděpodobně nejlepší volba, protože na rozdíl od Redis může vysílat zprávu, když se dokument změní. API pro nepřetržité změny Díky tomu je pro vás velmi jednoduché mít aplikaci každého hráče monitorující změny na desce. Požadavek může vypadat takto:

    curl "$HOST/dbname/_changes?filter=app/gameboard&feed=continuous&gameid=38934&heartbeat=1000

    Každý klient obdrží objekt JSON na řádek v odpovědi, kdykoli se změní příslušný dokument. (A prázdný nový řádek každých 1000 ms jako druh udržování života.)

  2. Redis. Používá jednoduchý linkový protokol (jako MemcacheD++) pro komunikaci přes soket a umožňuje vám ukládat seznamy, sady, hashe s libovolnými – dokonce i binárními – hodnotami. Je to velmi rychlé, protože vše se odehrává v paměti, ale zůstává na disku asynchronně. Ale hlavně byste to měli vyhodnotit, protože už má PubSub oznámení zapečena. Upozorňujeme, že budete muset explicitně publikovat oznámení o přesunu v kanálu, který hráči sdílejí, protože Redis nebude automaticky publikovat, když se změní klíč/hodnota.

Vzhledem k tomu, že MongoDB nemá mechanismus pro sledování změn, jak se dějí, nebo provádění pubsub, nepovažuji to za dobrou volbu, i když s větším úsilím byste to mohli udělat.

Abychom to uzavřeli, možná budete schopni nahradit „velký zásobník LAMP“ samotným CouchDB, samotným Redisem, nebo buď jedním umístěným za aplikací uzlu pro filtrování/rozšíření rozhraní API, která již poskytují, do něčeho, co vyhovuje vaší hře.

Hodně štěstí!



  1. NodeJS + MongoDB:Získávání dat z kolekce pomocí findOne ()

  2. Jsou aktualizace Redis synchronní?

  3. Uzel se nepřipojuje k Mongo více než jednou

  4. mongoose aktualizovat pole nebo přidat do pole