2009-05-03 18 views
16

Estoy desarrollando una aplicación que necesita almacenar datos con muchas escrituras y lecturas que requieren una búsqueda rápida de datos (la necesidad de índices de algún tipo), y también ser capaz de serializar y guardar los datos.SQLite Alternatives for C++

Actualmente estoy pensando en usar SQLite, que hace el trabajo, pero estoy abierto a otras alternativas. La sintaxis del SQLite realmente no encaja elegantemente en el código C++ (por ejemplo, estoy forzado a acceder a los resultados por números de índice de columnas en lugar de nombres de columnas, etc.).

+2

¿Qué tienen que ver los nombres de índice de columna con si "se ajusta elegantemente al código de C++"? – jalf

+0

Posible duplicado: [Qué es un buen contenedor OO C++ para sqlite] (http://stackoverflow.com/questions/120295/what-is-a-good-oo-c-wrapper-for-sqlite) – iammilind

Respuesta

21

Quédese con SQLite pero encuentre una buena biblioteca de C++ para esto.

Este StackOverflow question debería ayudar ...

+15

el enlace está roto . – ggg

+0

En caso de que alguien esté interesado en la pregunta original de desbordamiento de pila vinculada, [aquí está la copia de archive.org] (https://web.archive.org/web/20131105070032/http://stackoverflow.com/questions/120295/ what-is-a-good-oo-c-wrapper-for-sqlite). – evotopid

6

Parece que una base de datos es la única opción real para usted. Si elige SQLite o MySql o Postgres realmente no importa en el punto del índice de la columna, sin embargo.

Tal vez lo que realmente quieres es una mejor abstracción de la base de datos. Es posible que desee probar Poco, tiene una excelente: http://pocoproject.org/

1

¿podría sugerir que tome una lista de la wrapper APIs aparece en el sitio SQLite? Hay muchos idiomas para eso, incluyendo C++. Sqlite Plus se ve particularmente bien. POCO, que 'usualmente no se menciona', también se ve bien.

1

Si la sintaxis de SQL no es importante para ti, recomiendo MetaKit - Es un enfoque ligeramente diferente pero bastante poderoso y conozco personalmente más de unos pocos proyectos comerciales que lo usan con éxito, incluso en sistemas integrados.

This Tutoria l es bastante útil para empezar.

+0

Hmmm ... el desarrollo parece haberse tambaleado hace un par de años. –

+0

Correcto, pero todavía se usa mucho, es estable y útil. La licencia de código abierto está basada en MIT, por lo que le permite modificar y hacer que sus modificaciones sean de código cerrado. – jdkoftinoff

8

Argumentaría que la dependencia añadida en una biblioteca contenedora no compensa el costo de tener que lidiar con los costos de esa dependencia adicional. No querrá estar atascado al depurar estas librerías de envoltura cuando la documentación para ellas sea escasa. SQLLite seguramente será más estable y tendrá una mejor documentación y, por lo tanto, una dependencia más confiable.

Me gustaría tratar con sqllite o envolverlo usted mismo de una manera inteligente en función de su aplicación final.

+5

Esto suena razonable, pero sugiere que todas las bibliotecas contenedoras son automáticamente redundantes. Si necesita mantenimiento en el futuro, es posible que tenga menos trabajo que hacer si está utilizando una biblioteca de comunidad (de código abierto) ampliamente aceptada. – joeytwiddle

0

En lugar de una derivada sql, puede pensar en utilizar una biblioteca IR de índice invertido como Lucene (o uno de los muchos clones que hay). Sé que Lucene es Java, pero podría escribir una biblioteca administrada de C++ para interoperar con Lecene.Net.

En cuanto a la velocidad, estoy muy contento con el rendimiento de Lucene para sus lecturas. No está tan optimizado para sus escrituras, pero sigue siendo bastante bueno, siempre y cuando no intente construir un índice de millones de "documentos".

0

Si no está trabajando en Windows, puede buscar en el gabinete de Tokio. Parece ser bastante bueno. Estoy esperando el puerto Win32, por lo que no puedo decir mucho al respecto, aparte de que el rendimiento parece ser impresionante.

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

Esto no es un derivado de SQL. Es una tienda basada en b-tree/hash recta. Esto es muy bienvenido, en mi opinión. La única biblioteca competitiva de la que tengo conocimiento es Berkeley DB, que tiene licencias menos que deseables.

4

Berkeley DB aka SleepyCat. Si buscas en los archivos, hay un artículo de Mike Olsen que habla sobre las principales desventajas de SQL en cualquier proyecto.Hay otro artículo de seguimiento en el último año que sugiere que SQL está en camino porque las capas de ORM están mejorando mucho.

+2

Tenga cuidado con la licencia, es más estricta que la GPLv2: http://www.opensource.org/licenses/sleepycat.php: "Las redistribuciones de cualquier forma deben ir acompañadas de información sobre cómo obtener una fuente completa código para el software DB y cualquier software complementario que use el software DB. " – jdkoftinoff

+0

según wikipedia, la licencia sleepycat está aprobada por OSI. Eso es lo suficientemente bueno para mí. – Richard

+2

Sí, siempre que no desee crear un programa comercial de código cerrado que lo use ... – jdkoftinoff

1

Estoy de acuerdo, es falso decir que SQLite es incompatible con la indexación de nombres de C++ o C++ Hay muchos contenedores C++ SQLite que fomentan el acceso a columnas por nombre. SQLite++ es solo uno de muchos.

+0

Pero SQLite ++ es una biblioteca paga y no quiere gastar dinero en simplemente comprar una biblioteca contenedora. –

+0

@PriteshAcharya, no lo he analizado en detalle, pero dice: "SQLite ++ ahora es GRATIS para usar el código fuente, sin restricciones". –

2

Si me preguntas quédate con SQLite y "hazlo tú solo", el ajuste es bastante simple. Hice varias envolturas sobre SQLite. ¿Por qué? Debido a que su API es mucho más amigable que cualquier otra base de datos relacionada y no necesita gastar mucho esfuerzo. Con una biblioteca contenedora solo agregará más elementos desconocidos y, lo más importante, la mayoría de los contenedores no están especialmente dedicados a servir bases de datos integradas. Siempre repito que con la base de datos integrada el camino correcto es muy diferente del enfoque óptimo para un servidor de base de datos ...