warum 'ne datenbank, wenn wir elasticsearch haben?

47
Warum ‘ne Datenbank, wenn wir Elasticsearch haben? @jodok #dchh

Upload: jodok-batlogg

Post on 12-Jun-2015

1.886 views

Category:

Technology


2 download

DESCRIPTION

Developer Conference Hamburg 2013

TRANSCRIPT

Page 1: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Warum ‘ne Datenbank, wenn wir Elasticsearch haben?

@jodok #dchh

Page 2: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

@jodok @cratedb

@lovelysystems

Page 3: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Was macht ‘ne Datenbank?

1. Dokumente speichern 2. Binäre Objekte speichern 3. … wieder finden/lesen 4. … analysieren 5. … wieder verändern

Page 4: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Wie macht man das bei einer großen Datenmenge?

MongoDB (1., 3., 4., 5.?) + Elasticsearch (3.) + GridFS (2)

!

Riak (1., 3., 4.?, 5.?) + Solr (3.) + Rados (2) !

CouchDB (1., 4) + Elasticsearch (3.) + HDFS (2.) + Hadoop (4., 5.)

Page 5: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Einfachzu benutzen, zu skalieren, zu betreiben

Page 6: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Elasticsearcheinfach geil

Page 7: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Einfach toll… (nicht nur search)

• Echtzeit-Suche

• Verteilt

• Hoch verfügbar

• Mandantenfähig

• Volltext Suche

• Versions - Konfliktbehebung

• Restful API

Page 8: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Und nu’?

Page 9: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

• Sicherheitsmodell? • Transaktionen? • Datensicherheit? • Reifegrad der Werkzeuge? • Große Berechnungen? • Verfügbarkeit der Daten?

Page 10: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Was macht die Datenhaltung?

… but also inspired by Nathan Marz

Page 11: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

ACID• Atomicity - alles oder nichts

• Consistency - nur gültige/valide Daten werden gespeichert

• Isolation - sich so verhalten, als ob alle Transaktionen seriell passieren und die Daten korrekt sind

• Durability - ich lese genau das, was ich geschrieben habe

• Das ist zuuu vieeel, speziell bei verteilten Knoten.

• Ausfälle? Zuverlässigkeit? Mehrere Server!

• Hohe Anzahl von parallelen Lese- und Schreibzugriffe?

• Diese Algorithmen sind nicht für verteile Umgebungen gemacht und zu langsam.

Page 12: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Jeder, der große Applikationen baut, setzt auf CAP und BASE.

Page 13: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

http://bigdatanerd.files.wordpress.com/2011/12/cap-theorem.jpg

• Basically Available - das System gibt immer eine Antwort

• Soft State - es muss nicht jederzeit konsistent sein.

• Eventually Consistent - zu einem späteren Zeitpunk wird es konsistent

BASE & CAP

Page 14: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Genau! Wir brauchen einen

Key/Value store!

PUT GET

Page 15: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Nicht ganz…

Page 16: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Anfrage = Funktion(Alle Daten)

• Manchmal geht es darum, gespeicherte Informationen wieder abzurufen

• Meistens werden jedoch Transformationen, Aggregationen und andere Funktionen benötigt.

• z.B. die Anzahl von Seitenaufrufen einer speziellen URL über einen gewissen Zeitraum

Page 17: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Strukturierte Daten?

Page 18: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Schemas

• Schwierig zu ändern

• “Sind im weg”, stören

• Generieren Zusatzaufwand für den Entwickler

• Es nervt, im Voraus Informationen festzulegen

Nathan Marz: http://www.slideshare.net/nathanmarz/runaway-complexity-in-big-data-and-a-plan-to-stop-it

Page 19: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Genau! Lass uns eine schemalose NoSQL

Datenbank benutzen!

Page 20: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Das ist eine Überreaktion

Page 21: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Bitte folgert nicht von der !

schlechten Umsetzung!!

von Schemas auf den !

Zusatzwert, !

den Schemas erzeugen!

Page 22: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Funktion(Datenmenge)

Wenn man eine Schema so betrachtet, dann kann man rausfinden, ob Daten valide sind oder

nicht. Das ist hilfreich!

Page 23: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Der Wert von Schemas• Strukturelle Integrität

• Garantie, was gespeichert und gelesen werden kann

• Verhindert Datenkorruption

• Fehler wird zu dem Zeitpunkt geworfen, an dem er gemacht wurde

• spart Zeit

• Korrupte Daten beim lesen?

• Fehler viel später?

• Was sind die Umstände der Datenkorruption?

Page 24: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Also, was wollen wir?

• Linear skalierende Storage

• sharded, massiv paralleles Cluster

• Semi-strukturierte Datensätze, inklusive Binärendateien

• Real-time queries mit SQL

• Erweiterte SQL Abfragen möglich (und UDFs).

• Open Source

• Standard-Hardware (Betriebsystem unabhängig)

Page 25: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

You know, for searchquerying 24 000 000 000 Records in 900ms

@jodok14502 views

Page 26: Warum 'ne Datenbank, wenn wir Elasticsearch haben?
Page 27: Warum 'ne Datenbank, wenn wir Elasticsearch haben?
Page 28: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

S3

distcp

HDFS

transform

https://github.com/lovelysystems/ls-hive https://github.com/lovelysystems/ls-thrift-py-hadoop

HDFS

MAPRED

ES

• Map/Reduce to push to Elasticsearch

• via NFS to HDFS storage

• no dedicated nodes

Page 29: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Speicher

• Die täglichen Spitzen liegen bei 600MByte/s

Netzwerk

Page 30: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Antwortzeit

Page 31: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Lasst uns den Kurs weiterfahren

Page 32: Warum 'ne Datenbank, wenn wir Elasticsearch haben?
Page 33: Warum 'ne Datenbank, wenn wir Elasticsearch haben?
Page 34: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

STORM ?

Page 35: Warum 'ne Datenbank, wenn wir Elasticsearch haben?
Page 36: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Die Komponenten

Page 37: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Das hört sich ja gut an,• aber was funktioniert denn schon alles?

Page 38: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Table creationcr> create table my_table1 (!... first_column integer primary key,!... second_column string!... ) clustered into 10 shards!CREATE OK (... sec)!!

+ routing!+ replicas!+ fulltext indizes, analyzers!- ALTER!- Schema for object fields

Page 39: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Insert/Update Datacr> insert into locations values ('2013-09-12T21:43:59.000Z', 'Blagulon Kappa is the planet to which the police are native.', 'Planet', 'Blagulon Kappa', 7)!

INSERT OK, 1 row affected (... sec)

cr> update locations set race['name'] = 'Human' where name = 'Bartledan'!

UPDATE OK, 1 row affected (... sec)

Page 40: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Queriescr> select name, race['name'] from locations where race['name'] = 'Bartledannians'!+-----------+----------------+!| name | race['name'] |!+-----------+----------------+!| Bartledan | Bartledannians |!+-----------+----------------+!SELECT 1 row in set (... sec)!!

cr> select count(*), kind from locations group by kind order by count(*) desc, kind asc!+----------+-------------+!| COUNT(*) | kind |!+----------+-------------+!| 5 | Planet |!| 4 | Star System |!+----------+-------------+!SELECT 3 rows in set (... sec)

Page 41: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Clients

• CRasH: Crate shell for command line (python)

• Python (BLOB, DB-API, SQLAlchemy)

• Java (JDBC planned)

• SQL over HTTP always possible

Page 42: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Funktioniert das wirklich?

Page 43: Warum 'ne Datenbank, wenn wir Elasticsearch haben?
Page 44: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Was passiert auf der Hardware?

• 4 Server: Supermicro SuperServer SYS-5017C-MTF • CPU: Intel Xeon E3-1240 - 3,3GHz (8 Cores) • Memory: 4x Samsung Memory M391B1G73BH0-CH9 8GB • Disks:1x Intel 320 Series 300GB 63,5mm Flash SSD

          1x Western Digital WD RE4 WD1003FBYX 1000 GB !

• ca. 10 Tabellen für die Applikationen (davon 8 mit < 50k Datensätze, 2 mit insgesamt 250M.

• Reine Datenmenge: 25GB • 1 Replika

!

• Applikation erzeugt ca. 750 queries pro Sekunde (davon ca. 300 INSERT)

Page 45: Warum 'ne Datenbank, wenn wir Elasticsearch haben?
Page 46: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Und dann gibt’s ein Release:

Page 47: Warum 'ne Datenbank, wenn wir Elasticsearch haben?

Servus und bis bald!

@cratedb @jodok

github.com/crate