sembra che ci sia un nuovo sceriffo in città. il suo nome è Lightning MDB (lmdb): è un key/value store (logicamente si presenta come un semplice tabellone con due campi, una chiave ed un valore) ai benchmark fa faville (batte anche levelDb di google). ah, in giro non si trova facilmente - è però a disposizione con la distribuzione di OpenLDAP.
ovviamente c'è l'interfaccia per python, py-lmdb, eccola qui.
fosse tutto qui non sarebbe davvero male, ma non molto interessante. quando ho provato ad usarlo però - su un esempietto facile facile (trovare le righe doppie in un file da 7M di righe circa) - ho mandato in vacca il programma per aver provato a fare tutto in un'unica transazione: la bestiaccia mi ha dato MDB_TXN_FULL (errore -30788) cioè "Txn has too many dirty pages".
uh-uh, sembra ci sia un limite hard-coded (cioè "inchiodato" nel codice) alla dimensione max di una transazione, così almeno riporta la mailing list di openLDAP assieme alla (consueta) promessa che il limite verrà tosto eliminato.
già, ma nel frattempo? beh, visto che py-lmdb si porta appreso una copia dei sorgenti di lmdb si può provare ad inchiodarci un valore più elevato (non risolverò del tutto ma almeno sposto il confine più avanti). cerca cerca (mi piace vincere facile, lmdb sono in tutto quattro soli file) ecco finalmente in midl.h la riga responsabile (la riga 60)
#define MDB_IDL_LOGN 16 /* DB_SIZE is 2^16, UM_SIZE is 2^17 */
è stato sufficiente impostare il valore a 24 e ricompilare il module. per comodità mia ho fatto una copia del modulo con il (nuovo) nome lmbdXXL (extra-large) in modo da poter tenere a disposizione anche l'originale e fare così tutti i confronti del caso. l'interfaccia tramite cpython funziona (la cffi no, boh devo ancora capire).
Nessun commento:
Posta un commento