Frage

Sie haben einen Schlüsselwert speichern, dass mir die folgende geben:

  • Lassen Sie mich einfach hinzufügen und entfernen Knoten und die Daten redstribute automatisch
  • Lassen Sie mich Knoten entfernen und haben noch 2 zusätzliche Datenknoten Redundanz zu schaffen
  • Erlauben Sie mir, Text oder Bilder zu speichern, bis zu 1 GB groß
  • Kann speichern geringe Größe Daten von Daten zu 100 TB bis
  • Fast (wird so ermöglicht Abfragen auf ihm ausgeführt werden)
  • Stellen Sie alle diese für den Client transparent
  • Arbeiten auf Ubuntu / FreeBSD oder Mac
  • Free oder Open-Source

Ich mag im Grunde etwas, das ich einen „single“ verwenden kann und sie keine Sorgen machen muß über Memcached, einen db, und mehrere Speicherkomponenten so ja, ich eine Datenbank „Königsweg“ wollen könnte man sagen.

Danke

Zubair

Antworten bisher: MogileFS auf dem Backblaze - Soweit ich das sehen kann, ist nur ein Dateisystem, und nach einigen Recherchen scheint es nur angemessen für große Bilddateien

zu sein

Tokyo Tyrant - Needs lightcloud. Dies gilt nicht Autoskalierung, wie Sie neue Knoten hinzuzufügen. Ich habe Einblick in diese und es scheint, es ist sehr schnell für Abfragen, die auf einem einzelnen Knoten passen obwohl

Riak - Dies ist eine ich in mich suchen, aber ich habe keine Ergebnisse noch

Amazon S3 - Ist jemand dies als ihre einzige persistance Schicht in der Produktion? Von dem, was ich gesehen habe, scheint es für die Speicherung von Bildern verwendet werden, wie komplexe Abfragen zu teuer sind,

vorgeschlagen @shaman Cassandra - auf jeden Fall eine Suche in

Bisher scheint es, dass es keine Datenbank oder Schlüsselwertspeicher, der die Kriterien erfüllt bereits erwähnt, nicht einmal nach einer Prämie von 100 Punkten bieten hat die Frage beantwortet werden!

War es hilfreich?

Lösung

Sie sind zu viel von Open-Source-Software zu fragen.

Wenn Sie ein paar hunderttausend Dollar in Ihrem Budget für einige Enterprise-Class-Software haben, gibt es ein paar Lösungen. Nichts wird tun, was Sie wollen aus der Box, aber es gibt Unternehmen, die Produkte haben, die sind in der Nähe zu dem, was Sie suchen.

"Fast (so können Abfragen auf ihm ausgeführt werden)"

Wenn Sie einen Schlüssel-Wert-Speicher haben, sollte alles sehr schnell sein. Jedoch wird das Problem, dass ohne eine Ontologie oder Datenschema auf dem Schlüssel-Wert-Speicher gebaut, werden Sie für jede Abfrage gehen durch die gesamte Datenbank landen. Sie benötigen einen Index, der die Schlüssel für jeden „Typ“ von Daten enthält, die Sie speichern möchten.

In diesem Fall können Sie in der Regel Abfragen parallel ausführen gegen alle ~ 15.000 Maschinen. Der Engpass ist, dass billige Festplatten bei 50 pro Sekunde sucht Kappe aus. Wenn Ihre Daten passen in RAM gesetzt ist, wird Ihre Leistung extrem hoch sein. Wenn jedoch die Schlüssel im RAM gespeichert, aber es gibt nicht genug RAM für die Werte gespeichert werden, wird das System Disc liest auf fast alle Schlüssel-Wert-Lookups. Die Tasten befinden sich jeweils an zufälligen Positionen auf dem Laufwerk.

Diese Grenzen Sie bis zu 50 Schlüssel-Wert-Lookups pro Sekunde pro Server. Während, wenn die Schlüssel-Wert-Paare im RAM gespeichert werden, ist es nicht ungewöhnlich, 100k-Operationen pro Sekunde pro Server auf Standardhardware zu bekommen (ex. Redis).

Serienscheibe Leseleistung ist jedoch extrem hoch. Ich habe suchen Laufwerke 50 MB / s (800 Mb / s) goto auf serielle liest. Also, wenn Sie Werte auf Disc speichern, müssen Sie die Speicherstruktur, so dass die Werte, die Notwendigkeit von Disc gelesen werden können seriell ausgelesen werden.

Das ist das Problem. Sie können nicht ein gute Leistung auf einem Vanille-Schlüssel-Wert-Speicher erhalten, wenn Sie entweder die Schlüssel-Wert-Paare vollständig im RAM speichern (oder Schlüssel im RAM mit Werten auf SSD-Laufwerken) oder wenn Sie irgendeine Art von Schema oder Typ-System oben auf dem definieren Tasten und dann die Daten auf der Disk Cluster so, dass alle Schlüssel eines bestimmten Typs leicht über eine serielle Disc Read abgerufen werden können.

Wenn ein Schlüssel mehr Typen (zum Beispiel, wenn Sie Daten-Typ Vererbungsbeziehungen in der Datenbank haben) hat, dann wird der Schlüssel ein Element von mehreren Indextabellen sein. In diesem Fall haben Sie Zeit-Raum-Abwägungen zu strukturieren, die Werte zu machen, so dass sie seriell von Disc gelesen werden können. Dies hat zur Folge für den Schlüssel redundante Kopien des Wertes zu speichern.

Was Sie wollen, geht ein bisschen weiter fortgeschritten sein als ein Schlüssel-Wert-Geschäft, vor allem, wenn Sie beabsichtigen, Abfragen zu tun. Das Problem der Speicherung von großen Dateien ist jedoch ein Nicht-Problem. Täuschen Sie Ihr System kann bis zu 50 Tasten meg. Dann brechen Sie nur eine 1 Gig-Datei in 50 meg Segmente und einen Schlüssel zu jedem Segment Wert zuordnen. Mit einem einfachen Server es gerade nach vorn ist der Teil der Datei, die Sie in einen Schlüssel-Wert-Lookup-Operation übersetzen möchten.

Das Problem Redundanz zu erreichen, ist schwieriger. Es ist sehr einfach zu „Brunnen-Code“ oder „Teildatei“ die Schlüssel-Wert-Tabelle für einen Server, so dass die Daten des Servers können mit Leitungsgeschwindigkeit (1 Gb / s) rekonstruiert werden auf einen Standby-Server, wenn ein bestimmten Server stirbt. Normalerweise können Sie Server Tod mit einem „Herzschlag“ System erfassen, die ausgelöst wird, wenn der Server nicht für 10 Sekunden antworten. Es ist sogar möglich, Schlüssel-Wert-Lookups gegen die Teildatei codierten Schlüssel-Wert-Tabellen, aber ist es ineffizient, so zu tun, aber immer noch gibt Ihnen eine Sicherung für den Fall eines Serverausfalls. Eine größere Probleme ist es fast unmöglich ist, die Sicherung auf dem neuesten Stand zu halten und die Daten können 3 Minuten alt sein. Wenn Sie viel schreibt tun, die Backup-Funktionalität wird einige Performance-Overhead einzuführen, aber der Aufwand vernachlässigbar, wenn Ihr System in erster Linie tut liest.

Ich bin kein Experte für die Aufrechterhaltung der Datenbankkonsistenz und Integritätsbedingungen unter Ausfallmodi, so bin ich nicht sicher, was Probleme This Anforderung würde einzuführen. Wenn Sie sich keine Sorgen machen über dieses haben, es vereinfacht die Gestaltung des Systems und seine Anforderungen.

  

Fast (wird so ermöglicht Abfragen auf ihm ausgeführt werden)

Zuerst vergessen beitritt oder jede Operation, die Waage schneller als n * log (n), wenn Sie Ihre Datenbank diese groß ist. Es gibt zwei Dinge, die Sie tun können, um die Funktionalität der Regel mit Verknüpfungen implementiert zu ersetzen. Sie können entweder die Daten so strukturieren, dass Sie nicht beitritt zu tun brauchen, oder Sie können „pre-Kompilierung“ die Fragen, die Sie tun, und eine Zeit-Raum-Trade-off machen und vorab berechnen die Verknüpfungen und speichern sie für die Suche im Voraus .

Für Semantic Web Datenbanken, ich denke, wir werden die Menschen vor-kompiliert werden sehen, Abfragen und machten Raum-Zeit-Abwägungen, um auf noch bescheidene Größe Datensätze ordentliche Leistung zu erzielen. Ich denke, dass dies automatisch und transparent durch den Datenbank-Backend durchgeführt werden kann, ohne Anstrengung seitens des Anwendungsprogrammierers. Doch beginnen wir nur Unternehmensdatenbanken, diese Techniken für relationale Datenbanken zu sehen, zu implementieren. Kein Open-Source-Produkt macht es soweit ich bin mir bewusst, und ich würde überrascht, wenn jemand versucht, dies noch in horizontal skalierbaren Datenbanken für verknüpfte Daten zu tun.

Für diese Arten von Systemen, wenn Sie zusätzliche RAM oder Speicherplatz haben die beste Verwendung von ihm ist zu vorab berechnen und das Ergebnis der gemeinsamen Unterabfragen aus Leistungsgründen, statt mehr Redundanz auf die Schlüssel-Wert-Zugabe Geschäft. Pre-Rechenergebnisse und Ordnung durch die Tasten Sie Abfrage werden gegen eine n ^ 2 drehen verbinden in ein log (n) Lookup. Jede Abfrage oder Unterabfrage, dass Skalen schlechter als n * log (n) ist etwas, dessen Ergebnisse müssen in den Schlüssel-Wert-Speicher ausgeführt und zwischengespeichert werden.

Wenn Sie eine große Anzahl von Schreibvorgängen tun, die im Cache gespeicherten Unterabfragen schneller werden für ungültig erklärt, als sie verarbeitet werden kann, und es gibt keinen Leistungsvorteil. Der Umgang mit Cache-Annullierungs für Cache-Unterabfragen ist ein weiteres unlösbares Problem. Ich denke, dass eine Lösung möglich ist, aber ich habe es nicht gesehen.

Willkommen in der Hölle. Sie sollten nicht erwarten, dass ein System wie diese kostenlos für weitere 20 Jahre zu erhalten.

  

Bisher scheint es, dass es keine Datenbank oder Schlüsselwertspeicher, der die Kriterien erfüllt bereits erwähnt, nicht einmal nach einer Prämie von 100 Punkten bieten hat die Frage beantwortet werden!

Sie sind auf ein Wunder zu fragen. Warten Sie 20 Jahre, bis wir Open-Source-Datenbanken Wunder haben oder sollten Sie zu Ihrer Anwendung Bedürfnisse angepasst für eine Lösung zu zahlen Geld bereit sein.

Andere Tipps

Amazon S3 ist eine Speicherlösung, keine Datenbank.

Wenn Sie nur einfache Schlüssel / Wert Ihre beste Wette benötigen würde mit S3 Amazon SimpleDB in Kombination zu verwenden. Große Dateien werden auf S3 gespeichert, während Metadaten für die Suche in SimpleDB gespeichert ist. Dies gibt Ihnen ein horizontal skalierbare Schlüssel / Wert-System mit direktem Zugang zum S3.

Es gibt eine andere Lösung, die genau zu sein scheint, was Sie suchen: Das Projekt Apache Cassandra: http: //incubator.apache.org/cassandra/

Im Moment twitter Cassandra wird das Umschalten von memcached + mysql cluster

HBase und HDFS zusammen die meisten dieser Anforderungen erfüllen. HBase kann zum Speichern und Abrufen von kleinen Objekten verwendet werden. HDFS kann zum Speichern von großen Objekten verwendet werden. HBase verdichtet kleine Objekte und speichert sie als größere auf HDFS. Geschwindigkeit ist relativ - HBase ist nicht so schnell auf zufällig von der Festplatte wie mysql liest (zum Beispiel) - aber ziemlich schnell bedient aus dem Speicher liest (ähnlich wie Cassandra). Es hat eine ausgezeichnete Leistung bei Schreibvorgängen. HDFS, die darunter liegende Speicherschicht ist vollständig widerstandsfähig gegenüber Verlust von mehreren Knoten. Es repliziert in Racks und Rack-Ebene Wartung ermöglicht. Es ist ein Java-basierter Stack mit Apache-Lizenz -. Läuft so ziemlich die meisten OS

Die wichtigsten Schwächen dieses Stapels suboptimal sind zufällige Plattenleseleistung und das Fehlen von Quer Rechenzentrums Unterstützung (das ist ein work in progress).

Ich kann Ihnen zwei mögliche Lösungen vorschlagen:

1) Kaufen Amazon Service (Amazon S3). Für 100 TB wird es Ihnen 14 512 $ monatlich kosten.
2) viel billigere Lösung:

Erstellen zwei benutzerdefinierte Backblaze Lagerhülsen ( link ) und ein MogileFS auf ihm ausgeführt werden.

Zur Zeit bin ich untersuchen, wie Petabytes von Daten speichern unter Verwendung von ähnlichen Lösungen, also wenn Sie etwas Interessantes auf das finden, bitte schreiben Sie Notizen.

Hier finden Sie aktuelle Tokyo Tyrant . Es ist eine sehr leichte, High-Performance, die Replikation Daemon eines Tokyo Cabinet Schlüssel-Wert-Speicher an das Netzwerk exportieren . Ich habe darüber Gutes gehört.

Von dem, was ich sehe in Ihrer Frage Projekt Voldemort die nächste zu sein scheint. Werfen Sie einen Blick auf ihre Entwurf .

Das einzige Problem, das ich sehe, ist, wie wird es große Dateien verarbeitet und nach dieses Themas , was sind nicht alle gut. Aber man kann immer umgehen, dass ziemlich leicht Dateien. Am Ende - das ist der genaue Zweck eines Dateisystems. Werfen Sie einen Blick auf die wikipedia Liste von Dateisystemen -. Die folgende Liste ist riesig

Sie können auf einen Blick nehmen wollen MongoDB .

Von dem, was ich Sie suchen eine Datenbank sagen kann / distrubuted Dateisystem mischen, was schwierig sein könnte oder sogar unmöglich zu finden.

Sie können einen Blick auf verteilte Dateisysteme wie MooseFS oder Gluster und Ihre Daten als Dateien halten. Beide Systeme sind fehlertolerant und verteilt (können Sie in setzen und Knoten herausnehmen, wie Sie möchten), und beide sind transparent für Clients (auf der FUSE gebaut) - Sie einfache Dateisystem ops verwenden. Zu dieser Kategorie gehören folgende Eigenschaften: 1), 2), 3), 4), 6), 7), 8). Wir verwenden MooseFS für digitale Filme Speicher mit etwas aroung 1,5 PB Speicher und Upload / Download ist so schnell, wie Netzwerk-Setup ermöglicht (so ist die Leistung I / O abhängig, nicht-Protokoll oder abhängig von der Implementierung). Sie werden nicht Abfragen (Merkmal 5) auf Ihrer Liste haben), aber man kann paar solches Dateisystem mit so etwas wie MongoDB oder sogar einige Suchmaschinen wie Lucene (es hat Clustered-Indizes) zu Abfrage von Daten in Dateisystem gespeichert.

Zubair,

Ich arbeite an einem Schlüsselwertspeicher, der so weit ist schneller als alles andere .

Es ist nicht (noch) Verwendung Replikation Ihre 2 erste Anforderungen fehlt, aber diese Frage hat mich inspiriert - danke für das

no: Lassen Sie mich einfach hinzuzufügen und Knoten zu entfernen und die Daten redstribute automatisch
nein: Gestatten Sie mir Knoten zu entfernen und haben noch 2 zusätzliche Datenknoten Redundanz
bereitzustellen ok: Erlauben Sie mich zum Speichern von Text oder Bildern bis zu 1 GB groß (ja: unbegrenzt)
ok: Kann speichern geringe Größe Daten bis zu 100 TB Daten (ja: unbegrenzt)
ok: Fast (wird so ermöglicht Abfragen ausgeführt oben drauf sein) (ja: schneller als Tokyo Cabinet des TC-FIXED Array)
ok: Machen Sie alle diese für den Client transparent (ja: integriert auf dem Web-Server)
ok: Arbeiten auf Ubuntu / FreeBSD oder Mac (ja: Linux)
ok: Freie oder Open-Source- (ja: Freeware)

Neben Single-Thread-Leistungen überlegen Hash-Tabellen und B-Bäume, der KV-Shop ist die einzigen, die ich kenne "WAIT-FREE" zu sein (nicht zu blockieren, noch verzögert jede Operation).

Marklogic in diese Richtung geht. Nicht an allen frei, obwohl ...

Zusätzlich zu dem, was andere schon erwähnt haben - Sie einen Blick auf Orientdb nehmen könnte - http: // Code .google.com / p / orient / ein Dokument und K / V store, dass sieht sehr vielversprechend.

Schauen Sie sich BigCouch . Es ist CouchDB, aber für Cluster optimiert (und alle die großen Datenprobleme Cluster sind für). BigCouch wird immer verschmolzen in das CouchDB Projekt als wir sprechen, von den Leuten bei Cloudant , von denen viele Kern Committer zu CouchDB sind.

Rundown Ihrer Anforderungen:

  

Lassen Sie mich einfach hinzufügen und entfernen Knoten und die Daten redstribute automatisch

     

Lassen Sie mich Knoten entfernen und haben noch 2 zusätzliche Datenknoten Redundanz zu schaffen

Ja. BigCouch verwendet Dynamo Konzept der Quorum fest, wie viele Knoten halten, wie viele Kopien Ihrer Daten.

  

Lassen Sie mich Text oder Bilder zu speichern, bis zu 1 GB groß

Ja. Genau wie CouchDB, können Sie Blobs (wie zB Dateien) beliebiger Größe in die Datenbank übertragen.

  

speichern kann kleine Größendaten von Daten zu 100 TB bis

Ja. Das Team, das BigCouch gebaut tat dies, weil sie ein System Erzeugungs Petabyte Daten konfrontiert wurden pro Sekunde.

  

Fast (wird so ermöglicht Abfragen auf ihm ausgeführt werden)

Ja. Abfragen werden gemacht von MapReduce in O (log n) Zeit .

  

Machen Sie alle diese für den Client transparent

     

Arbeiten auf Ubuntu / FreeBSD oder Mac

     

Freie oder Open-Source-

Yup! Open Source unter der Apache-2.0-Lizenz. Die Standard-Installationsanweisungen sind für ein Debian-System, wie Ubuntu.

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