Was ist die effizienteste dokumentenorientierte Datenbank-Engine zum Speichern Tausender mittelgroßer Dokumente?

7

MongoDB oder Redis?

Ich habe gehört, dass ich Sammlungen in MongoDB klein halten sollte, um eine bessere Indexierung zu ermöglichen (und Indizes, die auf RAM passen), und ich habe gehört, dass redis "blitzschnell" ist, aber MongoDB ist besser, wenn Sie größere Sammlungen haben / p>

Was ist der effizienteste, wenn ich mehrere tausend Sammlungen von ein paar tausend Hashes habe?

Ich frage das, weil es in meinem Projekt zu früh ist, Daten zum Benchmark zur Verfügung zu haben, und ich würde wahrscheinlich schlechte Benchmark-Skripte entwerfen, weil ich die theoretischen Konzepte dieser beiden Datenbank-Engines, besonders Redis, nicht gut verstehe / p>

Danke für alle, die das beantworten.

    
João Pinto Jerónimo 23.02.2011, 12:16
quelle

5 Antworten

19

Es kommt sehr auf den spezifischen Anwendungsfall an. Wenn Sie Ihre Dokumente auf etwas anderem als ihrer ID abfragen möchten, sollten Sie Redis nicht wählen. Mit Redis müssten Sie Ihr eigenes Indexierungsschema implementieren, und das ist nur unnötig.

Es gibt tatsächlich nur sehr wenige Fälle, wo Redis eine bessere Option für das ist, was ich denke, was Ihr Anwendungsfall ist (nicht, dass Redis etwas falsch ist, ich benutze oft Redis und Mongo, aber für verschiedene Dinge). Es klingt für mich so, als hätten Sie Objekte, die sich als Hashes darstellen lassen. Sowohl Mongo als auch Redis können Hashes speichern, aber Mongo kann noch viel mehr. Mit Mongo können Sie nach einem Dokument in einem seiner Felder suchen, Sie können einen Index hinzufügen, um es zu beschleunigen, und das Feld muss nicht einmal eine Zeichenkette sein, es kann eine Zahl, ein Datum, eine Liste, sogar ein Dokument sein (oder eine Liste von Dokumenten), und alle Dokumente müssen nicht in den RAM passen (obwohl sich das ändern wird, wenn Redis 'Diskstore-Funktion beendet ist). Redis hat nichts davon. Sie müssten Indizes selbst implementieren, um zu suchen, Sie können nur Strings speichern (was manchmal sehr unpraktisch ist), und Sie können nur flache Hashes speichern (ohne eine Art Mapping zu implementieren oder zu verwenden) Ebene wie Ohm ).

Sie erwähnen auch Geschwindigkeit. Redis ist unglaublich schnell, und Mongo ist auch nicht schlecht, denn Ihr Anwendungsfall mit Mongo könnte schneller sein. Beachte, dass ich mit Mongo sage, nicht dass Mongo selbst schneller wäre. Die Sache ist, wenn Sie mit Redis gehen und immer noch nach einem Dokument suchen wollen, das ein Feld verwendet, das nicht der Primärschlüssel ist, würden Sie, wie ich oben erwähnt habe, dies selbst implementieren müssen. Eine Suche müsste dann mindestens zwei Anfragen an Redis stellen, eine Suche nach dem Index und eine Suche nach dem Dokument. Wenn eine Suche mehr als ein Dokument ergibt, müssen Sie für jedes Dokument einzeln eine Anfrage stellen. Der Aufwand, all diese Anfragen zu stellen, würde wahrscheinlich Redis schlechter machen als Mongo. Nach meiner Erfahrung muss alles andere als der einfachste Cache, die Warteschlange oder Ähnliches mehr als eine Anforderung an Redis stellen, um alles zu bekommen, was es benötigt.

Also, mit den begrenzten Informationen, die mir zur Verfügung stehen, empfehle ich MongoDB.

    
Theo 24.02.2011, 08:23
quelle
4

Mongodb sollte dafür gut sein:

Zypern

    
Andreas Jung 23.02.2011 12:29
quelle
2

Die Dokumentengröße sollte zwar wichtig sein, sollte aber nicht der wichtigste Faktor bei der Auswahl von Mongo oder Redis sein. Es ist selten, dass Sie die Grenze von 4 MB in Mongo erreichen, und wenn Sie dies tun, könnte dies ein Indikator dafür sein, dass Ihr Dokument nicht ausreichend aufgeteilt ist. Redis ist etwas universeller. Wenn Sie also Ihren Datenspeicher für Nischenbereiche in Ihrem Anwendungsstatus verwenden möchten (Vorschlagsfelder, Cache usw.), passt Redis möglicherweise besser. Wenn persistente, reichhaltigere Elemente vorhanden sind, die über die nativen Datentypen und Strukturen von Redis hinausgehen, ist Mongo wahrscheinlich besser geeignet.

Ehrlich gesagt, sind sowohl Redis als auch Mongo hervorragend und tot einfach aufzustehen. In Anbetracht dessen, dass es zu einem frühen Zeitpunkt in Ihrem Lebenszyklus ist, versuchen Sie es sowohl mit der Größe als auch mit dem, was sich besser anfühlt.

    
chris.baglieri 24.02.2011 05:25
quelle
2

Ich werde eine weitere Option in den Ring werfen: Berkeley DB XML . Es ist eine kleine C ++ - Bibliothek mit C ++ - und Java-APIs, die XML-Datenmanagement, XQuery und XPath-Abfragen bereitstellt. Es ist darauf ausgelegt, sehr schnell, skalierbar und zuverlässig zu sein. Es unterstützt Transaktionen, Wiederherstellung und Replikation. Sie können damit XML-Dokumente sowie Nicht-SQL-Schlüssel / Wert-Paare speichern.

Disclaimer: Ich bin der Produktmanager für Berkeley DB, also bin ich ein bisschen voreingenommen. Wir haben jedoch viele Kunden, die BDB XML für mittlere bis sehr große Dokumenten-Repositories verwenden.

    
dsegleau 24.02.2011 07:18
quelle
0

Redis hat sekundäre Indizes erstellt, die jetzt Ihren Zweck erfüllen könnten. Linkg: Ссылка

    
darshan kamat 22.11.2017 11:11
quelle

Tags und Links