Domanda

Al momento sto lavorando su un problema che coinvolge l'interrogazione di una quantità enorme di dati (miliardi di righe) e, essendo un po 'inesperto, con questo tipo di cose, mi piacerebbe qualche consiglio intelligente.

I dati / problema simile a questo:

  1. Ogni tabella ha 2-5 colonne chiave e 1 colonna valore.
  2. Ogni riga ha una combinazione unica di chiavi.
  3. Ho bisogno di essere in grado di interrogare per qualsiasi sottoinsieme di chiavi (cioè key1 = 'blah' e key4 = 'bloo').
  4. Sarebbe bello poter inserire rapidamente nuove righe (aggiornando il valore se la riga esiste già), ma sarei contento se potessi farlo lentamente.

Attualmente ho questo implementato in MySQL in esecuzione su una singola macchina con indici separati definiti su ciascuna chiave, un indice di tutti tutte le chiavi (unici) e un indice combinando i primi e gli ultimi tasti (che è attualmente la domanda più comune che' m making, ma che potrebbe facilmente cambiare). Purtroppo, questo è piuttosto lento (e gli indici finiscono per prendere ~ 10 volte lo spazio su disco, che non è un problema enorme).

mi capita di avere uno stuolo di computer veloci a mia disposizione (~ 40), il che rende l'incredibile lentezza di questo database unico di un dispositivo ancora più fastidioso. Voglio approfittare di tutto questo potere per rendere questo database veloce. Ho pensato di costruire una tabella hash distribuita, ma che renderebbe difficile interrogare per solo un sottoinsieme delle chiavi. Sembra che qualcosa di simile BigTable / HBase sarebbe una soluzione decente, ma io non sono ancora convinto che una soluzione più semplice non esiste.

Grazie mille, tutto l'aiuto sarebbe molto apprezzato!

Nessuna soluzione corretta

Altri suggerimenti

Io suggerirei di ascoltare questo podcast per alcune ottime informazioni su database distribuiti. episodio-109-eBays -Architettura-principi-con-randy-Shoup

Per sottolineare l'ovvio:. Probabilmente siete disco legato

A un certo punto, se si sta facendo query casuale per e il set di lavoro è sufficientemente grande di RAM, allora sarete limitati dal piccolo numero di IOPS casuali un disco può fare. Non si ha intenzione di essere in grado di fare meglio di un paio di decine di sub-query al secondo per disco collegato.

Se siete in su contro quel collo di bottiglia, si potrebbe guadagnare di più passando a uno SSD, un RAID più grande, o un sacco-di-RAM di quanto avrebbe distribuendo il database tra molti computer (che per lo più solo ottenere di più degli ultimi due risorse)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top