Bases de datos no relacionales para C ++

Estaba pensando en comenzar un proyecto que claramente necesita una tienda persistente. Estaba a punto de decidir a regañadientes un RDBMS, cuando encontré un artículo que menciona brevemente a CouchDB. Parece que se han producido algunos avances en la tecnología DB desde la última vez que miré, así que pensé que preguntaría aquí sobre las bases de datos antes de acceder a ellas.

Aquí están mis criterios. (Al final, enumero los criterios, así que si desea omitir las explicaciones, simplemente desplácese hacia abajo).

El proyecto es de código abierto y no le pediré nada, así que preferiblemente la base de datos es de código abierto y gratuita. Además, el software debe ejecutarse tanto en Linux como en Windows.

Hay partes del proyecto que tienen que estar en C ++. El proyecto no tiene el código suficiente para justificar el uso de un segundo idioma. Así que básicamente todo será C ++.

Este proyecto no tendrá nada que ver con la web, por lo que preferiblemente la base de datos no requerirá los detritos de una biblioteca web.

Los objetos que quiero almacenar se dividen en una de dos categorías: un objeto básico y un objeto contenedor. La diferencia es que los objetos que son contenedores contendrán incluso más objetos, es decir: un problema de partes de partes. Necesito una base de datos que pueda manejar estos casos de manera limpia y eficiente.

También espero que el esquema evolucione rápidamente, al menos inicialmente. También sospecho que algunos de los datos antiguos simplemente no encajarán en los nuevos esquemas. Así que me gustaría mantener diferentes versiones del esquema alrededor. Ganar posible, me gustaría poder transformar los datos en uno a esquema en otro esquema.

Para que la aplicación funcione de la manera prevista, las personas tendrían que intercambiar grandes partes de la base de datos entre sí. Así que me gustaría formas sencillas de importar y exportar datos, que podría automatizar hasta cierto punto.

Finalmente, sería bueno si la base de datos pudiera simularse de alguna manera en pruebas unitarias.

Esos son mis requisitos. Los he replicado a continuación para que sea más fácil para las personas que responden.

Gracias

Requisitos no técnicos 1. De código abierto preferiblemente gratis. 2. Ejecutar en Windows y Linux

Tiene una interfaz de C ++.Es capaz de manejar una aplicación no web, preferiblemente sin REST.Puede manejar un problema de "partes de partes" bastante bien.Puede manejar múltiples índices.Tiene una especie de concepto de versión de esquema, puede manejar múltiples versiones de esquema y puede migrar tablas de un esquema a otro.Debería tener un mecanismo simple para mover datos de una instancia de la base de datos a otra.Preferiblemente tiene algún mecanismo para probar.

Respuestas a la pregunta(2)

Su respuesta a la pregunta