A hétvégén belemélyedtem kicsit a kulcs-érték adatbázisok megkutatásába, illetve a map/reduce (mint funkcionális programozási teória, és napjainkban már gyakorlat) mikéntjébe. Megnéztem egy marék nyílt forráskódú adatbázist, idemásolom a jegyzeteimet, egyrészt, hogy nekem meglegyen, másrészt hátha segítség lesz egyszer valakinek. Dőlt betűvel azok a dolgok, ami miatt (számomra, és egyenlőre) kiesett az adott termék:
Scalaris: Google: 194.000. Erlang. Transactions. Only Java & JSON-RPC api?
Tokyo Cabinet: Google: 130.000. no PHP API? (presentation said there is one, but I haven’t found it.) GNU LGPL license.
Project Voldemort: Google: 6.210. Apache2 license. Java. Only Java client. Good resilience, read/write load balancing. R/W: ~10000-20000
Redis: Google: 756.000. BSD license. Telnet. Language: C. API: PHP, python, ruby, java, etc. Master/slave.No FreeBSD port, no Ubuntu package. R: ~114000, W: ~81000. List, sets, incr, decr, etc. Dataset is limited to memory size.
CouchDB: Google: 442.000. Erlang. Apache2 license. RESTful/HTTP. Futon! Views. Two-way replication, but triggered. Relatively slow and CPU hungry?
MemcacheDB: Google: 2.600.000. Memcached API. Telnet. BSD license. Master/slave, automatic. Incr/decr. W: ~18000, R: ~45000
Röviden, a mi team-ünk számára jelenleg a CouchDB és a MemcacheDB opció, és a szemünket rajta tartjuk a Redis-en és a Tokyo Cabinet-en. Megjegyzem, ha elsődlegesen Javában fejlesztenénk, akkor belemásznék jobban a Project Voldemort-ba.
Az említett kettőt fel is tettem és kicsit kísérleteztem velük. A következőre jutottam:
CouchDB-ben baromi jó és kellemes a Futon web-es user felület, biztos hogy a fejlesztést nagyon megkönnyíti. Nagyon jók és kényelmesek a javascriptben írható map/reduce view-k, amik kicsit “visszateszik” a struktúráltságot a kulcs-érték tárolásba. Adott esetben jó lehet, hogy ha cluster-ezi az ember, akkor minden szerver írható olvasható, viszont hogy a sync-et külön kell hívni, az kicsit rémisztő, de adott típusú projectekre azért jó lehet.
MemcacheDB irtózatosan gyors, nagyon sok klienst bír el egyszerre, és nagyon jó ötlet, hogy a memcached protokollját használja, így minden ahhoz írt kliens könyvtárral használható. Az, hogy bele lehet telnet-elni, és ott írni/olvasi az adatot, könnyít a fejlesztésen. (De nem annyira, mint a CouchDB Futon-ja.) Tud értékeket atomikusan növelni/csökkenteni, és vannak benne szinkronicítást segítő atomikus parancsok (replace, set-if-exists, stb). Nincs benne semmiféle keresés vagy map/reduce, csak a kulcs alapján visszakeresés.
Egyenlőre ennyi, remélem, segítség valakinek. :)



szerintem erdemes meg megnezni a MongoDB-t is, gyors, sokféle kliens api van hozzá alapból http://www.mongodb.org