2009-07-31 36 views
2

Ich werde mit einem neuen Projekt beginnen. Ich muss mit hundert Gigs von Daten in einer .NET-Anwendung umgehen. Es ist sehr früh, jetzt viel über dieses Projekt zu erzählen. Einige Übersicht ist folgendermaßen:Umgang mit Gigabyte Daten

  1. Viele schreibt und Lose auf denselben Tabellen liest, sehr Echtzeit
  2. Skalierung ist sehr wichtig, da die Client-Erweiterung von Datenbankservern besteht sehr häufig, damit die Anwendungsserver als auch
  3. voraussah, viel, viel Nutzung hinsichtlich der aggregierten Anfragen werden könnte
  4. Jede Reihe von Daten implementiert werden viele Attribute enthält mit

ich schlage/umgehen ha folgende ving als Lösung:

  1. Verwenden verteilten Hash-Tabelle Art Persistenz (nicht aber S3 Inhouse one)
  2. Verwenden Hadoop/Hive mag (jeder Ersatz in .NET?) für jeden Analyseprozess über die Knoten
  3. Impelement GUI in ASP.NET/Silverlight (mit vielen ajaxification, wo immer erforderlich)

Was denkt ihr? Mache ich hier einen Sinn?

+0

"sehr Echtzeit" ist keine nützliche Aussage. Wenn Sie die Bewegung von Gletschern verfolgen müssen, ist "Echtzeit" "wirklich langsam". –

Antwort

2

Sind Ihre Ziele Leistung, Wartbarkeit, Verbesserung der Erfolgsaussichten, Schneide sein?

Geben Sie relationale Datenbanken nicht zu früh auf. Mit einer $ 100 externen Festplatte und Sample Data Generator (RedGate ist gut), können Sie diese Art von Arbeitsbelastung ziemlich einfach simulieren.

Simulieren Sie diese Arbeitslast in einer nicht relationalen Datenbank und in einer Cloud-Datenbank, und Sie könnten Ihre eigenen Werkzeuge schreiben.

+0

Meine Absicht ist es zu sehen, wie gut es ist, nicht-relationale Datenbank und verteilte Verarbeitung von Abfragen zu verwenden. Ich bin nicht sicher, wie relationale Datenbank oder wie diese Architektur in diesem Szenario funktionieren könnte – asyncwait

+1

Dann empfehle ich, ein Testkabelbaum mit realistischen Daten zusammenzustellen. Alles andere ist nur wilde Spekulation und vorzeitige Optimierung. Ich empfehle auch, große Unternehmen, die ähnliche Arbeitslasten haben, aufzuspüren und zu sehen, ob es öffentliche Informationen über ihre Architektur gibt, z. Digg.com läuft auf mysql, Google läuft auf einer verteilten Datenbank, wie du es erwähnst. Aber Google verarbeitet wahrscheinlich TBs von Daten pro Sekunde. Wir können nur hoffen, dass Ihr Projekt so erfolgreich sein wird. – MatthewMartin

+0

Ich bin bei dir ... – asyncwait

2

Dies ist das Markenzeichen eines Data Warehouse „voraussah, viel, viel Nutzung hinsichtlich der aggregierten Anfragen könnten umgesetzt werden“.

Hier ist der Trick mit der DW-Verarbeitung.

  1. Daten sind FLAT. Fakten und Dimensionen. Minimale Struktur, da sie meist geladen und nicht aktualisiert wird.

  2. Um Aggregation zu tun, muss jede Abfrage eine einfache sein SELECT SUM() or COUNT() FROM fact JOIN dimension GROUP BY dimension attribute. Wenn Sie das richtig machen, damit jede Anfrage diese Form hat, kann die Leistung sehr, sehr gut sein.

  3. Daten können in flachen Dateien gespeichert werden, bis Sie aggregieren möchten. Sie laden dann die Daten, die die Benutzer tatsächlich verwenden möchten, und erstellen einen "Datamart" aus dem Masterdatensatz.

Nichts ist schneller als einfache flache Dateien. Sie benötigen keine Komplexität, um Terabytes einfacher Dateien zu verarbeiten, die (wie benötigt) für die Aggregation und Berichterstellung in RDBMS-Datamarts geladen werden.

Einfache Massenladungen einfacher Dimensions- und Faktentabellen können mit den RDBMS-Tools sehr schnell durchgeführt werden.

Sie können alle PKs und FKs mit der Ultrahochgeschwindigkeits-Flachdateiverarbeitung trivial vorab zuweisen. Dies macht die Massenladungen um so einfacher.

Holen Sie sich Ralph Kimballs Data Warehouse Toolkit-Bücher.

0

"viele lesen und schreiben auf den gleichen Tabellen, sehr realtime" - Ist Integrität wichtig? Sind einige dieser Transaktionen schreibend? Wenn ja, bleiben Sie bei RDBMS.

Skalierung kann schwierig sein, aber es bedeutet nicht, dass Sie mit Cloud-Computing-Sachen gehen müssen. Die Replikation in DBMS funktioniert normalerweise zusammen mit Webanwendungsclustern, Load Balancern usw.

1

Moderne Datenbanken funktionieren sehr gut mit Gigabyte. Wenn Sie Terabytes und Petabyte erreichen, neigen RDBMS dazu, zusammenzufallen. Wenn Sie diese Art von Ladung vorhersehen, könnte etwas wie HBase oder Cassandra sein, was der Arzt bestellt hat. Wenn nicht, verbringen Sie einige Zeit mit der Optimierung Ihrer Datenbank, Einfügen von Zwischenspeicherungsschichten (memached) usw.

0

Geben Sie dem RDBMS die Verantwortung, die Integrität zu wahren. Und behandeln Sie dieses Projekt als wäre es ein Data Warehouse. Halten Sie alles sauber, Sie müssen nicht viele Tools von Drittanbietern verwenden: Verwenden Sie stattdessen die RDBMS-Tools. Ich meine, benutze alle Werkzeuge, die das RDBMS hat, und schreibe eine GUI, die alle Daten aus dem Db mit gut geschriebenen gespeicherten Prozeduren eines gut entworfenen physikalischen Datenmodells (Index, Partitionen usw.) extrahiert.

Teradata kann viele Daten verarbeiten und ist skalierbar.