2010-06-15 8 views
19

Sto facendo alcune query in Python su un database di grandi dimensioni per ottenere alcune statistiche dal database. Voglio che queste statistiche siano in memoria in modo che altri programmi possano usarle senza andare in un database.database in memoria in Python

Stavo pensando a come strutturarli, e dopo aver provato a impostare alcuni dizionari nidificati complicati, mi sono reso conto che una buona rappresentazione sarebbe stata una tabella SQL. Non voglio tuttavia archiviare i dati nel database persistente. Esistono implementazioni in memoria di un database SQL che supporta l'interrogazione dei dati con la sintassi SQL?

risposta

30

SQLite3 potrebbe funzionare. L'interfaccia Python does support l'implementazione in memoria offerta dall'API SQLite3 C.

Dal spec:

È inoltre possibile fornire il nome speciale : Memoria: per creare un database nella RAM.

È anche relativamente economico con le transazioni, a seconda di ciò che si sta facendo. Per iniziare, solo:

import sqlite3 
conn = sqlite3.connect(':memory:') 

È quindi possibile procedere come se si stesse utilizzando un normale database.

A seconda dei dati, se riesci a passare con la chiave/il valore (stringhe, hash, elenchi, set, serie ordinate, ecc.) - Redis potrebbe essere un'altra opzione da esplorare (come hai detto che volevi condividere con altri programmi).

1

Immagino che SQLite3 sia l'opzione migliore.

Se possibile, dare un'occhiata a memcached. (Per la coppia chiave-valore, illuminazione veloce!)

UPDATE 1:

HSQLDB per SQL come tavoli. (nessun supporto per python)

+0

Tornando a questo un paio di anni più tardi, Redis è anche un'opzione molto valida con molta più flessibilità di memcache per questo genere di cose (a meno che SQL non sia un must). –

0

È possibile utilizzare un database come SQLite. Non è strettamente in memoria, ma è abbastanza leggero e sarebbe completamente separato dal tuo database principale.

+1

I database SQLite3 possono essere aperti solo in memoria. È uno dei grandi vantaggi di SQLite3. –

+0

Buono a sapersi, grazie per il suggerimento. –