Frage

Ich bin die Erforschung mögliche Optionen, wie Datenspeicher für eine Erlang-Anwendung zu organisieren. Die Daten, die sie angeblich zu verwenden ist im Grunde eine riesige Sammlung von Binärblob durch kurzes String-IDs indiziert. Jeder Klecks ist unter 10 Kb aber es gibt viele von ihnen. Ich würde erwarten, dass sie insgesamt eine Größe von bis zu 200 Gb so offensichtlich hätte es nicht in den Speicher passen. Der typische Betrieb auf diesen Daten wird entweder das Lesen eines Blob durch seine ID oder einen Blob durch seine ID zu aktualisieren oder eine neue hinzufügen. Bei jeder gegebenen Zeit des Tages nur eine Teilmenge von ids verwendet wird, so dass die Datenspeicherzugriffsleistung von In-Memory-Cache profitieren könnte. Sprechen über Leistung - es ist ganz entscheidend. Das Ziel ist, hat rund 500 liest und 500 Updates pro Sekunde auf handelsüblicher Hardware (etwa auf EC2 VM).

Irgendwelche Vorschläge, was hier zu benutzen? Wie ich dets verstehen Frage aus, wie es auf 2G begrenzt ist (oder war es 4G?). Mnesia wohl außer Frage zu; Mein Eindruck ist, dass es vor allem für Fälle konzipiert wurde, als Datenspeicher paßt. Ich erwäge eDTK Berkeley DB-Treiber für die Aufgabe zu versuchen. Wäre es in dem obigen Szenario arbeiten? Hat jemand Erfahrung in der Produktion in den ähnlichen Bedingungen mit?

War es hilfreich?

Lösung

tcerl kam aus der gleichen Größe Grenze gegenüber. Ich bin nicht in diesen Tagen mit Erlang, aber es klingt wie das, was Sie suchen.

Andere Tipps

Haben Sie sich an, was CouchDB tut? Es ist vielleicht nicht ganz das, was Sie nach, wie ein Tropfen im Produkt sind, aber es gibt viele erlang Codes in dort zum Speichern von Daten. Es gibt auch einige sprechen eine native erlang-Schnittstelle statt dem REST-api zu liefern.

Gibt es einen Grund, warum Sie nicht nur ein Dateisystem verwenden können, Dateinamen als String-ID und Dateiinhalte als binäres Blob Behandlung? Sie können ein wählen (Dateisystem), die Ihre Leistungsanforderungen passt, und Sie sollten kostenlos Caching im Grunde erhalten, indem Sie Ihre OS zur Verfügung gestellt.

Mnesia können die Daten auf der Festplatte speichern, einfach gut. Es gibt auch dets (Disk-basierte Zeitspeicher), die auf Berkeley DB in etwa analog ist. Es ist in der Standard-lib: http://www.erlang.org/doc/ apps / stdlib / index.html

Ich würde Apache CouchDB empfehlen.

Es ist ein großer fit für Erlang, und aus dem Klang der es (Sie erwähnen ID-basierten Blobs und erwähnen keine relationalen Anforderungen), die Sie für eine dokumentenorientierte Datenbank suchen.

Da die Schnittstelle ist REST, können Sie ganz einfach eine Ware HTTP-Cache vor ihm hinzufügen, wenn Sie Caching benötigen.

Die Dokumentation für CouchDB ist von sehr hoher Qualität.

Es wird auch die integrierte Karte-Reduce:)

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