Raccomandazione per un sistema di data warehouse su larga scala
-
05-07-2019 - |
Domanda
Ho una grande quantità di dati che devo archiviare ed essere in grado di generare report - ognuno dei quali rappresenta un evento su un sito Web (stiamo parlando di oltre 50 al secondo, quindi chiaramente i dati più vecchi dovranno essere aggregati ).
Sto valutando gli approcci per implementarlo, ovviamente deve essere affidabile e dovrebbe essere il più semplice possibile ridimensionare. Dovrebbe anche essere possibile generare relazioni dai dati in modo flessibile ed efficiente.
Spero che alcuni SOer abbiano esperienza di tale software e possano formulare una raccomandazione e / o sottolineare le insidie.
Idealmente, vorrei distribuirlo su EC2.
Soluzione
Wow. Stai aprendo un argomento enorme.
Alcune cose proprio dalla cima della mia testa ...
- pensa attentamente al tuo schema per gli inserti nella parte transazionale e legge nella parte del rapporto, potresti essere meglio tenerli separati se disponi di volumi di dati veramente grandi
- osserva attentamente la latenza che puoi tollerare tra i rapporti in tempo reale sulle tue transazioni e i rapporti aggregati sui tuoi dati storici. Forse dovresti avere un processo che viene eseguito periodicamente e aggrega le tue transazioni.
- esamina attentamente qualsiasi requisito che ti consenta di riferire attraverso i tuoi dati transazionali e aggregati, sia nello stesso rapporto o come un drill-down dall'uno all'altro
- prototipo con alcune query significative e alcuni volumi di dati realistici
- procuratevi una vera qualità di produzione, database pronto per l'azienda, ovvero Oracle / MSSQL
- pensa a utilizzare il codice / prodotto di qualcun altro per la segnalazione, ad es. Crystal / BO / Cognos
come ho detto, argomento enorme. Mentre penso a più continuerò ad aggiungere alla mia lista.
HTH e buona fortuna
Altri suggerimenti
@ Simon ha fatto molti punti eccellenti, ne aggiungerò alcuni e ne ripeterò / enfatizzerò alcuni altri:
- Utilizza il tipo di dati corretto per i timestamp - assicurati che il DBMS abbia la precisione appropriata.
- Prendi in considerazione l'accodamento per l'acquisizione di eventi, consentendo a più thread / processi di gestire l'archiviazione effettiva degli eventi.
- Separare gli schemi per il proprio magazzino transazionale e di dati
- Prendi seriamente in considerazione un ETL periodico dal db transazionale al data warehouse.
- Ricorda che probabilmente non avrai 50 transazioni / secondo 24x7x365 - transazioni di picco vs. transazioni medie
- Esamina le tabelle di partizionamento nel DBMS. Oracle e MSSQL partiranno entrambi su un valore (come data / ora).
- Avere una politica di archiviazione / conservazione dei dati fin dall'inizio. Troppi progetti iniziano a registrare i dati senza piani per rimuoverli / archiviarli.
Sono sorpreso che nessuna delle risposte qui riguardi Hadoop e HDFS - Suggerirei che è perché SO è un programmatore qa e la tua domanda è in realtà una questione di scienza dei dati.
Se hai a che fare con un gran numero di query e tempi di elaborazione elevati, utilizzeresti HDFS (un formato di archiviazione distribuito su EC) per archiviare i tuoi dati ed eseguire query batch (ovvero analisi) sull'hardware delle materie prime.
Dovresti quindi eseguire il provisioning di tutte le istanze EC2 necessarie (centinaia o migliaia a seconda della dimensione dei requisiti di compressione dei dati) ed eseguire la mappa per ridurre le code rispetto ai tuoi dati per produrre report.
Wow .. Questo è un argomento enorme.
Vorrei iniziare con i database. Per prima cosa, ottieni qualcosa di buono se hai una quantità folle di dati. Mi piacciono Oracle e Teradata.
In secondo luogo, esiste una differenza definitiva tra la registrazione di dati transazionali e il reporting / analisi. Metti i tuoi dati transazionali in un'area e poi arrotolali secondo una pianificazione regolare in un'area di reporting (schema).
Credo che tu possa affrontare questi due modi
-
Getta soldi per il problema: acquista i migliori software di classe (database, software di reportistica) e assumi qualche tecnico esperto per aiutarti
-
Adotta l'approccio familiare: costruisci solo ciò di cui hai bisogno in questo momento e fai crescere organicamente il tutto. Inizia con un semplice database e crea un framework per i report web. Ci sono molti strumenti open source di discesa e agenzie economiche che fanno questo lavoro.
Per quanto riguarda l'approccio EC2 .. Non sono sicuro di come si adatterebbe a una strategia di archiviazione dei dati. L'elaborazione è limitata ed è qui che EC2 è forte. Il tuo obiettivo principale è l'archiviazione e il ripristino efficaci.