Viime päivinä olen kokeillut MongoDB-tietokantaa. Mongo on kunnianhimoinen projekti, joka pyrkii tekemään NoSQL-tiedonkäsittelystä yhtä joustavaa kuin relaatiokannoista. Sen tietomalli pohjautuu vapaamuotoisiin JSON-rakenteisiin, joita voi indeksoida ja joihin voi kohdistaa monimutkaisiakin hakuja.
Kokeiluprojektissani olen implementoinut Google Datastore API:n kanssa yhteensopivaa model-rajapintaa MongoDB:n päälle. Tämän tarkoituksena on se, että Django-sovellus voisi käyttää samoja tietokantamalleja sekä Google App Enginessä että paikallisesti MongoDB:n kanssa.
Projekti on ollut yllättävän helppo, sillä MongoDB:n kyselyrajapinta on yksinkertainen mutta hyvin joustava. Google Datastoressa tyypillinen kysely saattaisi näyttää tältä:
products = Product.all() \
.filter('category =', 'book') \
.order('-published') \
.fetch(100)
MongoDB:ssä sama kysely menisi suunnilleen näin:
products = connection.shop.Product \
.find({'category':'book'}, limit=100) \
.sort({'published':-1})
Toisin sanoen tietomallit ovat hyvin lähellä toisiaan ja MongoDB:llä on suhteellisen helppoa emuloida Google Datastoren toimintoja.
MongoDB on muuten hyvää vauhtia kehittymässä oikeasti skaalautuvaksi tietokannaksi. Sen sharding-tuki on alpha 2 -vaiheessa ja mahdollistaa pian tietokantojen hajauttamisen usealle serverille.