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.

Published 16.9.2009