
CouchDB - ikke en relationel database
Databaser er altså usexede. Det er ikke det de unge vil have - altså med mindre man pakker det ind i nogle sexede ting som f.eks. en REST-indpakket service skrevet i Erlang.
Det er netop det som CouchDB er. I den kedelige ende fortæller ophavsmanden Damien Katz at ideen til CouchDB kommer fra Lotus Notes, som Damien har arbejdet på i et tidligere job hos IBM. CouchDB er en dokument-orienteret database, som er designet til at være distribueret og fejltolerant. CouchDB er altså ikke en relationel database, men heller ikke søjle-orienteret (eller hvad siger man på dansk?) database som Googles BigTable.
Databasen strukturerer data i views ved hjælp af Javascript "queryes" - Javascript er default, men også Python, PHP og Ruby kan bruges (så må der da være noget de unge vil have).
På projekthjemmesiden understreges at CouchDB ikke er en erstatning for relationelle databaser, men en database, som er god i specifikke brugssituationer - situationer som Damien Katz blandt andet snakker lidt om i et videointerview på InfoQ.
Nu er CouchDB så kommet på min TODOliste over ting jeg skal lege med, når jeg bliver færdig med specialet - databaser er alligevel et af de emner, som jeg synes universitets-undervisningen skøjter let hen over. Jeg hører at undervisningen på DAIMI (datalogi Århus Uni) for tiden er baseret på DB2 - måske skulle de overveje at udvide pensum med et par andre alternativer?
Fordelene ved at CouchDB er skrevet i Erlang er lidt tågede for mig - er der evt. nogle Erlang-eksperter derude der kan forklare det lidt nærmere? Damien nævner det vist i videointerviewet på InfoQ, men går ikke i detaljer.
Therese Hansen er medstifter af it-firmaet Monzoom og blogger om softwareudvikling og startups. Hun bruger sin tid på at rejse og at arbejde på firmaets første produkt xiive.com - en social medie-filtreringsservice.
Follow @qedthereseKommentarer (6)
Du får jo en del forærende ved at vælge Erlang til den type opgave.
Fx fejltolerance og concurrency (på den rigtige måde uden shared-state), samt en nem distributions mekanisme.
Jeg har leget lidt med CouchDb og det er ret cool, en god beskrivelse jeg har set er:
RDBMS er statisk data med dynamiske queries
CouchDb er dynamisk data med statiske queries
Der godt afspejler, at queries er noget man designer som en del af sin applikation (i stedet for skemaer) idet det er en dyr operation at ændre/tilføje disse senere, hvis man har mange dokumenter i sin database.
Relax!
Hvorfor mener du det er den kedelige ende?
"I den kedelige ende fortæller ophavsmanden Damien Katz at ideen til CouchDB kommer fra Lotus Notes"
Lotus Notes er tung og usexet set med mine øjne - og jeg har siddet hos IBM og skulle "bare" bruge Notes som email-program og dokumentdelingsprogram.
Jeg ved ikke om det var en speciel gammel version jeg sad med, men den var både tung, fejlbehæftet og svær at debugge. Jeg sad på brugersiden af Notes i 3 år, men jeg vil da ikke udelukke at jeg havde mere kærlige følelser overfor Notes, hvis jeg havde siddet på udviklersiden.
(Har endnu ikke set/hørt interviewet.)
"Dokument-orienteret database" er egentlig en uheldig betegnelse, idet den umiddelbart henleder tankerne på et journal-system hvor hvad som helst kan proppes ind sammen med nogle metadata (og hvor man yderligere kan være heldig at systemet er i stand til at trække tekst ud til fuldtekstindekseringen). Det er jo ikke tilfældet med CouchDB, så vidt jeg kan forstå: Der er visse formater som skal overholdes.
Jeg synes ikke umiddelbart, at CouchDBs database-egenskaber er særlig interessante. Mere interessant er det at den antagelig benytter Erlangs faciliteter til at skabe effektiv replikering og stor robusthed. Og et indbygget REST interface til databasen er også en god idé; de etablerede databaseproducenter kunne faktisk lære noget her, synes jeg: Jeg tror, det i mange sammenhænge kunne være praktisk til simple queries.
DB2: Mange steder undervises der i pessimistisk låsning, hvilket DB2 er én af de få resterende eksponenter for. Så på den måde kan den godt give god mening at benytte DB2. (DB2's medfølgende kontrolcenter er noget hø, men man kan jo tilgå den på andre måder). På DB2s featureliste er også opdatérbare views, hvilket jeg ville prioritere hvis jeg skulle undervise i databaser. Endelig er det min oplevelse at DB2 er i spidsen mht. "semantisk query optimering", hvis underviseren skulle have lyst til at bevæge sig ud i dét felt.
Men det er klart, at adskillige andre databasesystemer kunne komme i betragtning som undervisnings-databaser. Fx. PostgreSQL, fordi den har ret god standard SQL understøttelse og fordi den er så let at udvide for programmerings-glade studerende: Den distribueres som open source, og der er allerede et hav af sprog som kan anvendes i den, server-side.
(Gid InfoQ ville lægge deres interviews ud som lydfiler, og ikke kun som videofiler - så kunne man slippe for at rippe lyden ud til MP3-afspilleren.)
I øvrigt:
De mest horisont-ekspanderende database-lignende sprog/systemer, jeg stødte på som studerende var Prolog og ConfigIt's PML. Omend de måske kan siges mere at være VIDENSbaser end DATAbaser.
Ja i CouchDb er et document et json object, men der tillades attachments, som kan være, hvad som helst.
Fulltext indeksering virkede engang (jeg tror det var før v. 0.5), men der er lavet for meget om siden uden den del er vedligeholdt. Planen er at lave en reference implementation baseret på Apache Lucene, men det er planlagt til v1.0 og v0.9 er først lige ved at blive releaset.
