2012-05-16 7 views
8

Ich habe ein paar Fragen in der gleichen Art und Weise wie diese, aber sie enthalten nicht viel Details über die Art der Daten gespeichert, wie es abgefragt wird, usw. ... so dachte ich, dies wäre es wert, zu posten.Beste (NoSQL?) DB für kleine Dokumente/Datensätze, unveränderliche Daten, viele Schreibvorgänge, schnelle Lesevorgänge?

sind meine Daten sehr einfach, drei Felder: - ein "Datetimestamp" Wert (Datum/Uhrzeit) - zwei Saiten, "A" und "B", beide < 20 Zeichen

sehr Meine Anwendung ist schreibstark (Hunderte pro Sekunde). Alle Schreibvorgänge sind neue Datensätze; Einmal eingefügt, werden die Daten nie geändert.

Regelmäßige Lesevorgänge finden alle paar Sekunden statt und werden dazu verwendet, einige Fast-Echtzeit-Dashboards zu füllen. Ich frage nach dem Datum/Uhrzeit-Wert und einem der String-Werte. z.B. alle Datensätze erhalten, bei denen der Datumstempel in einem bestimmten Bereich liegt und das Feld "B" einem bestimmten Suchwert entspricht. Diese Abfragen geben normalerweise jeweils einige tausend Datensätze zurück.

Schließlich muss meine Datenbank nicht unbegrenzt wachsen; Ich würde Löschlisten, die älter als 10 Tage sind, entweder durch manuelles Löschen oder durch Verwendung einer Cache-Ablauf-Technik untersuchen, wenn die Datenbank dies unterstützt.

Ich habe dies ursprünglich in MongoDB implementiert, ohne zu wissen, wie es das Sperren behandelt (schreibt Blocklesevorgänge). Während ich skaliere, dauern meine Abfragen länger und länger (30+ Sekunden, sogar bei richtiger Indizierung). Nun, mit dem, was ich gelernt habe, glaube ich, dass die große Anzahl von Schreibarbeiten meine Lesevorgänge verhungern lässt.

Ich habe die kkovacs.eu Post nach dem Vergleich verschiedener NoSQL-Optionen gelesen, und während ich viel gelernt habe, weiß ich nicht, ob es einen klaren Gewinner für meinen Anwendungsfall gibt. Ich würde eine Empfehlung von jemandem, der mit den Optionen vertraut ist, sehr schätzen.

Vielen Dank im Voraus!

+0

Was aufzeichnen Sie, dass Sie Hunderte von Schreibvorgänge pro Sekunde benötigen, um eine db für Echtzeit-Dashboards zu füllen? – eaolson

+0

Haben Sie SQLite überprüft? –

+0

@eaolson Ich nehme Ereignisse auf, sobald sie auftreten, und ich habe keine Kontrolle über die Eingaben, die zu mir kommen. Die zwei Saiten identifizieren ein "Was" und ein "Wo". Bei den Abfragen handelt es sich meist um Dinge wie "Wähle alle Ereignisse an Ort [x] in den letzten 5 Minuten aus". Die Ergebnisse werden zwischengespeichert und mit den Ergebnissen früherer Abfragen (aus früheren Zeitscheiben) kombiniert und im Dashboard aufgezeichnet. –

Antwort

0

Die Entscheidung für ein richtiges NoSQL-Produkt ist keine leichte Aufgabe. Ich würde Ihnen empfehlen, mehr über NoSQL zu erfahren, bevor Sie Ihre Wahl treffen, wenn Sie wirklich sicherstellen wollen, dass Sie nicht auf den Vorschlag oder die Favoriten anderer vertrauen.

Es gibt ein gutes Buch, das wirklich guten Hintergrund über NoSQL gibt und jeder, der mit NoSQL startet, sollte dies lesen.

http://www.amazon.com/Professional-NoSQL-Wrox-Programmer/dp/047094224X

Ich hoffe, dass einige der Kapitel in dem Buch lesen, werden Sie wirklich helfen. Es gibt Vergleiche und Erklärungen darüber, was für welchen Job und vieles mehr gut ist.

Viel Glück.

1

Ich habe ein Problem wie dieses zuvor in einer Systemaufzeichnung Prozesskontrollmessungen konfrontiert. Dies wurde mit 5 MHz IBM PCs gemacht, also ist es definitiv möglich. Die Anwendungsfälle waren vielfältiger. — Zusammenfassung nach Minute, Stunde, Acht-Stunden-Schicht, Tag, Woche, Monat oder Jahr —, so dass das System alle Rohdaten aufgezeichnet hat, aber auch für die häufigsten Abfragen aggregiert wird (das waren fünf Minuten Durchschnitt). Im Falle Ihres Dashboards scheint es, als wäre eine fünfminütige Aggregation ebenfalls ein Hauptziel.

Vielleicht könnte dies gelöst werden, indem Sie für jeden Eingabestrom ein Paar Textdateien schreiben: Eines mit allen Rohdaten; ein anderes mit der multi-minuten Aggregation. Das Dashboard würde die Rohdaten ignorieren. Um das Gleiche zu tun, könnte natürlich auch eine Datenbank verwendet werden. Eine Vereinfachung der Anwendung könnte jedoch bedeuten, dass kein RDB benötigt wird.Einfacher zu entwickeln und zu warten, einfacher auf einem Mikrocontroller, einem eingebetteten System usw. oder einem freundlicheren Nachbarn auf einem gemeinsam genutzten Host zu installieren.

Verwandte Themen