Ist es möglich, 20 TB Daten mit MySQL zu verwalten?

7

Ich arbeite in einem Projekt und meine Aufgabe ist es, ein Datenbanksystem aufzubauen, um ungefähr 60.000.000.000 Dateneinträge zu verwalten.

Der Hintergrund des Projekts ist, dass ich für eine große Anzahl von Nachrichten, die jede Sekunde von etwa 30.000 RFID-Lesegeräten gelesen werden, Echtzeitspeicher erstellen muss. Angenommen, jeder RFID-Leser generiert 6.000 Nachrichten pro Tag. Ich muss 180.000.000 Einträge in die Datenbank einfügen.

Eine mögliche Dateneingabe ist wie "time_stamp, Reader_ID, Tag_ID, other_msg_content".

Dies sind Abfragen (SELECT) basierend auf dem Zeitbereich, Reader_ID und Tag_ID. Die Abfragen werden nicht sehr kompliziert sein.

Jetzt entwerfe ich das Datenbanksystem und plane, MySQL zu verwenden. Meine Dump-Fragen sind:

  1. Ist es ratsam, MySQL zu verwenden, oder sollte ich auf Oracle (was teuer ist) oder HBase zurückgreifen?

  2. Wenn ich MySQL verwenden muss, eine Idee, wie ich den Cluster erstellen kann?

  3. Wenn ich die Nachrichten in eine Tabelle einfüge, wird die Tabelle bald sehr lang sein. Ich möchte Sharding-Techniken verwenden, um einen langen Tisch in viele kurze Tische aufzuteilen.

    3.a. Ich möchte die richtige Länge für eine MySQL InnoDB-Tabelle wissen, dh nachdem wie viele Dateneinträge eingefügt wurden, werde ich mit dem Sharding beginnen.

    3.b. Gibt es da draußen eine gute Sharding-Proxy-Lösung? Ich weiß, dass Spock Proxy und einige andere Empfehlungen benötigen.

  4. Muss ich MySQL Cluster verwenden? ODER Ich verwende nur MySQL-Master-Server und Sharding-Slaves und verwende Replication, um eine hohe Verfügbarkeit zu erreichen.

  5. Angenommen, ich muss 20 TB-Daten in MySQL verarbeiten (für 1 Jahr), ich plane, 20 Knoten (PC-Server, billig) zu verwenden und 1 TB-Daten pro Knoten zu speichern. Ist das möglich? Kommentare sind willkommen.

Danke vielmals.


quelle
RRDtool oder Vhayu sind möglicherweise eine Untersuchung wert, aber es scheint, dass viele der in High Scalability beschriebenen Infrastrukturen eine Untersuchung wert sind.
Steve-o
Wie wollen Sie eine hohe Verfügbarkeit erreichen, wenn Sie sagen, dass Ihre MySQL-Daten 20 TB benötigen und jeder Knoten diese Daten in 1-TB-Teile "aufteilt"? oder belegt Ihre MySQL-Datenbank möglicherweise 1 TB und Sie replizieren sie auf 20 Knoten? Du hast mich verwirrt.
Bruno Flávio
Hallo Qsp, danke fürs fragen. Ich wollte zunächst 20 Knoten verwenden, um 20 TB-Daten zu verarbeiten. Verwenden Sie zweitens 20 weitere Knoten als Replikationsknoten, um HA zu erreichen. Mein Hauptanliegen ist das Speichern und Verwalten von 20-TB-Daten mit MySQL. HA ist das zweite, worüber man sich Sorgen machen muss.
Lesen Sie zuerst die Antwort von gbn. Dies ist wie die Entscheidung, welchen Motor Sie verwenden möchten, bevor Sie wissen, ob Sie ein Auto oder ein Flugzeug bauen. Werfen Sie einen Blick auf OpenTSDB, da es den Speicheranforderungen Ihrer Anforderungen zu entsprechen scheint. Sie wissen jedoch nicht, wie Sie es abfragen möchten, sodass ich Ihnen dort nicht weiterhelfen kann.
Die RFID-Ausgabe besteht aus unstrukturierten Daten. Wie können Sie mit RDBMS speichern oder abrufen? Verwenden Sie stattdessen hbase

Antworten:

10

Gedanken:

  • Wenn Sie diese Frage in einem öffentlichen Forum stellen, stellen Sie Experten ein, die dies für Sie tun
  • Betrachten Sie Postgres und SQL Server, die auch auf dieses Volume skaliert werden
  • Benötigen Sie Säure? Nein = NoSQL berücksichtigen
  • Design und Hardware sind wichtiger als die Plattform
  • Virtualisieren oder schneiden Sie keine anderen Hardware-Ecken
  • Was ist dein RPO / RTO?
  • Wartungsfenster? aka bist du wirklich 24/7/365? Akk 30.000 Zeilen pro Sekunde die ganze Zeit
  • Archivierung?
  • Benötigen Sie älter (sagen wir 6 Monate) online?
  • Budget?
  • Realistische Tests sind erforderlich, um Architektur und Design für die angegebene Last zu validieren
  • 20 TB ist wahrscheinlich zu klein
  • 6.000 pro RFID pro Tag, aber 30.000 pro Sekunde? Es gibt 86,4.000 Sekunden pro Tag, sodass nur 1 von 14 RFIDs pro Sekunde schreiben: Was ist mit potenziellen Spitzenlasten von mehr als 420.000 Zeilen pro Sekunde?

Schließlich

  • Dies ist keine Datenbankfrage, sondern eine Architekturfrage
  • Sie stellen zu früh die falschen Fragen für diese Anforderung
gbn
quelle
Hallo gbn, vielen Dank für deine aufschlussreichen Kommentare. Ich werde Ihre Fragen bald beantworten.