Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MongoDB - Datenverteilung, aber wie?

MongoDB - Datenverteilung, aber wie?

Die NoSQL Datenbank MongoDB bietet eine gute Grundlage für flexible und skalierbare Applikationen. Besonders die Skalierung des Backends beim Wachstum der eigenen Applikation kann mit MongoDB sehr einfach sein, wenn man das richtige Verteilungskriterium definiert. Im Rahmen dieses Vortrages wird die grundlegende Funktionsweise der Verteilung skizziert und den Zuhörern mögliche Lösungsansätze für die Skalierung ihrer Datenmengen gezeigt.

Stefan Rudnitzki

November 08, 2013
Tweet

More Decks by Stefan Rudnitzki

Other Decks in Programming

Transcript

  1. _talk:ich • Stefan Rudnitzki • Job: Softwareentwickler @hypoport • „Frei“zeit:

    Organisator @MUGBerlin • Java, Volltextsuche, verteilte Systeme, NoSQL, Vagrant, Puppet
  2. _sharding:terminologie • mongod (Daten) • shard (Teilmenge von Daten) •

    replica set (Spiegelung) shard01 mongod mongod mongod
  3. _sharding:beispiel • Server: 1 TB, 64 GB RAM • Datenmenge:

    < 950 GB, gesch. Indexgröße < 56 GB https://www.iconfinder.com/icons/171754/data_icon
  4. _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
  5. _sharding:funktionsweise Shard01 Shard02 Shard03 m .. r h .. l

    c .. g s .. t a .. b u .. z mongos d u n
  6. _sharding:vorteile • gegen „Last“ Skalieren • Verteilung von Lesezugriffen •

    Verteilung von Schreibzugriffen • selbstdefiniertes Verteilungskriterium +
  7. _sharding:nachteile • einmalige Definition des sharding-keys • RAM-Grenzen • Monitoring

    ist wichtiger denn je • Sharding macht nicht alles schneller • Sharding macht nicht alles einfacher !
  8. _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
  9. _anwendungsfall:kandidaten • künstlich, z.B. count(docs) % Anzahl Shards + Random

    ID • ideale Verteilung beim Einfügen • Weitere Shards? • alternativ: _id
  10. _sharding:_id • Balancer sehr aktiv • sehr unbalanciert 0 750000

    1500000 2250000 3000000 shard00 shard01 shard02
  11. _sharding:titel • Balancer anfangs aktiv (Einschwingen) • unbalanciert • Titel-Queries

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

    Queries performant 0 500000 1000000 1500000 2000000 shard00 shard01 shard02
  13. _sharding:hash(titel) • kaum Balanceraktivität • (fast) ausbalanciert • max. Insertperformance

    • aber: nicht alle Queries möglich 0 500000 1000000 1500000 2000000 shard00 shard01 shard02
  14. ?

  15. _talk:fazit • hashed sharding-keys = gute Lösung für balancing, nicht

    alle Abfragen werden unterstützt • selbstdefiniert = beste Performance • schlechter sharding-key = Problem
  16. _talk:fazit • „Kenne die Daten des Systems“ • „Teste mit

    realen Daten des Systems“ • „Kenne die realen UseCases!“ • „Beratersprech“? • Mut zum Ausprobieren!