Datenbank Vorschläge für Zeitreihen von Veranstaltungen

stimmen
11

Für eine meiner Projekte, ich habe eine große ish Sammlung von Ereignissen zur späteren Verarbeitung in eine Datenbank eingeben und ich versuche zu entscheiden, welche DBMS am besten für meine Zwecke wäre.

Ich habe:

  • Über 400 Millionen diskrete Ereignisse zur Zeit

  • Über 600 GB an Daten, die in der DB gespeichert werden

Diese Ereignisse kommen in einer Vielzahl von Formaten, aber ich schätze die Anzahl der einzelnen Attribute 5000 zu sein. Die meisten Ereignisse enthalten nur Werte für jeweils etwa 100 Attribute. Die Attributwerte sind als willkürliche Zeichenfolge behandelt werden und in einigen Fällen ganze Zahlen.

Die Ereignisse werden schließlich in eine einzige Zeitreihe konsolidiert werden. Während sie eine innere Struktur zu tun haben, gibt es keine Hinweise auf andere Ereignisse, die - glaube ich - bedeutet, dass ich nicht ein Objekt DB oder ein ORM-System benötigen.

Meine Anforderungen:

  • Open-Source-Lizenz - ich kann es zwicken ein wenig.

  • Skalierbarkeit durch die Möglichkeit, mehrere Server zu erweitern, obwohl nur ein System auf den ersten verwendet werden.

  • Schnelle Abfragen - Updates sind nicht so kritisch.

  • Ältere Treiber / Bindings für C / C ++, Java und Python. Vorzugsweise mit einer Lizenz, die gut mit anderen spielt - ich würde mich lieber nicht wegen einer technischen Entscheidung zu irgendetwas verpflichten. Ich denke, dass die meisten DB-Treiber nicht haben hier ein Problem, aber es sollte auf jeden Fall erwähnt werden.

  • Verfügbarkeit für Linux.

  • Es wäre schön, aber nicht notwendig, wenn es auch für Windows verfügbar ist

Mein Ideal DB für dieses mir erlauben würde, von einem bestimmten Zeitraum mit einer einzigen Abfrage alle Ereignisse abzurufen.

Was ich gefunden habe, / so weit in Betracht gezogen:

  • Postgresql mit einer erhöhten Seitengröße kann offenbar bis zu 6000 Spalten in jeder Tabelle. Wenn meine Schätzung des Attributs Zählung nicht ausgeschaltet ist, kann es tun.

  • MySQL scheint eine Grenze von 4000 Spalten pro Tabelle zu haben. Ich konnte mehrere Tabellen mit ein wenig SQL-fu, aber ich möchte lieber nicht.

  • MongoDB ist , was ich bin derzeit Neigung zu. Es würde mir erlauben , die innere Struktur der Ereignisse zu bewahren, während sie noch in der Lage , abzufragen. Seine API scheint auch ziemlich geradlinig. Ich habe keine Ahnung , wie gut es tut , Performance-weise aber - zumindest auf einem einzigen Server.

  • OpenTSDB und sein metrische Sammlung Rahmen klingt interesting.I für jedes Attribut eine einzelne Zeitreihe verwenden könnte (die mit einigen meiner Verarbeitung helfen könnten), hat den Attributwert als Tag und Tag zusätzlich die Einträge sie auf ein bestimmtes Ereignis zu verknüpfen. Es hat wahrscheinlich eine steilere Kurve Vorbereitung , dass die drei oben, sowohl von einem Administrator und Anwendungsprogrammierer Sicht. Keine Ahnung über seine Leistung.

  • Verwenden Sie HBase direkt. Dies könnte meine Anforderungen besser als passen OpenTSDB , obwohl - aus meinen bisherigen Erfahrungen mit hadoop zu urteilen - der Verwaltungsaufwand ist wahrscheinlich immer noch höher als in den ersten drei Optionen.

Es gibt wahrscheinlich auch andere Datenbanken, die es tun könnten, so fühlen sich frei, mich wissen zu lassen - ich würde jeden Vorschlag oder Kommentar zu schätzen wissen, die mir dabei helfen könnte.

PS: Ich habe nur minimale Erfahrung als DB-Administrator, so dass ich entschuldige sich für etwaige Missverständnisse.

Veröffentlicht am 12/12/2010 um 16:11
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
4

Verwendung von Tabellen mit Tausenden von Spalten ist Wahnsinn. Vor allem, wenn die meisten von ihnen sind gleich Null, wie Sie gesagt haben.

Sie sollten von dieser Daten-Struktur in Umwandlung aussehen zuerst:

table_1
-------
event_id
attribute_1
attribute_2
[...]
attribute_5000

in etwa wie folgt:

table_1          event_values             attributes
--------         ------------             ----------
event_id         event_id                 attribute_id
                 attribute_id             attribute_type
                 attribute_value

die mit jedem RDMS verwendet werden können (Ihre einzige Einschränkung dann würde die gesamte Datenbankgröße und Leistung sein)

Beantwortet am 06/05/2011 um 11:51
quelle vom benutzer

stimmen
0

Es ist wahrscheinlich sehr spät für eine Antwort, aber hier ist das, was ich tue.

Ich benutze HDF5 als meine Zeitreihen-Repository. Es hat eine Reihe von effektiven und schnellen Kompressionsarten, die miteinander kombiniert werden können. Es kann mit einer Reihe von verschiedenen Programmiersprachen verwendet werden. Es ist auf Windows als auch Linux.

Ich benutze boost :: date_time für den Zeitstempel-Feld. Dies ermöglicht eine große Vielfalt von Datetime-basierten Berechnungen.

Im Geschäfts Bereich schaffe ich dann spezifische Datenstrukturen für die einzelnen Balken, Zecken, Geschäfte, Zitate, ...

Ich habe eine Reihe von benutzerdefinierten Iteratoren und verwenden Standard-Template-Bibliothek Algorithmen, um effizient für bestimmte Werte oder Bereiche von zeitbasierten Datensatz suchen. Die Auswahl kann dann in den Speicher geladen werden.

Beantwortet am 24/11/2013 um 13:44
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more