Sto lavorando a un'applicazione che dovrà memorizzare i metadati associati ai file musicali (artista, titolo, numero di riproduzioni, ecc.), Nonché insiemi di numeri interi (in particolare gli hash SHA-1).Database incorporato veloce
La soluzione prendo bisogno di:
- Fornire "veloce" di stoccaggio & recupero (quando si visualizza un elenco di potenzialmente migliaia di canzoni ho bisogno di essere in grado di recuperare i metadati più o meno in modo interattivo).
- Essere multipiattaforma (su Linux, Windows e OSX).
- Fornire un'interfaccia con cui posso interagire da C++.
- Essere open-source (o, per lo meno, essere libero come nella birra).
- Fornisce operazioni di set rapido (unione, intersezione, differenza) - se la soluzione non fornisce questo, ma mi consentirà di memorizzare dati binari, potrei implementarlo io stesso utilizzando una tecnica come "Fast Set Operations Using Treaps".
- Essere "incorporato" - ovvero, operare senza che io debba effettuare il
fork
un altro processo, o almeno fornire un'interfaccia semplice per farlo (come libmysqld).
Solutions ho presi in considerazione comprendono:
- Lime piatte. Questo è estremamente semplice, ma non fornisce alcuna funzionalità oltre alla memorizzazione di dati flat.
- SQlite. Questa sembra essere un'opzione molto popolare, ma sembra avere alcuni problemi relativi alle prestazioni e alla concorrenza (vedere KDE's Akonadi, per alcuni problemi di esempio).
- MySQL/MariaDB incorporato. Questa sembra essere un'opzione ragionevole, ma potrebbe anche essere un po 'pesante considerando che non avrò bisogno di molte complicate funzionalità SQL.
Una soluzione ipotetica che penso sarebbe perfetta sarebbe qualcosa come Redis, ma che persiste i dati sul disco e memorizza solo una parte dei dati in memoria per rendere veloce il recupero. Redis potrebbe non essere una buona opzione perché 1) Avrei bisogno di fork
manualmente, 2) la sua porta di Windows sembra meno solida e 3) la memorizzazione di tutti i dei miei dati nella RAM sarebbe meno ideale.
Esistono altre soluzioni per questo tipo di problema oppure è una delle soluzioni che ho già elencato meglio rispetto alle altre?
* La serializzazione della transazione basata su mutex in Akonadi (richiesta perché il supporto di SQlite della concorrenza potrebbe non essere sufficiente) può bloccare i client mentre le operazioni in background come la sincronizzazione IMAP sono in corso. * Huh? Perché * heck * sono persone che eseguono la sincronizzazione IMAP (qualunque cosa significhi) mentre hanno un blocco sul loro database e chiamano in * un problema SQLite *? –
Sai, i benchmark sul sito di SQlite sembrano contraddire totalmente quello che KDE ha detto a riguardo, e il fatto che Akonadi sia terribile non mi sorprende del tutto. Forse SQlite merita sicuramente ulteriori indagini. – CmdrMoozy
SQlite è utilizzato ovunque dal tuo browser ai server di produzione in grado di gestire migliaia di utenti (è stato lì, fatto quello, ha ottenuto la maglietta). Non è un problema di prestazioni. –