CouchDB, een NoSQL applicatie waar we de komende jaren nog veel van gaan horen.
Wat is CouchDB? Dat vroeg ik mijzelf ook af toen ik CouchDB voor het eerst hoorde. Ik was enkel bekend met MySQL, een database die erg populair is onder developers. Je kent het wel, denk na over wat je in database wilt stoppen, definieër je tabellen en gaan!
Ik ben ongeveer een half jaar geleden begonnen met het bouwen van een web-app in CouchDB. Dit was een schoolopdracht, en ik had mezelf als doel gesteld om cutting-edge technieken te gaan gebruiken.
Welke tools koos ik uit?
Ten eerste de programmeertaal, Python, een taal waar ik nog nooit wat mee heb gedaan. Ten tweede een Python framework, Tornado! En als laatste koos ik voor een nieuwe opslag techniek genaamd CouchDB. Nu heb ik je al ongeveer 3 paragrafen lekker gemaakt met de naam CouchDB, maar wat is het nou precies?
CouchDB is een document oriënted key-value storage syteem. Een wat!?, juist dat denken er veel, maar echt moeilijk is het niet. CouchDB heeft geen schema voor je documenten, in tegenstelling tot de SQL familie. Doordat de documenten geen schema hebben, kan je erin stoppen wat je wilt, in ieder geval wat JSON toelaat. JSON is namelijk de manier om data in je bank te stoppen, maar ook hoe je het eruit krijgt.
JSON, is dit handig?
Ja, ik vind van wel! Ik ben bekend met JSON, het is een flexibelegegevensuitwisseling formaat die vooral gebruikt word voor REST API's en server-client communicatie met javascript. JSON is namelijk een subset van javascript, dit betekent dat je in JSON de beschikking hebt over de standaard data formaten in Javascript. Je kan bijvoorbeeld integers, floats, strings, arrays en objecten gebruiken om je document mee op te zetten.
Views
Views zijn voor CouchDB, wat SELECT queries zijn voor SQL databases. Deze views selecteren documenten op de criteria die jij stelt (criteria's worden in de volgende paragraaf behandeld). Deze views worden apart van de dataset opgeslagen, aangezien ze vrij intensief zijn voor je database, waardoor je database supersnel is met je 'queries'. Deze views worden elke keer nagekeken wanneer je een nieuwe document aan je database toevoegd.
Map Reduce methodiek
Een groot verschil tussen de traditionele database systemen en CouchDB is, het gebruik van Map Reduce. Deze methodiek gebruik je om de data te selecteren die voor jou van belang zijn, de select-queries in SQL. Wat doet het dan precies? wanneer je een view(query over je dataset) maakt in CouchDB, geef je een map functie mee. Deze functie wordt over elk document uitgevoerd, en beslist of het document in de view resultaat mag gezet worden of niet. Nadat de Map functie klaar is met zijn werk, hou je een lijst met documenten over die aan jou criteria voldoen. Wat je daarna ook nog kan doen, is het toepassen van de Reduce functie. Deze functie geeft één waarde terug van de meegegeven documenten. Denk hier aan de totaal aantal comments op een blogbericht. MapReduce is een zeer krachtig maar ook wel lastige methodiek. Wanneer je een duidelijke uitleg over dit thema wilt hebben, verwijs ik je door naar het desbetreffende wikipedia artikel.
HTTP
Naast de krachtige views en MapReduce, heeft CouchDB nog een voordeel. Je kan namelijk CouchDB bereiken via HTTP. Dit betekent dat je bijna met elke taal een CouchDB applicatie kan maken.
Replication
Een ander voordeel van het gebruik van HTTP is, replication. Het is in principe het kopiëren van een database, maar dan simpel. Je kan in een mum van tijd je gehele live database naar je development omgeving toe kopiëren en je hebt de identieke database tot je beschikking als die op de live omgeving. Maar het werkt ook de andere kant op. Stel je hebt wat wijzigingen in je database doorgevoerd in de development omgeving, en je wilt deze doorvoeren op de live omgeving. Met SQL moet je vele queries draaien, eer dat je de wijzigingen hebt doorgevoerd, met CouchDB is dit niet zo. Je geeft wederom aan waar je de database naartoe wilt kopiëren en CouchDB verstuurt je database via HTTP naar je live omgeving!
Naast dat CouchDB een groot aantal voordelen heeft, is het ook gewoon leuk om er mee te werken!
Wat denken jullie van CouchDB, handig of overkill?
Ik heb mijn kleine, helaas zonder animaties geconverteerde presentatie online gezet welke hieronder beschikbaar is.
Jordy