Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

Door , , 17 reacties
Bron: MongoDB, submitter: qless

MongoDB logo (75 pix)MongoDB is een cross-platform document-oriented database. Het is een zogenaamde nosql-database, wat inhoud dat hij niet van tabellen in een relationele database gebruik maakt, maar van json-achtige documenten met dynamische schema's, iets wat MongoDB bson noemt. De naam MongoDB is een afgeleide van het Engelse woord humongous en de database leent zich dan ook prima voor grote omgevingen en kent gebruikers als eBay, SourceForge en de New York Times. Zojuist is versie 3.0 is uitgekomen en uitgebreide informatie over de veranderingen kan in de release notes worden gevonden. Dit zijn in het kort de belangrijkste verbeteringen:

7-10x Better Performance
The new WiredTiger storage engine in MongoDB 3.0 delivers 7-10x greater throughput for write-intensive applications with more granular document-level concurrency control. This translates to massive performance gains with less hardware for write-heavy projects such as your next IoT, customer data management, social, and mobile apps.

Up to 80% Less Storage
MongoDB now supports native compression, allowing you to reduce your physical storage footprint by up to as much as 80%. You have the added flexibility to choose between different compression algorithms to optimize for performance and storage efficiency, depending on your apps needs.

With more granular concurrency control and built-in compression, MongoDB 3.0 lets you simplify your architecture, allowing you to do far more with less hardware.

Reduce Operational Overhead By Up to 95%
Ops Manager is the best way to run MongoDB. This solution makes routine tasks as easy as pushing a button and eliminates previously manual and time consuming tasks involved in managing MongoDB. You can now deploy, monitor, back up and scale MongoDB with ease.

Pluggable Storage Optimized For Your Workload
We understand that with an increasingly complex landscape of data-driven apps, a “one size fits all” approach to storage doesn’t cut it anymore. That’s why MongoDB 3.0 includes a pluggable storage engine API to extend the database with new capabilities.

Low Latency Across the Globe
Today's leading applications are global and serve always-connected audiences that demand instant gratification. With MongoDB, you can now easily distribute up to 50 MongoDB replicas closer to your users all over the world, reducing the effects of network latency and providing a better user experience.

Enhancements That Make You More Productive
MongoDB 3.0 includes a number of operational improvements to the MongoDB Query Language as well as the tools included with the database. They include:
  • Faster Loading and Export. Data can be loaded and extracted at higher speed and with greater efficiency using MongoDB’s revised multi-threaded mongoimport, mongoexport, mongodump, mongorestore and mongooplog tools.
  • Easier Query Optimization. Better understand query performance with the new explain() method. It is now possible to calculate and review query plans without first running the query. The query plan can be applied to a broader set of query types, and error handling is improved.
  • Faster Debugging. You now have much greater control over the granularity of log messages and specific functional areas of the server to more precisely investigate issues. You can configure which specific components of the database should be exposed for higher definition logging and add severity levels for each log message.
  • Richer Geospatial Apps. With the addition of big polygon selections, MongoDB’s geospatial support is extended to include multi-hemisphere queries that can span more than 50% of the earth’s surface. For example, an airline can now run queries to identify all aircrafts that have traveled across multiple hemispheres in the past 24 hours.
  • Better Time-Series Analytics. Developers can construct richer time-series analytics queries with less code using the aggregation framework’s new $dateToString operator.
Ensure Regulatory and Internal Compliance
MongoDB 3.0 adds to the existing security capabilities of the database with a more robust auditing framework.

Auditing now extends beyond capturing administrative actions (i.e. schema operations, authentication and authorization activities) to include the logging of read and write (DML) operations to the database. You can construct and filter audit trails for any operation against MongoDB without having to rely on third-party tools. 3.0 also features the introduction of role-based auditing. Auditing is available as part of MongoDB Enterprise Advanced.

MongoDB screenshot (620 pix)

Versienummer:3.0
Releasestatus:Final
Besturingssystemen:Windows 7, Linux, macOS, Solaris, Windows Server 2003, Windows Vista, Windows Server 2008, Windows Server 2012, Windows 8, Windows 10
Website:MongoDB
Download:http://www.mongodb.org/downloads
Licentietype:GPL

Updategeschiedenis

Moderatie-faq Wijzig weergave

Reacties (17)

Ik gebruik MongoDB zelf al een jaar of twee. Erg interessante database, en voornamelijk in combinatie met node.js omdat je dan dezelfde taal (javascript) op front-end, backend en opslag gebruikt. Bovendien is het practisch te schalen en voor weinig geld professioneel te laten hosten. Uiteraard kan dat ook zelf.

Eén van de dingen wat de kracht en valkuil van MongoDB is is dat het een document-oriented database is. Je slaat stukken JSON (eigenlijk BSON, wat vergelijkbaar is, maar meer strongly typed) op in een collection. Geen transacties, geen joins, geen foreign keys of cascaded deletes, maar bijvoorbeeld wel weer embedded arrays van subdocumenten waar je wel op kan indexeren.
Je moet met heel andere zaken rekening houden dan met een rdbms (waar ik ook al anderhalf decennium mee werk), maar het biedt zeker voordelen in de juiste use-case.

Een erg interessante constructie, en als je die eens grondig zou willen onderzoeken raad ik aan om één van de modules van university.mongodb.com te doen. Deze zijn volledig gratis en in blokken van 7 weken. Als het je niet interesseert om een certificering te halen kan je snel afhaken of later beginnen. Ik heb inmiddels M101JS, M102 en M202 gevolgd. Wat mij betreft één van de beste praktijkopleidingen voor een DBMS die ik ooit heb gevolgd.

(nog) meer on topic:
Ik word zelf erg enthousiast van deze release omdat met name WiredTiger erg gunstig is om met erg beperkte resources een relatief grote dataset te hosten.
Ook biedt de mogelijkheid van pluggable storage engines perspectief om beter gespecialiseerde storage engines te gaan gebruiken. Denk bijvoorbeeld aan de balans tussen reads en writes, of optimalisaties van veel opgevraagde data op SSD en archief op HDD (kan nu al, maar 't is zo maar een voorbeeld).

Daarnaast is MMS - wat vroeger een betaalde management service was - nu enigszins vrijgegeven in de vorm de OPS manager, waarmee de drempel om MongoDB zelf te hosten omlaag gaat.

[Reactie gewijzigd door SndBastard op 6 maart 2015 12:58]

Kun je voorbeelden noemen van toepassingen waarvoor een non-relationele database zoals Mongo de beste keuze is?
Lastig om een éénduidig antwoord op te geven. Omgekeerd zijn er vaak wel situaties denkbaar waar door grote veranderingen of groei aan een applicatie een rdbms soms helemaal om moet, of dat je hele brede tabellen (te veel kolommen) kan krijgen. Daarnaast is het "data access pattern" vaak niet handig als je bepaalde informatie heel ver moet normaliseren. Dan moet je om alles in één keer op te vragen vrij veel joins leggen. In dat soort situaties kan een document DB beter passen.

Voor concrete voorbeelden: denk aan een content management systeem (nieuwspagina) met heel veer verschillende soorten artikelen die misschien niet heel handig in een serie tabellen zou passen zonder er in essentie key-value pairs van te maken. Een ander voorbeeld zou bijvoorbeeld de pricewatch van Tweakers kunnen zijn. Een ENORME hoeveelheid producten met prijzen / links en diverse eigenschappen. Dat kan je prima in SQL modelleren, maar om alle bijbehorende informatie in één keer op te halen moet je dan best een hoop data uit een aantal verschillende tabellen bij elkaar joinen. In MongoDB zou je zoiets mooi kunnen modelleren met één document per product.

Tweakers zelf gebruikt voor zover ik weet ook MongoDB voor gebruikers / sessie instellingen:
"Wel hadden we al langer de wens om de sessies en de voorkeuren van gebruikers flexibeler op te slaan, zodat een gebruiker zijn instellingen zowel per sessie als voor al zijn sessies kan opslaan. Ook zou het prettig zijn als we de database niet elke keer hoeven te verbouwen als we een instelling willen toevoegen.

De starre MySQL-tabelstructuur die we nu gebruiken, sluit niet aan bij die wensen. We stonden daardoor voor de keus om een flexibelere MySQL-database te bouwen of om alternatieve databases te bekijken.

Aangezien de flexibele variant in MySQL zou betekenen dat we extra queries moesten introduceren en de overzichtelijkheid van de code zou afnemen, hebben we een inventarisatie van NoSQL-databases gemaakt. Daarvoor hadden we een aantal eisen geformuleerd."
Bron: plan: Nieuwe databaseserver op 23 juni - update (al uit 2010)
en later nog een interessant stukje op: reviews: Tweakers' serverpark anno 2013

[Reactie gewijzigd door SndBastard op 6 maart 2015 20:37]

Ik zoek een goede (java) oplossing om json efficient op te slaan en te querien (in wat idealiter een database zou zijn), maar had nooit geweten van een een json DB.
Iemand hier ervaring mee?
Zoals -RetroX- al zegt, ik zal eerst eens nagaan of het echt nodig is om persé JSON te gebruiken wat imho niet heel vaak voorkomt. In de meeste gevallen is het beter en flexibeler om een ORM te gebruiken die de vertaalslag doet tussen applicatie (die bijv. JSON wil hebben) en de database. Je kunt dan later ook makkelijk van database switchen of meerdere (verschillende) databases gebruiken als bijvoorbeeld MySQL en MSSQL.

NoSQL is namelijk niet geschikt voor relationeel database werk maar weer prima geschikt om structuren op te slaan (geneste documenten en dergelijken). Een CMS zou dit dus prima kunnen gebruiken om pagina's en posts op te slaan maar heeft daarnaast nog wel een relationele database (MySQL, MSSQL etc.) nodig om de rest van de content (users, acl, instellingen etc.) op te slaan.

Mocht je toch NoSQL willen gebruiken, doe dit dan in combinatie met een goede ORM als Doctrine welke support heeft voor zowel NoSQL als relationele databases ;)
Postgres kan native json aan
Afhankelijk van hoe je het op wil slaan en vooral hoe je erop wil query-en.
Als je kleine JSON documenen hebt en er niet inhoudelijk op wil queryen is Redis wellicht interessant. Als je echt veel verschillende JSON documenten hebt waar wel een soort grote lijn in te ontdekken is, dan kan MongoDB een goede optie zijn. Zeker als het er héél veel worden en je ook zaken als high availability (replication) of clustering (sharding) wil gebruiken.

Anders zou ik toch in eerste instantie afwegen om je informatie enigszins te normaliseren en in een rdbms op te slaan. Ik raad mongodb eigenlijk af als je niet al absurd veel ervaring met een rdbms (postgres, mysql/mariadb, oracle, sql server etc) hebt. Er zit een aantal gevaarlijke valkuilen voor beginners, die voornamelijk te maken hebben met het gebrek aan foreign keys en joins. Als je weet waar je mee bezig is geen enkel probleem, soms zelfs juist waarom je dit wil, maar als beginner kan je er spijt van krijgen.

Edit: voor de goede orde: mongodb slaat geen JSON op maar BSON. Echter, JSON is in alle gevallen zonder verlies van informatie te vertalen naar BSON (mongo doet dit automatisch voor je). BSON is niet altijd te vertalen naar JSON, omdat er sterkere datatypes in voor kunnen komen. Echter, als je BSON van JSON af komt, gaat dit 100% goed.

[Reactie gewijzigd door SndBastard op 6 maart 2015 13:16]

Je kan json nagenoeg direct in mongodb inserten. Mongo voegt er altijd een ObjectId aan toe, iets als ObjectId("53d98f133bb604791249ca99"). Je kan het makkelijk queryen met bijv. spring-data of jongo. Zo zullen er vast nog meer libraries zijn. Ik heb er zelf ook meerdere projecten mee gedaan. Bevalt goed, maar denk goed na over wat je er mee wilt, want het is niet vergelijkbaar met een relationele db. De mindset is echt anders.
Check in je onderzoek ook eens Elasticsearch.

Zie hier de verschillen:
http://db-engines.com/en/system/Elasticsearch%3BMongoDB
Volgens mij is json enkel bedoeld als formaat om data uit te wisselen en niet als formaat om data op te slaan. Daarom dat je waarschijnlijk geen json databases gaat terugvinden.
CouchDB (CouchBase) slaat ook de json direct op, en lijkt in gebruik verder veel op MongoDB, maar er zijn ook belangrijke verschillen (REST vs Binary, whole docs vs 'in doc' handling en de wijze van document replicatie. Google op Couch vs MongoDB voor meer info. En op InfoQ is een goede intro naar de mogelijkheden van CouchDB

[Reactie gewijzigd door devlaam op 6 maart 2015 21:52]

Azure Document DB werkt met JSON.

MongoDB nagenoeg ook, alleen noemen ze het BSON (een iets uitgebreide variant van JSON).
Je hebt meer gelukt met deze vraag als je hem op een forum plaatst dat er geschikt voor is.
Ik zag onlangs nog in een security bulletin dat er een zero-day vulnerability in phpMoAdmin zit, een AJAX-based MongoDB GUI.

Het advies was om deze GUI niet te gebruiken totdat de (phpMoAdmin) ontwikkelaars een patch hebben uitgebracht.

Meer info: https://vimeo.com/121072742
Is het al webscale? :+
Bedankt, allen :)
Ik praat tegen een server die losse json genereert, dit wil ik cachen om vanwege snelheid en om de server te ontlasten. Ik verwacht steeds niet meer dan 1 of 2 velden te hoeven querien (maar wel over alle json berichten) en zal niet veel last hebben van joints oid. Ondanks dat het geen grote DB zal worden ga ik toch even wat tijd in Mongo steken.
@Durandal
Er zijn veel verschillende databases die prima overweg kunnen met JSON. Mongo is hier een van. (Mongo kan nog veel meer maar dat laat ik even achterwege.) Het querien is even wennen omdat men vaak geneigd is om te denken in een klassiek rdbm patroon.

Mongo heeft ook regelmatig webinars (interactief) die je kunt volgen. Documentatie en tutorials zijn ook veel te vinden. PHP heeft standaard connectors voor Mongo. Eigenlijk is het een kwestie van even de tuts door en je kan prima gaan met die banaan.

Als je overigens json voornamelijk gebruikt als object structuur binnen PHP zou je ook een ORM script kunnen gebruiken als RedBeanPHP.

Op dit item kan niet meer gereageerd worden.



Apple iOS 10 Google Pixel Apple iPhone 7 Sony PlayStation VR AMD Radeon RX 480 4GB Battlefield 1 Google Android Nougat Watch Dogs 2

© 1998 - 2016 de Persgroep Online Services B.V. Tweakers vormt samen met o.a. Autotrack en Carsom.nl de Persgroep Online Services B.V. Hosting door True