2010-02-16 3 views
7

Qual è il modo più semplice per simulare una tabella di database con un indice in un archivio di valori chiave? Il negozio con valore chiave non ha richieste a distanza e NESSUN chiavi ordinate.Qual è il modo più semplice per simulare una tabella di database con un indice in un archivio di valori chiave?

le cose che voglio per simulare (in ordine di priorità):

  1. creare tabelle
  2. aggiungere colonne
  3. Creare indici
  4. query basata su chiave primaria
  5. query basata su arbitrarie colonne
+3

Simulare quale aspetto? Compatibilità SQL? Qualità delle prestazioni? Stai ottenendo gli oggetti giusti in base a una chiave primaria intera? –

+0

Qualsiasi aspetto che possa essere implementato in modo performante. – Zubair

+0

La tua domanda non è molto chiara e il tuo "chiarimento" non ha chiarito nulla. I commenti di Answering @ MB ti daranno risposte migliori. –

risposta

4

Se si utilizza Redis (un archivio di valori-chiave avanzato che supporta stringhe, elenchi, insiemi, ecc.), Questo è abbastanza semplice. Ho già sviluppato un C# redis client con supporto nativo per la memorizzazione dei modelli di dati di POCO. Questi stessi POCO possono essere utilizzati da OrmLite per memorizzarli in un RDBMS.

proposito Redis è veloce, ho un benchmark che memorizza e recupera l'intero database Northwind (3202 record) in meno di 1,2 secondi (in esecuzione all'interno di un unittest su un iMac 3yo).

devo conservare le entità in due modi

  • entità distinte, dove combino il nome del tipo di classe e la chiave primaria per creare un esempio chiave univoca urn:user:1
    • Ho poi mantenere una serie separata di chiavi primarie (in un insieme Redis) per tenere traccia di tutti i miei soggetti, utilizzando una chiave del tipo: ids:user
  • In un elenco lato server Redis - che agisce molto simile a una tabella con supporto per il paging, utilizzando una chiave del tipo: lists:user
+0

Ho usato Redis in passato, e sì, è accecantemente veloce, l'ho adorato, specialmente tutte le operazioni di range, set e atomic (incr and decr) che ha. E 'solo che ora mi sto occupando di un sistema che memorizza diversi miliardi di record in un database espandibile dinamicamente (Riak), quindi Redis non ha proprio ragione per questo, dato che tutto deve essere inserito nella memoria – Zubair

+0

consente di memorizzare 10 milioni di chiavi (con qualsiasi valore di dimensione) utilizzando solo 1,6 GB di memoria, pur rimanendo incredibilmente veloce - vedi: http://antirez.com/post/redis-virtual-memory-story.html – mythz

+0

Sì, I l'ho visto, molto bello !! In effetti, anche Riak ha un backend basato su Redis. Tuttavia, non è comunque scalabile fino a miliardi di record, ma è molto bello. – Zubair

2

Utilizzare una tabella o un dizionario. Se si desidera valori chiave univoci, è possibile utilizzare un GUID o un codice hash.

+0

Intendi un hastable per la chiave primaria? E dove si inserisce un dizionario? – Zubair

+0

In effetti, penso che una tabella hash probabilmente ti si addice meglio. Il dizionario è solo un'altra possibile opzione. –

1

L'archivio valori-chiave deve supportare l'ordinamento delle chiavi e l'accesso a distanza ai tasti.

Poi si dovrebbe creare due dizionari:

id -> payload 

e

col1, id -> NULL 

, dove payload dovrebbe contenere tutti i dati della tabella del database conterrebbe, e le chiavi del secondo dizionario dovrebbe contenere la valori di (col1, id) da ciascuna voce del primo dizionario.

+0

L'archivio dei valori chiave che sto utilizzando non supporta l'ordinamento di chiavi o l'accesso a distanza. – Zubair

+0

Inoltre, potresti riformulare la risposta, non ho capito la parte sui dizionari. Inoltre, cos'è col1? – Zubair

Problemi correlati