Domanda

Sto sviluppando un'applicazione che deve archiviare dati con molte scritture e letture in quanto richiede una rapida ricerca dei dati (la necessità di indici di qualche tipo), e di essere anche in grado di serializzare e salvare i dati.

Attualmente sto pensando di usare SQLite, che fa il lavoro, ma sono aperto per alternative. La sintassi di SQLite non si adatta in modo elegante al codice C ++ (ad esempio sono costretto ad accedere ai risultati tramite i numeri di indice delle colonne anziché i nomi delle colonne, ecc.).

È stato utile?

Soluzione

Resta con SQLite ma trova una buona libreria C ++ per questo.

Questa Domanda StackOverflow dovrebbe aiutarti. ..

Altri suggerimenti

Direi che la dipendenza aggiunta da una libreria wrapper non vale il costo di dover affrontare i costi di quella dipendenza aggiuntiva. Non vuoi essere bloccato durante il debug di queste librerie wrapper quando la documentazione per loro potrebbe essere scarsa. SQLLite è destinata a essere più stabile e ad avere una migliore documentazione e quindi una dipendenza più affidabile.

Mi occuperei di sqllite o lo avvolgo da solo in un modo intelligente basato sulla tua applicazione finale.

Sembra che un database sia l'unica vera opzione per te. Tuttavia, se hai scelto SQLite o MySql o Postgres non ha importanza nel punto indice della colonna.

Forse quello che vuoi davvero è una migliore astrazione del database. Potresti provare Poco, ce n'è uno fantastico: http://pocoproject.org/

Berkeley DB aka SleepyCat. Se cerchi negli archivi c'è un articolo di Mike Olsen che parla dei principali svantaggi di SQL in qualsiasi progetto. C'è un altro articolo di follow-up nell'ultimo anno che suggerisce che SQL è sulla buona strada perché i livelli ORM stanno migliorando molto.

Se mi chiedi di rimanere con SQLite e " fallo tu stesso " - il wrapping è abbastanza semplice ho fatto varie confezioni su SQLite da solo. Perché? Perché la sua API è molto più amichevole di qualsiasi altra cosa relativa al database e non è necessario impegnarsi molto. Con una libreria wrapper aggiungerai solo più sconosciuti e, soprattutto, la maggior parte dei wrapper non è particolarmente dedicata al servizio di database incorporati. Ripeto sempre che con il database incorporato il modo giusto è molto diverso dall'approccio ottimale per un server di database ...

Se la sintassi SQL non è importante per te, ti consiglio MetaKit - È leggermente diverso approccio ma è abbastanza potente e personalmente conosco più di alcuni progetti commerciali che lo utilizzano con successo, anche su sistemi embedded.

Questo Tutoria è abbastanza utile per iniziare.

Potrei suggerire di prendere un elenco delle API wrapper elencate sul sito Sqlite? Ce ne sono molti per molte lingue, incluso C ++. Sqlite Plus sembra particolarmente buono. POCO, che ha menzionato "di solito inutile", ha un bell'aspetto.

Sono d'accordo, è falso dire che SQLite è incompatibile con l'indicizzazione del nome di colonna o C ++ Ci sono molti wrapper di SQLite C ++ che incoraggiano l'accesso alle colonne per nome. SQLite ++ è solo uno dei tanti.

Invece di una derivata sql, potresti pensare di usare una libreria IR a indice invertito come Lucene (o uno dei tanti cloni là fuori). So che Lucene è Java, ma potresti scrivere una libreria C ++ gestita per interagire con Lecene.Net.

Per quanto riguarda la velocità, sono molto contento delle prestazioni di Lucene per le sue letture. Non è ottimizzato per le sue scritture, ma è ancora abbastanza buono, a condizione che tu non stia cercando di costruire un indice di milioni di "documenti".

Se non stai lavorando su Windows, potresti guardare al Gabinetto di Tokyo. Sembra essere abbastanza buono. Sto aspettando la porta Win32, quindi non posso dire molto a riguardo se non che le prestazioni sembrano impressionanti.

http: // anyall.org/blog/2009/04/performance-comparison-keyvalue-stores-for-language-model-counts/

Questo non è un derivato SQL. È un negozio basato su b-tree / hash. Questo è molto gradito, secondo me. L'unica biblioteca competitiva di cui sono a conoscenza è Berkeley DB, che ha licenze meno che desiderabili.

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