Slide 1

Slide 1 text

MongoDB Datenverteilung, aber wie? Stefan Rudnitzki

Slide 2

Slide 2 text

_talk:ich • Stefan Rudnitzki • Job: Softwareentwickler @hypoport • „Frei“zeit: Organisator @MUGBerlin • Java, Volltextsuche, verteilte Systeme, NoSQL, Vagrant, Puppet

Slide 3

Slide 3 text

_talk:ziel • Wie verteilt man Daten mit MongoDB? • Sharding!

Slide 4

Slide 4 text

_talk:ziel • „Weniger als 10 % der MongoDB User verwenden Sharding“ • Ziel: Angst nehmen

Slide 5

Slide 5 text

_talk:agenda • Sharding • Vor-/Nachteile • Anwendungsfall • Praxis https://www.iconfinder.com/icons/171757/calendar_icon

Slide 6

Slide 6 text

Sharding

Slide 7

Slide 7 text

_sharding:basics • Skalierbarkeit • Dokumente über mehre Knoten verteilen • Lese-/Schreibzugriffe optimieren

Slide 8

Slide 8 text

_sharding:terminologie

Slide 9

Slide 9 text

_sharding:terminologie • mongod (Daten) • shard (Teilmenge von Daten) shard01 mongod mongod mongod

Slide 10

Slide 10 text

_sharding:terminologie • mongod (Daten) • shard (Teilmenge von Daten) • replica set (Spiegelung) shard01 mongod mongod mongod

Slide 11

Slide 11 text

_sharding:terminologie • mongos (Sharding Proxy) • configserver (Metadaten) configservers config01 config02 config03 mongos

Slide 12

Slide 12 text

_sharding:terminologie

Slide 13

Slide 13 text

_sharding:terminologie • sharding-key: Verteilungskriterium • chunk: Zerlegung der Daten in Teile ?

Slide 14

Slide 14 text

_sharding:beispiel • Server: 1 TB, 64 GB RAM • Datenmenge: < 950 GB, gesch. Indexgröße < 56 GB https://www.iconfinder.com/icons/171754/data_icon

Slide 15

Slide 15 text

_sharding:beispiel • Datenwachstum 2,3 TB, gesch. Indexgröße 275 GB • Verteilungsansätze • 3 Shards (Datengröße) • 6 Shards (Indexgröße) https://www.iconfinder.com/icons/171754/data_icon

Slide 16

Slide 16 text

_sharding:funktionsweise Shard01 Shard02 Shard03 d .. u v .. z a .. c mongos ? ? ?

Slide 17

Slide 17 text

_sharding:funktionsweise Shard01 Shard02 Shard03 d .. u v .. z a .. c mongos d u n

Slide 18

Slide 18 text

_sharding:funktionsweise Shard01 Shard02 Shard03 d .. u v .. z a .. c Balancer

Slide 19

Slide 19 text

_sharding:funktionsweise Shard01 Shard02 Shard03 m .. r h .. l c .. g s .. t a .. b u .. z mongos d u n

Slide 20

Slide 20 text

Vor-/Nachteile https://www.iconfinder.com/icons/171728/settings_icon + - /

Slide 21

Slide 21 text

_sharding:vorteile • gegen „Last“ Skalieren • Verteilung von Lesezugriffen • Verteilung von Schreibzugriffen • selbstdefiniertes Verteilungskriterium +

Slide 22

Slide 22 text

_sharding:nachteile • einmalige Definition des sharding-keys • RAM-Grenzen • Monitoring ist wichtiger denn je • Sharding macht nicht alles schneller • Sharding macht nicht alles einfacher !

Slide 23

Slide 23 text

Anwendungsfall https://www.iconfinder.com/icons/171729/search_icon

Slide 24

Slide 24 text

_anwendungsfall:setup • Ausprobieren und selbst im kleinen Testen! • Testsetup mit Vagrant/Puppet (3 mongod, mongos, configserver) • online (mit Dokumentation): https:/ /github.com/strud/vagrant- machines

Slide 25

Slide 25 text

_anwendungsfall:vagrant

Slide 26

Slide 26 text

_anwendungsfall:puppet

Slide 27

Slide 27 text

_anwendungsfall:daten • Wikipedia Dump • „Real World“ Daten • ~ 4,4 Mio. Abstracts (3,8 GB XML)

Slide 28

Slide 28 text

_anwendungsfall:daten • URL • Titel (Text) • Abstract (Volltext) https://www.iconfinder.com/icons/171735/note_icon

Slide 29

Slide 29 text

_anwendungsfall:daten • Java Parser und Import • online: https:/ /github.com/strud/db_evaluation

Slide 30

Slide 30 text

_anwendungsfall:kandidaten • Titel • Text • unklare Verteilung

Slide 31

Slide 31 text

_anwendungsfall:kandidaten • künstlich, z.B. count(docs) % Anzahl Shards + Random ID • ideale Verteilung beim Einfügen • Weitere Shards? • alternativ: _id

Slide 32

Slide 32 text

_anwendungsfall:kandidaten • URL • strukturiert • geeignet für Baumdatenstrukturen

Slide 33

Slide 33 text

_anwendungsfall:kandidaten • ab 2.4: Hashed Index • zufällig • von MongoDB selbst erzeugt

Slide 34

Slide 34 text

Praxis https://www.iconfinder.com/icons/171728/settings_icon

Slide 35

Slide 35 text

_sharding:_id • Balancer sehr aktiv • sehr unbalanciert 0 750000 1500000 2250000 3000000 shard00 shard01 shard02

Slide 36

Slide 36 text

_sharding:titel • Balancer anfangs aktiv (Einschwingen) • unbalanciert • Titel-Queries performant 0 500000 1000000 1500000 2000000 shard00 shard01 shard02

Slide 37

Slide 37 text

_sharding:url • Balancer anfangs aktiv (Einschwingen) • unbalanciert • URL Queries performant 0 500000 1000000 1500000 2000000 shard00 shard01 shard02

Slide 38

Slide 38 text

_sharding:hash(titel) • kaum Balanceraktivität • (fast) ausbalanciert • max. Insertperformance • aber: nicht alle Queries möglich 0 500000 1000000 1500000 2000000 shard00 shard01 shard02

Slide 39

Slide 39 text

_sharding:hash(titel) • 1.457.725 • 1.462.456 • 1.465.252 • gleichmäßig!

Slide 40

Slide 40 text

?

Slide 41

Slide 41 text

_talk:fazit • Sharding kann die Datenmenge eines Systems erhöhen • Sharding könnte die Performance verbessern

Slide 42

Slide 42 text

_talk:fazit • hashed sharding-keys = gute Lösung für balancing, nicht alle Abfragen werden unterstützt • selbstdefiniert = beste Performance • schlechter sharding-key = Problem

Slide 43

Slide 43 text

_talk:fazit • „Kenne die Daten des Systems“ • „Teste mit realen Daten des Systems“ • „Kenne die realen UseCases!“ • „Beratersprech“? • Mut zum Ausprobieren!

Slide 44

Slide 44 text

Fragen? • https:/ /github.com/strud/vagrant-machines • https:/ /github.com/strud/db_evaluation • http:/ /www.meetup.com/MUGBerlin • Twitter: @StRud2nd

Slide 45

Slide 45 text

http:/ /www.wordle.net