BerkeleyDB Concurrency

stimmen
25
  • Was ist das optimale Niveau der Gleichzeitigkeit, dass die C ++ Implementierung von BerkeleyDB vernünftigerweise unterstützen?
  • Wie viele Threads kann ich Hämmern an der DB weg, bevor Durchsatz wegen Ressourcenkonflikte zu leiden beginnt?

Ich habe das Handbuch lesen und wissen, wie die Anzahl der Sperren zu setzen, Schließfächer, Datenbank-Seitengröße, etc., aber ich möchte nur ein paar Ratschläge von jemandem, der realen Welt Erfahrungen mit BDB Gleichzeitigkeit hat.

Meine Anwendung ist recht einfach, ich werde tun bekommt und Puts von Datensätzen, die jeweils etwa 1 KB sind. Keine Cursor, kein Löschen.

Veröffentlicht am 02/08/2008 um 00:28
quelle vom benutzer
In anderen Sprachen...                            


5 antworten

stimmen
10

Es hängt davon ab, welche Art von Anwendung, die Sie bauen. Erstellen Sie ein repräsentatives Testszenario, und starten Sie hämmern. Dann wissen Sie, die endgültige Antwort.

Neben Ihrem Anwendungsfall, es hängt auch von CPU, Speicher, Front-Side-Bus, Betriebssystem, Cache-Einstellungen, und so weiter.

Im Ernst, gerade testen Sie Ihr eigenes Szenario.

Wenn Sie ein paar Zahlen müssen (das kann eigentlich nichts in Ihrem Szenario bedeutet):

Beantwortet am 03/08/2008 um 13:34
quelle vom benutzer

stimmen
7

Ich stimme stark mit Daan Punkt: ein Testprogramm erstellen, und stellen Sie sicher, die Art und Weise, in der sie Daten ahmt so nah wie möglich greift auf die Muster, die Sie Ihre Anwendung erwarten zu haben. Dies ist äußerst wichtig, mit BDB, weil unterschiedlichen Zugriffsmuster ergeben sehr unterschiedlichen Durchsatz.

Other than that, sind diese allgemeinen Faktoren, die ich gefunden von großen Einfluss auf den Durchsatz zu sein:

  1. Zugriffsmethode (die in Ihrem Fall ich denke, ist BTREE).

  2. Niveau persistency, mit dem Sie DBD konfigurierten (zum Beispiel in meinem Fall der ‚DB_TXN_WRITE_NOSYNC‘ Umwelt Flagge verbesserte Schreibleistung durch eine Größenordnung, aber es kompromittiert persistency)

  3. Ist die Arbeits fit im Cache gesetzt?

  4. Anzahl Reads Vs. Schreibt.

  5. Wie verteilt Ihr Zugang ist (denken Sie daran, dass BTREE eine Seite Sperren hat - so unterschiedliche Seiten mit unterschiedlichen Threads ist ein großer Vorteil Zugriff).

  6. Zugriffsmuster - meanig wie wahrscheinlich Fäden sind, sich zu sperren oder sogar eine Sackgasse, und was ist Ihre Deadlock Auflösung Politik (dies kann ein Killer sein).

  7. Hardware (Festplatte und Speicher für Cache).

Dies entspricht dem folgenden Punkt: Skalierung, eine Lösung auf DBD basiert, so dass es mehr Gleichzeitigkeit bietet zwei wichtigsten Möglichkeiten des Gehens darüber; entweder die Anzahl der Sperren in Ihrem Design minimieren oder mehr Hardware hinzuzufügen.

Beantwortet am 13/10/2008 um 22:59
quelle vom benutzer

stimmen
4

Ist dies nicht von der Hardware abhängig sowie Anzahl der Threads und so?

Ich würde einen einfachen Test machen und führen Sie es mit Mengen an Fäden zu erhöhen Hämmern und sehen, was am besten zu sein scheint.

Beantwortet am 02/08/2008 um 19:21
quelle vom benutzer

stimmen
2

So wie ich die Dinge verstehen, Samba erstellt tdb „mehrere gleichzeitige zu ermöglichen Autoren “ für eine bestimmte Datenbankdatei. Also , wenn Ihre Arbeit mehrere Autoren Ihre Leistung hat schlecht sein kann (wie in, entschied ich das Samba - Projekt sein eigenes System zu schreiben, offenbar weil es mit Berkeley DB Leistung in diesem Fall nicht glücklich war).

Auf der anderen Seite, wenn Ihre Arbeit viele Leser hat, dann ist die Frage, wie gut Ihr Betriebssystem mehr Leser verarbeitet.

Beantwortet am 16/09/2008 um 18:31
quelle vom benutzer

stimmen
1

Was ich tat, als gegen eine Datenbank unbekannter Leistung arbeiten war Turnaround-Zeit auf meine Fragen zu messen. Ich hielt die Fadenzahl Upping bis Turn-around-Zeit fiel gelassen, und die Fadenzahl fallen, bis Turn-around-Zeit verbessert (na ja, es waren Prozesse in meiner Umgebung, aber was auch immer).

Es gab gleitenden Durchschnitt und alle Arten von Metriken beteiligt, aber die Take-away-Lektion war: Anpassung nur an, wie die Dinge funktionieren im Moment. Man weiß ja nie, wenn die DBAs Performance verbessern oder Hardware aufgerüstet werden, oder vielleicht ein anderer Prozess kommen, das System zu laden, während Sie laufen. So anzupassen.

Oh, und noch etwas: vermeiden Prozess schaltet, wenn Sie können - Batch Dinge.


Oh, ich sollte dies deutlich machen: dies alles zur Laufzeit passiert ist, nicht während der Entwicklung.

Beantwortet am 04/08/2008 um 08:45
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more