Frage

Einige Orte state 2GB Zeitraum.Einige Orte Staat es hängt mit der Anzahl der Knoten.

War es hilfreich?

Lösung

Ganz groß, wenn Ihre Frage ist „was die Speicherkapazität einer Mnesia Datenbank ist von einer großen Anzahl von disc_only_copies Tabellen aus“ - Sie sind durch die verfügbaren Speicherplatz weitgehend begrenzt

.

Eine einfachere Frage zu beantworten ist, was die maximale Kapazität einer einzelnen Mnesia Tabelle verschiedenen Typen ist. ram_copies Tabellen werden durch den verfügbaren Speicher begrenzt. disc_copies Tabellen zeichnen sich durch ihre dets Backend begrenzt ( Hakan Mattsson auf Mnesia ) - diese Grenze 4 GB Daten im Moment.

So ist die einfache Antwort ist, dass einfache disc_copies Tabelle zu 4 GB an Daten speichern kann, bevor sie auf Probleme stoßen. ( Mnesia eigentlich nicht abstürzen, wenn Sie die On-Disk-Größe überschreiten - die ram_copies Teil der Tabelle weiter läuft, so können Sie dies durch Löschen von Daten reparieren kann oder machen andere Vereinbarungen zur Laufzeit )

Wenn Sie jedoch andere Mnesia Funktionen betrachten, dann ist die Antwort komplizierter.

  • local_content Tabellen. wenn die Tabelle ist eine Tabelle local_content, dann kann es unterschiedliche Inhalte haben auf jedem Knoten in dem Cluster Mnesia, so dass die Kapazität der Tabelle ist 4Gb * <number of nodes>
  • fragmentierten Tabellen . Mnesia unterstützt konfigurierbare Benutzertabelle Partitionierung oder sharding Tabellenfragmente verwendet. In diesem Fall können Sie effektiv verteilen und die Daten in der Tabelle über eine Reihe von primitiven Tabellen verteilen. Diese primitiven Tabellen können jeweils ihre eigene Konfiguration - sagen eine ram_copies Tisch und der Rest disc_only_copies Tabellen. Diese primitiven Tabellen haben die gleichen Größenbeschränkungen wie bereits erwähnt, und jetzt die effektive Kapazität der fragmentierten Tabelle ist 4Gb * <number of fragments>. ( Leider, wenn Sie Ihren Tisch fragmentieren, haben Sie dann Ihren Tisch Zugangscode ändern mnesia:activity/4 statt mnesia:write und Freunde zu verwenden, aber wenn Sie dies im Voraus planen, es ist überschaubar )
  • externe Kopien Wenn Sie auf der extremen Blutungen Rand leben, könnten Sie gelten die < a href = "http://code.google.com/p/mnesiaex/" rel = "noreferrer"> mnesiaex Patches Tabellendaten in einem externen System Mnesia und speichert wie Amazon S3 oder Tokyo Cabinet. In diesem Fall wird die Kapazität der Tabelle durch den Backend-Speicher beschränkt.

Andere Tipps

Diese Antwort widerspricht der zwei bereits vorhandene Antworten wenn es um Tabellen vom Typ disc_copies.Lassen Sie mich zunächst ein paar Allgemeine Punkte aus dem Weg:

  • Ein mnesia-Tabelle vom Typ ram_copies ist nur begrenzt durch verfügbaren Arbeitsspeicher (außer, wenn Sie auf einem 32-bit-Maschine).Daten werden in einem ETS-Tabelle.
  • Ein mnesia-Tabelle vom Typ disc_only_copies gespeichert in einem Dets Tabelle.Dets Tabellen sind auf 2 GB beschränkt, wegen der Grenzen, die in der Datei format.
  • Der offensichtliche Weg, Sie zu umgehen, dass die Grenze erreicht ist, erstellen Sie mehrere Tabellen, die möglicherweise durch Tabelle Fragmentierung.
  • Das schema wird ebenfalls gespeichert, in eine Dets Tabelle, so dass die Informationen über alle vorhandenen Tabellen ist auch auf 2 GB beschränkt.Sie sind wahrscheinlich in anderen Grenzen, bevor Sie Sie schlagen, dass man, obwohl.
  • Ein mnesia-Tabelle vom Typ disc_copies gespeichert ist beide im RAM und auf der Festplatte, so ist es begrenzt durch den verfügbaren RAM - und vielleicht etwas anderes?

Ich werde versuchen zu zeigen unten, dass es keine bestimmte Grenze von Mnesia auf die Größe einer disc_copies Tabelle.Beachten Sie jedoch, dass viele Erlang-Programmierer glauben, dass disc_copies Tabellen sind auf 2 GB beschränkt.Das ist anders in die akzeptierte Antwort zu dieser Frage, die zum Zeitpunkt des Schreibens outscores diese Antwort um den Faktor 7.


disc_copies verschoben aus dets zu disk_log 2001

Es wird allgemein angenommen, dass disc_copies Tabellen sind gesichert durch Dets Tabellen.So weit wie ich kann sagen, dies war der Fall, bis Erlang/OTP-R7B-4 (veröffentlicht am 30 September 2001).Von die README -:

  -- mnesia -----------------------------------------------------------------

        OTP-3712 - Speed/load improvements disc_copies tables are not 
                   implemented with dets anymore.

Schauen diff für mehr details, insbesondere mnesia_lib.erl und mnesia_loader.erl.


Quellen der Unterstützung dets und eine 2 - / 4-GB-Grenze

archelaus Antwort zieht aus http://erlang.org/~hakan/mnesia_consumption.txt,, das erklärt, dass disc_copies Tabellen befinden sich in der ets und dets Tabellen.Dennoch, mit Blick auf der index für die Verzeichnis -, wir sehen, dass dieses Dokument datiert 1999:

[TXT] mnesia_consumption.txt  26-Oct-1999 10:57    10k  

Macht es Sinn, dass Sie würde sagen, es wurde geschrieben, zwei Jahre vor der änderung.

Ray Boosen Antwort zieht aus die Erlang-FAQ:

11.5 Wie viele Daten gespeichert werden können in Mnesia?

Dets verwendet 32-bit-Ganzzahlen für die Datei-offsets, also die größte mögliche mnesia-Tabelle (für jetzt) ist 4 GB.

In der Praxis Ihr Computer auf ein Schneckentempo verlangsamen, bevor Sie dieses limit erreichen.

Die FAQ hat gesagt, dass seit mindestens Januar 2001 (siehe die früheste Kopie in der Wayback-Maschine).Das bedeutet, dass dieser FAQ-Eintrag stammt von vor dem Wechsel zu disk_log, und wurde nicht aktualisiert für eine lange Zeit.(Trotzdem, das Dets Tabelle Größe begrenzen, ist 2 GB, nicht 4 GB.) Ich legte eine pull-Anfrage für die FAQ.


Quellen unterstützt eine höhere Grenzen

Das Lernen Sie Einige Erlang Kapitel Mnesia sagt:

ram_copies
Diese option macht es, so dass alle Daten ausschließlich in ETS, so Speicher.Speicher beschränkt sich auf ein theoretisches 4 GB (und praktisch rund um 3GB) für virtuelle Maschinen wurden auf 32 bits, aber diese Grenze geschoben wird, ist weiter entfernt auf 64 bit virtuelle Maschinen, vorausgesetzt, es gibt mehr als 4 GB Arbeitsspeicher zur Verfügung.

disc_only_copies
Diese option bedeutet, dass die Daten nur in DETS.Nur CD und als solche die Speicherung beschränkt sich auf DETS' 2-GB-limit.

disc_copies
Diese option bedeutet, dass die Daten gespeichert werden, beide in die ETS und auf der Festplatte, so dass Speicher und die Festplatte.disc_copies Tabellen sind nicht begrenzt durch DETS Grenzen, wie Mnesia verwendet ein Komplexes system von Transaktions-Protokolle und Kontrollpunkte, die es ermöglichen, erstellen Sie ein disk-backup der Tabelle im Speicher.

Ich bin mir nicht sicher, Wann das geschrieben wurde, aber der text oben besteht in der früheste Wayback Machine kopieren, vom April 2012.

In ein post auf erlang-Fragen mit dem Titel "beating mnesia zu Tode (war RE:Mit 4 GB ram mit Erlang VM)", vom 7. November 2005, Ulf Wiger schreibt:

Auf eine 16-GB-Maschine, können Sie:

  • führen Sie 6 Millionen gleichzeitige Prozesse (durch den Einsatz von erlang:hibernate, war ich eigentlich in der Lage zu führen Sie 20 Millionen - spawn-Zeit:6.3 Sie uns, message-passing-time:5.3 uns, und ich hatte 1,8 GB übrig.)

  • füllen mnesia mit mindestens 12 GB Daten, aber denken Sie durch, wie Sie wollen, Sie zu vertreten, da die 64-bit word size bläst die Dinge ein wenig.

  • halten Sie eine 10-GB+ disc_copy Tabelle in mnesia.Die Ladezeiten und log dump Kosten scheinen akzeptabel (10 Minuten zu laden, Abladen dauert eine Weile, aber im hintergrund läuft ganz gut.)

Schlussfolgerungen

Die Verwirrung scheint, stammen aus fehlenden oder veralteten Informationen aus offiziellen Quellen:

  • Die Mnesia-Dokumentation erwähnt nicht, dass jede Tabelle Größe Grenzen
  • Die Erlang-FAQ sagt, dass Mnesia ist Gegenstand einer 4 GB Dets Größe, aber diese Antwort wurde geschrieben, bevor das dets zu disk_log ändern
  • Die einzige andere Dokument, das auf der erlang.org domain Håkan Mattsson-Dokument aus, bevor Sie die dets zu disk_log ändern

LYSE scheint der erste "maßgeblichen Quelle", die erwähnt disc_copies Tische nicht zu unterliegen, um die Dets Tabelle Größe begrenzen.

Gemäß der Dokumentation ist diese 4 GB. Abschnitt 11.5

http://erlang.org/faq/mnesia.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top