2016-04-09 7 views
1

Disclaimer - diese Frage ist nicht Arbeit noch Akademie bezogen, es ist nur Ideen und Ansätze in Bezug auf Big Data zu verstehen.Big Data Modifizierung stardegies

Schlage vor, dass ich eine Datenbank mit 10 Bil Aufzeichnungen über Flüge rund um die Welten habe. 10% bis 20% werden jede Minute aktualisiert - die Aktualisierung könnte entweder eine Änderung der Abfahrt/Ankunft oder irgendein anderer relevanter Parameter des Fluges sein.

Alle Daten aus der Datenbank werden in einem Cache auf einem anderen Rechner aktualisiert (nennen wir es "The Cache Machine").

Tausende von Clients fordern Daten vom Cache-Rechner an.

Meine Fragen sind wie folgt:

1.How kann ich veraltete Daten in den Cache-Maschine zu vermeiden, wenn der db eine aktualisierte Daten jede Minute hat?

2. Was wäre der effizienteste Weg für die Clients, den Cache-Rechner aufzurufen? Ist die Tatsache, dass die Cache-Maschine eine erhebliche Menge an Daten enthält und mehrere Clients auf die Gleichzeitigkeit der Maschine zugreifen, ein asynchroner Ansatz erforderlich?

3. Soll ich ein RDBMS für meine DB verwenden? Wenn die Daten in einer solchen DB gehalten werden, können Abfragen von verschiedenen Tabellen lange dauern.

Versuch, diese Fragen selbst zu beantworten, würde ich sagen, dass:

1.

A.i jede Minute beseitigen, kann der Cache-Maschine und dann alle Daten aus der DB abrufen. Meine Daten werden frisch sein, aber eine solche Abfrage könnte schmerzhaft langsam sein.

ODER

b.i den Zustand jedes Element in dem Cache in regelmäßigen Abständen überprüfen, aber es könnte meine DB ersticken.

2.Ich kann Warteschlangenanfragen haben, damit sich die Clients nicht gegenseitig stören.

3.RDBMS wäre keine gute Option für diese Datenmenge. Eine Schlüssel/Wert-DB könnte für diese Art von Daten funktionieren.

Ich bin nicht sicher, wie ich diese Fragen beantworten sollte, und würde mich über alle guten Punkte oder Erklärungen freuen, wie man mit einem solchen Szenario umgeht.

Antwort

1

Ihre Problemstellungen sind sehr kurz. Ich versuche, mit einigen simplen Annahmen zu klären (bitte korrigieren meine Annahmen wenn falsch und dann kann ich die Antworten zwicken entsprechend):

  1. Cache Update:
    • Sie unter der Annahme nicht ein halten müssen Kopie der Daten im Cache, aber nur die zuletzt aufgerufenen Datensätze, so dass jeder wiederholte Zugriff schneller ist (wodurch die durchschnittliche Zugriffslatenz verbessert wird). Die Abfrage kann zuerst den Cache durchsuchen und, falls nicht gefunden, die DB durchsuchen.
    • vorausgesetzt, Sie brauchen einen Push von der DB, können Sie Buckets mit Zeitstempel der Daten drücken. Die Suchanfrage kann mit der Suche nach dem letzten Zeitfenster beginnen. Wenn nicht gefunden, gehe zum vorherigen Zeitfenster. Verwenden Sie einen Bloom-Filter, um zu prüfen, ob der Eintrag in einem Bucket existiert.
    • Sie müssen möglicherweise einen Hintergrund-Job ausführen, um die älteren Einträge von Multi-Timeline zu konsolidieren/Kompakt Eimer, Indizes entfernen Einträge
  2. Cache Zugang:
    • Batch-Modus: für Warteschlange gehen. Lassen Sie die Abfragen in eine Warteschlange und die Ergebnismenge kann auch in einer anderen Warteschlange für den Client abgerufen werden.
    • Online-Modus: unter der Annahme, dass nur Lesezugriff besteht, können Sie memcached/radis für verteiltes, leistungsstarkes Caching verwenden (und der Zweck des Cachings ist offensichtlich, Abfragen mit niedriger Latenz zu ermöglichen). Sie können eine App/einen Webserver vor Ihnen anschließen.
  3. DB Wahl:
    • Cache unter der Annahme ist der Zugangspunkt für Abfragen, Sie brauchen kein hochleistungs db. Da die Daten riesig sind, würde ich denken, dass ein verteiltes Caching benötigt wird und auch eine verteilte Datenbank. Postgres, Hive/HBase, MongoDB usw. verteilte DBs werden gut sein.
    • Sie können noch nicht sagen, ob RDBMS gut sein kann oder nicht, da wir den Datentyp und die Zugriffsanforderungen nicht kennen. Angenommen, der Zugriff erfolgt über den Cache unter Verwendung eines Schlüssels (möglicherweise eines zusammengesetzten Schlüssels), ist ein schlüsselwertbasierter Speicher (wie HBase) gut.

Wahrscheinlich ist dies nicht genug, aber wenn Sie mehr Details I entsprechend ändern können.

Verwandte Themen