Backend di archiviazione dati adatto per l'applicazione Erlang quando i dati non si adattano alla memoria

StackOverflow https://stackoverflow.com/questions/287233

Domanda

Sto cercando possibili opzioni su come organizzare la memorizzazione dei dati per un'applicazione Erlang. I dati che dovrebbe utilizzare sono fondamentalmente una vasta raccolta di BLOB binari indicizzati da ID stringa brevi. Ogni BLOB è inferiore a 10 Kb ma ce ne sono molti. Mi aspetterei che in totale avrebbero dimensioni fino a 200 Gb, quindi ovviamente non si adatta alla memoria. L'operazione tipica su questi dati è la lettura di un BLOB dal suo ID o l'aggiornamento di un BLOB dal suo ID o l'aggiunta di uno nuovo. In ogni dato periodo del giorno viene utilizzato solo un sottoinsieme di ID, pertanto le prestazioni di accesso all'archiviazione dei dati potrebbero trarre vantaggio dalla cache in memoria. Parlare di prestazioni - è piuttosto critico. L'obiettivo è di avere circa 500 letture e 500 aggiornamenti al secondo sull'hardware delle materie prime (diciamo su VM EC2).

Qualche suggerimento cosa usare qui? Come ho capito dets è fuori discussione in quanto è limitato a 2G (o era 4G?). Probabilmente anche la Mnesia era fuori discussione; la mia impressione è che sia stato progettato principalmente per i casi in cui i dati si adattano alla memoria. Sto pensando di provare il driver Berkeley DB di EDTK per l'attività. Funzionerebbe nello scenario sopra? Qualcuno ha esperienza nell'usarlo nella produzione in condizioni simili?

È stato utile?

Soluzione

tcerl è uscito dall'affrontare lo stesso limite di dimensioni. In questi giorni non sto usando Erlang, ma suona come quello che stai cercando.

Altri suggerimenti

Hai visto cosa sta facendo CouchDB? Potrebbe non essere proprio quello che stai cercando come calo del prodotto, ma c'è un sacco di codice erlang per l'archiviazione dei dati. Si parla anche di fornire un'interfaccia erlang nativa invece dell'API REST.

C'è qualche motivo per cui non puoi semplicemente usare un file system, trattando il nome file come ID stringa e il contenuto del file come un BLOB binario? Puoi sceglierne uno (filesystem) adatto alle tue esigenze prestazionali e dovresti ottenere sostanzialmente la memorizzazione nella cache gratuitamente, fornita dal tuo sistema operativo.

Mnesia può archiviare i dati sul disco bene. Ci sono anche det (memoria basata su disco) che è approssimativamente analogo a Berkeley DB. È nella lib standard: http://www.erlang.org/doc/ apps / stdlib / index.html

Consiglierei Apache CouchDB.

È perfetto per Erlang e dal suo suono (menzionate BLOB basati su ID e non menzionate alcun requisito relazionale) state cercando un database orientato ai documenti.

Poiché l'interfaccia è REST, puoi semplicemente aggiungere una cache HTTP di prodotto al suo interno se hai bisogno di cache.

La documentazione per CouchDB è di altissima qualità.

Ha anche incorporato Map-Reduce :)

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