Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? Uta Störl, Thomas Hauf, Meike Klettke, Stefanie Scherzinger Hochschule Darmstadt, Uni Rostock, OTH Regensburg
Motivation Herausforderungen bei der Anwendungsentwicklung mit NoSQL-DBMS Heterogenität und Volatilität des Marktes Proprietäre Schnittstellen in NoSQL-Datenbanksystemen db.blogposts.find ( { _id : 042 }, { titel: 1, text: 1 } ) get blogposts, 042, { COLUMN => [ blogpost_daten:titel, blogpost_daten:text ] } SELECT titel, text FROM blogposts WHERE id = 042 ; function (doc) { if (doc._id == 042 ) { emit(doc._id, [doc.titel, doc.text]); } } Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 2
Motivation Agile Softwareentwicklung führt zu neuen Releases teilweise wöchentlich oder gar täglich mit verändertem Schema Schemaflexibilität von NoSQL-DBMS Maximale Flexibilität bei der Anwendungsentwicklung Aber: Was ist mit existierenden Daten im Produktivsystem? Applikation Version n Applikation Version n + Anwendung muss mit verschiedenen Versionen der Daten umgehen Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 3
Fokus der Analyse Mögliche Vorteile beim Einsatz eines Objekt-NoSQL Mapper Bekanntes Programmierparadigma mit einheitlicher Anfragesprache? Datenbanksystemunabhängigkeit? Unterstützung für Schema-Management? Bislang existieren keine Vergleichsstudien Marktsituation? Reifegrad der Technologie und Systeme? Performance? Applikation Objekt-NoSQL Mapper { } "id" : "042", "titel" :... id tit id tit Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 4
Objekt-NoSQL Mapper: Architektur Applikation id tit SELECT b.titel, b.text FROM blogpost b WHERE b.id = 042 Objekt-NoSQL Mapper id tit db.blogposts.find ( { _id : 042 }, { titel: 1, text: 1 } ) SELECT titel, text FROM blogposts WHERE id = 042 ; get blogposts, 042, { COLUMN => [ blogpost_daten:titel, blogpost_daten:text ] } { } "id" : "042", "titel" :... id titel 042 id titel 042 MongoDB Cassandra HBase Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 5
Marktübersicht Mapper für unterschiedliche Programmiersprachen Java,.NET, Python, Ruby Neuer und volatiler Markt Schwerpunkt der Analyse: Objekt-NoSQL Mapper für Java Standardisierung: Java Persistence API (JPA) mit Java Persistence Query Language (JPQL) Fokus auf etablierte, stabile Systeme Kategorisierung Mapper für mehrere NoSQL-DBMS (Multi Data Store Mapper) Mapper für einzelne NoSQL-DBMS (Single Data Store Mapper) Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 6
Evaluierte Java Objekt-NoSQL Mapper Multi Data Store Mapper Hibernate OGM Version 4.1 B6 Kundera Version 2.13 DataNucleus Version 4.01 EclipseLink Version 2.5.2 Single Data Store Mapper Morphia Version 0.108 Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 7
Evaluierte Java Objekt-NoSQL Mapper Dokumenten. DBMS DataNucleus EclipseLink Hibernate OGM Kundera Morphia CouchDB MongoDB Column-Family DBMS Cassandra HBase Graph-DBMS Neo4J Key-Value DBMS Ehcache Elasticsearch Infinispan Oracle NoSQL Redis Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 8
Objekt-NoSQL Mapper: Requirements Create / Read / Update / Delete (CRUD) Operationen auch Statements für Änderungen mehrerer Objekte Standardisierte Anfragesprache z.b. JPQL für Java Native Queries für spezielle Funktionalitäten bzw. Performance-Optimierung MapReduce Parallele, verteilte Anfrageverarbeitung Polyglot Persistence Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 9
Analyse der unterstützten Funktionalität Single Data Store Mapper *Eingeschränkte Funktionalität; abhängig vom verwendeten NoSQL-DBMS Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 10
Query Language Unterstützung Herausforderung: Sehr unterschiedliche Query-Schnittstellen Nicht nur syntaktisch verschieden, sondern auch Unterschiede in der Mächtigkeit Beispiele: NOT, LIKE, ORDER BY werden von vielen NoSQL-DBMS (noch) nicht unterstützt JOIN wird von (fast) keinem NoSQL-DBMS unterstützt Lösungsansätze 1. Unterstützung nur der Funktionalitäten, die von allen(!) NoSQL-DBMS unterstützt werden 2. NoSQL-DBMS-spezifische Unterstützung 3. Gleicher Funktionsumfang für alle NoSQL-DBMS mit Implementierung fehlender Funktionalität im ONM Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 11
Query Language Unterstützung Ansatz 2: NoSQL-DBMS-spezifische Unterstützung von JPQL- Operatoren Nachteil: Datenbanksystemunabhängigkeit eingeschränkt Systeme: Hibernate OGM, Kundera, EclipseLink Beispiel: Operatoren (Auswahl) in Kundera Erweiterung: Vom NoSQL-DBMS nicht unterstützte Suchoperatoren mit Hilfe von Suchmaschinen bereitstellen Systeme: Hibernate OGM (Hibernate Search), Kundera jeweils mit Apache Lucene Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 12
Query Language Unterstützung Ansatz 3: Gleicher Funktionsumfang für alle NoSQL-DBMS mit Implementierung fehlender Funktionalität im ONM Analyse der Query und Realisierung von nicht unterstützten Funktionalitäten im Objekt-NoSQL Mapper Vorteil: Datenbanksystemunabhängigkeit / Portabilität Nachteil: Performance Applikation Objekt-NoSQL Mapper Systeme: DataNucleus, Hibernate OGM (geplant) NoSQL-DBMS Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 13
Funktionalität: Fazit Datenbanksystemunabhängigkeit Standardisierte Anfragesprache (JPQL) Unterschiedliche Vielfalt der unterstützten NoSQL-DBMS Teilweise Abhängigkeit des Umfangs der JPQL-Unterstützung vom verwendeten NoSQL-DBMS Teilweise Modellierungseinschränkungen (@ElementCollection) Details siehe Paper Performance? Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 14
Performance Fragestellungen Wie beeinflusst die Nutzung eines Objekt-NoSQL Mappers die Performance von Lese- und Schreiboperationen? Gibt es Unterschiede in den Performance-Auswirkungen zwischen verschiedenen Objekt-NoSQL Mappern? Gibt es Unterschiede in den Performance-Auswirkungen abhängig vom verwendeten NoSQL-DBMS? Disclaimer Es existiert derzeit kein allgemein anerkannter NoSQL- Benchmark mit nicht-trivialen Operationen Viele Objekt-NoSQL Mapper (ONM) sind in einem sehr frühen Release-Stadium Veränderungen mit jedem Release Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 15
Performance Datenmodell Mengengerüst Skalierung zwischen 1.000 und 1.000.000 Profile Pro Profil 5 WallEntry-Objekte mit Ø 2 Comment-Objekten 3 Chat-Objekte mit Ø 5 Message-Objekten Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 16
Performance Evaluierte Objekt-NoSQL Mapper / unterstützte NoSQL-DBMS Hibernate OGM Kundera Hibernate OGM Kundera Kundera Kundera DataNucleus DataNucleus DataNucleus EclipseLink Morphia MongoDB CouchDB Cassandra HBase Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 17
Performance Messumgebung Big Data Cluster der Hochschule Darmstadt Client und Server auf separaten Maschinen im gleichen lokalen Netzwerk Dell PowerEdge C6220 2 Intel Xeon E5-2609 (je 4 Cores) 32 GB RAM 4 x 1 TB SATA 7.2 k HDs Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 18
Read Performance: Queries 0. find( Profile, intvalue ) 1. SELECT p FROM Profile p WHERE p.profileid= intvalue 2. SELECT p FROM Profile p WHERE p.firstname= stringvalue AND p.lastname= stringvalue 3. SELECT p FROM Profile p WHERE p.yearofbirth= intvalue 4. SELECT p FROM Profile p WHERE p.lastname= stringvalue 5. SELECT p FROM Profile p WHERE p.yearofbirth >= intvalue AND p.yearofbirth <= intvalue 6. SELECT p FROM Profile p WHERE p.lastname= stringvalue AND p.firstname <> stringvalue AND p.firstname <> stringvalue 7. SELECT p FROM Profile p WHERE p.lastname= stringvalue AND ( p.firstname = stringvalue OR p.firstname = stringvalue ) 8. SELECT w FROM WallEntry w WHERE w.likecounter >= intvalue AND w.entry LIKE %stringvalue% 9. SELECT p FROM Profile p WHERE p.logininfo.mail LIKE %@stringvalue AND p.country IN ( stringvalue, stringvalue ) 10. SELECT w FROM WallEntry w JOIN w.comments c WHERE c.comment LIKE %stringvalue% AND w.entry LIKE %stringvalue% Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 19
Read Performance 10.000 Profile Werte für MongoDB Ergebnisse für die anderen NoSQL-DBMS vergleichbar Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 20
Read Performance 10.000 Profile (ohne DataNucleus) Werte für MongoDB Query 0 und 1: find-operator vs. JPQL Fehlende Werte Query nicht ausführbar oder falsche Ergebnisse Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 21
Read Performance Skalierung (ohne DataNucleus) Query 4: SELECT p FROM Profile p WHERE p.lastname = stringvalue Werte für MongoDB (Ergebnisse für die anderen NoSQL-DBMS vergleichbar) Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 22
Write Performance: Skalierung Insert Profile und Login 1:1 Beziehung gemeinsame Speicherung Profile und WallEntry 1:N Beziehung 100,000,000 100,000,000 Werte für MongoDB Overhead-Faktor abhängig vom verwendeten NoSQL-DBMS Werte für MongoDB Overhead-Faktor abhängig vom verwendeten NoSQL-DBMS Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 23
Write Performance: Update Update von 25 Profilen auf unterschiedlichen Datenmengen Werte für MongoDB Overhead-Faktor abhängig vom verwendeten NoSQL-DBMS Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 24
Performance: Fazit Read Performance Overhead (außer DataNucleus) zwischen Faktor 1.4 und 2 (unabhängig vom verwendeten NoSQL-DBMS) ABER: Nicht alle Queries können von allen ONM ausgeführt werden Teilweise Probleme mit Korrektheit der Query-Ausführung (abhängig vom NoSQL-DBMS) Testen!!! Write Performance Overhead beim Schreiben (Insert/Update/Delete) deutlich größer als beim Lesen Unterschiedliche NoSQL-DBMS: Rangfolge zwischen den ONM bleibt gleich, aber Faktor zur nativen Implementierung signifikant unterschiedlich (2 1000) Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 25
Status Quo Java Objekt-NoSQL Mapper Marktsituation Etablierte Objekt-Relational Mapper Anbieter erweitern ihr Angebot um Objekt-NoSQL Mapper (z.b. Hibernate, EclipseLink, DataNucleus) sowie neue Anbieter im Markt (z.b. Kundera) Volatiler Markt Datenbanksystemunabhängigkeit Standardisierte Anfragesprache (JPQL) Unterschiedliche Vielfalt der unterstützten NoSQL-DBMS Teilweise Abhängigkeit des Umfangs der JPQL-Unterstützung vom verwendeten NoSQL-DBMS Frühes Entwicklungsstadium teilweise noch mit Fehlern Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 26
Status Quo Java Objekt-NoSQL Mapper Performance Konstanter (moderater) und vom verwendeten NoSQL-DBMS unabhängiger Overhead für Read-Operationen Teilweise großer Overhead für Write-Operationen (Overhead stark abhängig vom verwendeten NoSQL-DBMS) Schema-Management Unterstützung für Schema-Definition und Validierung der Daten Bislang nur rudimentäre Unterstützung für Schema-Evolution Details siehe Paper Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 27
Ausblick Objekt-NoSQL Mapping Breitere Unterstützung für verschiedene NoSQL-DBMS Mächtigere Query Engines In NoSQL-DBMS und/oder in Objekt-NoSQL Mappern? Flexibilisierung der Mapping-Strategien Ausbau der Unterstützung für Schema-Evolution Polyglot Persistence Unterstützung für automatisierte Polyglot Persistence? Performance-Verbesserungen Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 28
Literatur M. Klettke, S. Scherzinger und U. Störl. Datenbanken ohne Schema? Herausforderungen und Lösungs-Strategien in der agilen Anwendungsentwicklung mit schemaflexiblen NoSQL- Datenbanksystemen. Datenbank-Spektrum, 14(2):119 129, 2014. P. J. Sadalage and M. Fowler. NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence. Addison Wesley, 2012. M. Schaarschmidt, F. Gessert, N. Ritter. Towards Automated Polyglot Persistence. BTW 2015, Hamburg U. Störl, Th. Hauf, M. Klettke und Stefanie Scherzinger: Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? BTW 2015, Hamburg F. Wolf, H. Betz, F. Gropengießer, K.-U. Sattler: Hibernating in the Cloud - Implementation and Evaluation of Object- NoSQL-Mapping. BTW 2013, Magdeburg: 327-341 Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 29
Literatur Java Objekt-NoSQL Mapper DataNucleus: http://www.datanucleus.org/ EclipseLink: http://eclipse.org/eclipselink/ Hibernate OGM: http://hibernate.org/ogm/ http://hibernate.org/ogm/roadmap/ Kundera: https://github.com/impetus-opensource/kundera Morphia: https://github.com/mongodb/morphia/ PlayORM: http://buffalosw.com/products/playorm/ SpringData: http://projects.spring.io/spring-data/ Uta Störl Schemaless NoSQL Data Stores Object-NoSQL Mappers to the Rescue? 30