Archief - MongoDB

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Drone

Legacy Member
Eerst en vooral ben ik geen SQL/Database expert dus het kan zijn dat ik hier en daar foute dingen zeg. Nu dat ik met een excuus ben begonnen mag ik zoveel onzin verkopen als ik wil. ;)

Wat is MongoDB?

In plaats van dat deze database records gaat opslaan in tabellen werkt MongoDB met documenten. Je kan een document vergelijken met een object in een programmeertaal. MongoDB gebruikt iets wat ze BSON noemen wat staat voor Binary JSON. De documenten kan je dan ook vergelijken met JSON objecten. Deze documenten zitten ook in een collectie zoals een record in een tabel zit.

Bijvoorbeeld:
Product
Omschrijving
Aantal
Labels

In MongoDB ziet dit er zo uit:
Code:
Auto
{
    Omschrijving : "Voertuig op 4 wielen",
    Aantal: 15,
    Labels: ["Voertuig", "Groen", "Diesel"]
}

Ik denk dat de meeste dit wel eens in SQL hebben gemaakt. Voor labels zou je dus een extra tabel moeten maken met een FK naar product. In MongoDB kan je gewoon een collectie van Labels in het document bewaren.

Als je nu zit te denken: leuk, een database voor mensen die niet met relaties kunnen werken. Dit is ook wat ik dacht toen ik de eerste keer zag tot als ik "flexible schemas" zag staan.

Om terug te gaan naar ons product object. Wat als sommige producten geen omschrijving hebben? Wat als je de gebruiker van de software/webapp zelf zijn producten wil laten ontwerpen? Misschien hoeft hij helemaal geen prijs of geen labels. Om dit allemaal op te vangen in een SQL database is heel wat werk nodig.

In MongoDB kan je dit doen:

Code:
Auto
{
    Omschrijving : "Voertuig op 4 wielen",
    Aantal: 15,
    Labels: ["Voertuig", "Groen", "Diesel"]
}
Fiets
{
     Omschrijving : "Voertuig op 2 wielen",
     Type: "Mountainbike",
     Prijs: 15,45
}

Dit geeft natuurlijk enorme flexibiliteit. Denk maar eens aan een CMS waar niet alle pagina's dezelfde eigenschappen hebben.

Om zelf MongoDB eens te proberen moet je de server eens downloaden. Als je deze opzet zie je een console venster en dan kan je met de juiste drivers met de database communiceren. Er zijn drivers voor php, ruby, java, ...

Er zijn nog voordelen aan MongoDB en ook nadelen. Als je meer wil weten over MongoDB bekijk dan eens de volgende links:

MongoDB website: Home - MongoDB - 10gen Confluence
MongoDB video op ruby conferentie: ChicagoRuby on Vimeo
Javascript MongoDB console: Try MongoDB

Dacht de post iets korter te houden. Dus voor die dat mijn ramblings tot hier hebben gelezen, proficiat!

Shaddix

Legacy Member
wat zou nu het voordeel zijn van dit, tegenover het opslaan van data in XML (wat veel vaker gedaan wordt)

ik zie precies erg veel parallellen met XML

Drone

Legacy Member
Performance.

Het grote probleem met xml is dat het ongeveer 90% tags zijn en 10% data. Ook als je een specifieke node in xml nodig hebt dan moet je nog altijd de hele file inlezen. Denk maar is aan een blog met 1000 posts in xml. Telkens je 1 post nodig hebt moet je alle 999 ook doorlopen.

wonko

Legacy Member
XML is handig voor weinig data, of voor datauitwisseling. De overhead aan tags maakt het ongeschikt voor opslag en doorzoekbaarheid.

MongoDB slaat op in een binair formaat, is in staat gigantische (hu-mongo-us amounts) hoeveelheden data te beheren, is gemaakt voor snelheid en heeft onder andere auto-sharding, replicatie en failover aan boord.

Zoeken doorheen een kudde XML-files gaat ook niet echt vlot gaat.

Zijn flexibele en dynamische opslag zorgen er ook voor dat dit zeer geschikt is voor dynamische dataopslag.

dJeez

Legacy Member
Ik heb de links nog niet gelezen, maar de eerste spontane vraag die bij mij opkomt na het lezen van je omschrijving is de volgende : wat is het verschil tussen Mongo en Lucene?

Messias.

Legacy Member
Is Lucene geen full-blown indexering- en search engine-software? De ambities van Mongo (en andere niet-relationele databases, zoals CouchDB) reiken in ieder geval zover niet, en beperken zich alleen tot semi-gestructureerde dataopslag.

Drone

Legacy Member
Er is spraken van full text search in MongoDB. CouchDB maakt ook gebruik van documents maar ik lees dat je met views of zoiets moet werken. Na mongoDb ga ik zeker couchDB ook eens proberen.

Gisteren nog wat testen zitten doen met MongoDB. Met c# zit ik wel met het probleem dat alles strongly typed is. Dus als je met properties zit die verschillen van object tot object moet je al met dictionaries gaan werken. Nu weet ik meteen waarom MongoDB zo populair is bij de ruby developers.

wonko

Legacy Member
Ook in ruby moet je definieren wat je in je document gaat zetten; maar je kan wel dynamisch eerst een object opbouwen, en daarna dit object gaan opslaan. Ik vermoed dat dit in C# ook kan.

Lucene en mongo zijn twee zeer verschllende dingen. Lucene (en bvb Sphinx of Ferret) zijn indexers. Die gaan een database gaan doorzoeken, en een index bijhouden die dan gebruikt kan worden om snel data terug te vinden. Mongo, Couch en alle andere zaken uit de NoSQL branche zijn vervangingen voor dataopslag in SQL wanneer een RDBMS eigenlijk ferme overkill is (wat dat in zeer veel gevallen is, denk maar bvb aan blogs).

Ik geef trouwens dit weekend op Fosdem een introductie tot Mongo, MongoMapper en dit te gebruiken voor dynamische data in de ruby devroom (zaterdag) voor de geïntresseerden.

dJeez

Legacy Member
wonko zei:
Ik geef trouwens dit weekend op Fosdem een introductie tot Mongo, MongoMapper en dit te gebruiken voor dynamische data in de ruby devroom (zaterdag) voor de geïntresseerden.
Niet die op zondag? Want ik zie in de schedule toch een "Introduction to MongoDB" staan voor morgen (10u, NoSQL room). Soit, als ik er op tijd raak ga ik daar wel eens naartoe (aangezien de Dojo presentatie wellicht toch wordt gefilmd en ik die dus later nog kan bekijken).

wonko

Legacy Member
het was wel degelijk gisteren, en het was in de Ruby devroom, niet in de NoSQL track... De presentatie ga ik wel nog online zetten, maar ik vermoed dat zonder de babbel erbij je er weinig mee gaat zijn (het focust ook meer op ruby, mongomapper en dynamische dataopbouw dan op mongodb zelf.)

dJeez

Legacy Member
Spijtig, ik was vanmorgen op tijd, maar het zaaltje zat al overvol. 'k Zal dan maar een beetje proefondervindelijk te werk gaan...

Messias.

Legacy Member
Gooi gerust de slides online (op slideshare of zo), ik ben altijd geïnteresseerd!
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan