2010-05-05 17 views
13

Was wäre eine geeignete Datenbank für folgende? Ich bin besonders interessiert an Ihren Erfahrungen mit nicht-relationalen NoSQL Systemen. Sind sie für diese Art der Verwendung gut, welches System haben Sie verwendet und würden es empfehlen, oder sollte ich mit der normalen relationalen Datenbank (DB2) fortfahren?Was sind gute NoSQL und nicht-relationale Datenbanklösungen für Audit/Logging-Datenbank

Ich muss Audit-Trail/Logging-Typ Informationen aus einer Reihe von Quellen zu einem zentralen Server sammeln, wo ich effizient Berichte generieren und untersuchen könnte, was im System passiert.

Regel ein Audit/Protokolliervorgangs würde immer einige Pflichtfelder bestehen beispiels

  • global eindeutige ID (einige, wie durch das Programm erzeugt, der dieses Ereignis generiert)
  • Zeitstempel
  • Ereignistyp (dh Benutzer angemeldet sind, Fehler aufgetreten ist usw.)
  • einige Informationen über Quelle (server1, server2)

Darüber hinaus könnte das Ereignis 0-N Schlüssel/Wert-Paare enthalten, wobei der Wert bis zu einigen Kilobyte Text betragen könnte.

  • Es ist auf Linux-Server (zB 100 GB) mit hohen Datenmenge arbeitet
  • soll es eine Art effizienter Volltextsuche
  • Es soll gleichzeitige Lesen unterstützen lassen und
  • Es soll ausgeführt werden muß Schreiben
  • Es sollte flexibel sein, neue Ereignistypen hinzuzufügen und Schlüssel/Wert-Paare zu neuen Ereignissen hinzuzufügen/zu entfernen. Flexibel = Es sollten keine Änderungen am Datenbankschema erforderlich sein. Die Anwendung, die die Ereignisse generiert, kann einfach neue Ereignistypen/neue Felder hinzufügen, wenn dies erforderlich ist.
  • sollte es effizient sein, Abfragen für die Datenbank zu machen. Um zu berichten und zu erkunden, was passiert ist. Zum Beispiel:
    • Wie viele Ereignisse mit Typ = X in einem bestimmten Zeitraum aufgetreten sind.
    • alle Events in dem Feld einen Wert Y.
    • Erhalten alle Ereignisse mit Typ-X und A-Feld hat Wert 1 und Feld B nicht 2 und Ereignis aufgetreten ist in den letzten 24 Stunden

Antwort

4

The Zwei die ich erfolgreich benutzt habe sind MongoDB und Cassandra.

+0

Meinten Sie MongoDB? –

+1

MongoDB ist fantastisch für die Protokollierung: http://blog.mongodb.org/post/172254834/mongodb-is-fantastic-for-logging – kristina

2

Wir verwendeten Redis, um unsere gesamte zentrale Protokollierung für alle unsere App-Server unter mflow.com durchzuführen. Es ist sehr schnell, basierend auf these benchmarks es tut etwa 110000 SETs pro Sekunde, etwa 81000 GETs pro Sekunde. Es verfügt über eine VM-Implementierung (wenn Ihr Dataset den verfügbaren Speicher überschreitet), die nicht frequentierte Werte auf den Datenträger austauscht.

Es ist ein erweiterter Datenstrukturserver, der binäre Daten mit nativer Unterstützung für Strings, Listen, Mengen, sortierte Mengen und Hashes speichern kann. Basierend auf Diskussionen auf der Mailingliste wird es von vielen Leuten zum Speichern von Analysen verwendet.

2

sollte ich mit normalen relationalen Datenbank (DB2) gehen?

Ja, Sie sollten! Wenn Sie nur Daten speichern und scannen möchten, können Sie auch in eine Datei schreiben. Sehr schnell, kein Overhead! Aber sobald Sie die Daten im Laufe der Zeit zusammenfassen möchten (die letzten 24 Stunden oder zwischen den Zeiten t und t + 1), ist es umso wichtiger, dass Sie die Daten als etwas anderes als Textzeilen betrachten.