.net - usar - nosql vs sql
Almacén de datos no relacionales incrustados(nosql) (8)
¿Podrías crear una base de datos sqlite simple con dos columnas?
==documents==
id|data
y los datos serían datos json.
También puede crear una tabla de claves que sería:
==keys==
keyname|keyvalue|id
eso se indexaría en nombre de clave y valor de clave para búsquedas rápidas.
Un solo archivo db podría ser una colección, y usted podría crear múltiples archivos db para múltiples colecciones.
Podría usar las carpetas como "dbs" para hacer coincidir la jerarquía de mongodb de db-> collection-> document
Estoy pensando en usar / implementar algún tipo de almacén de valor-clave (o documento) incorporado para mi aplicación de escritorio de Windows. Quiero poder almacenar varios tipos de datos (las pistas de GPS serían un ejemplo) y, por supuesto, poder consultar estos datos. La cantidad de datos sería tal que no se podrían cargar todos en la memoria al mismo tiempo.
Estoy pensando en usar sqlite como un motor de almacenamiento para un almacén de valor clave, algo así como y-serial , pero escrito en .NET. También he leído sobre el uso de MySQL de FriendFeed para almacenar datos sin esquema , que es un buen indicador de cómo usar RDBMS para datos no relacionales. sqlite parece ser una buena opción debido a su simplicidad, portabilidad y tamaño de biblioteca.
Mi pregunta es si existen otras opciones para una tienda no relacional integrada. No necesita ser distribuible y no tiene que admitir transacciones, pero tiene que ser accesible desde .NET y debe tener un tamaño de descarga pequeño.
ACTUALIZACIÓN: He encontrado un artículo titulado SQLite como una base de datos de valores-clave que compara sqlite con Berkeley DB, que es una biblioteca incrustada de valor-clave.
Aplicando el principio KISS a su problema, le recomendaría que utilice archivos.
Como en nombre de archivo es la clave. El contenido del archivo es el valor. Carpeta de Windows es el índice.
Sencillo, rápido, eficiente, flexible e infalible (siempre que los tontos tengan poca inteligencia).
Echa un vistazo a RavenDB . Parece que se puede incrustar y no tiene esquemas y funciona con .NET
Desde el sitio web:
- Infraestructura escalable: Raven se basa en una infraestructura existente, probada y escalable
- Configuración simple de Windows: Raven es fácil de configurar y ejecutar en Windows como servicio o como sitio web de IIS7
- Transaccional: Raven admite System.Transaction con transacciones ACID. Si pones datos en ellos, esos datos se quedarán allí.
- Mapa / Reducir: defina fácilmente el mapa / reduzca los índices con consultas Linq
- API de cliente .NET: Raven viene con una API de cliente .NET totalmente funcional que implementa Unit of Work y mucho más
- RESTful: Raven se basa en una API RESTful
Esta es una pregunta antigua, pero pensé que agregaría una respuesta en caso de que alguien se tropiece con ella. Mi compañía acaba de lanzar una base de datos XML integrada de código abierto para la plataforma .NET llamada Nxdb. Está bajo la licencia Apache 2.0 y ha estado en desarrollo y uso interno durante varios años. Básicamente, es un enlace a una versión compilada (usando IKVM) de BaseX (una fantástica base de datos XML de Java) junto con una funcionalidad adicional para el caso de uso incorporado y el entorno .NET. La página del proyecto está aquí: https://dracorp.assembla.com/spaces/nxdb
XML funciona bien para este tipo de almacén de datos, dado que siempre que el contenido que intenta almacenar sea serializable a texto, puede almacenar árboles jerárquicos complejos. De hecho, si accede directamente a la base de datos, ni siquiera tendrá que tocar "XML". También se puede consultar con XQuery, un lenguaje de consulta potente y completo.
Gracias por su amable mención de y_serial ... más precisamente, es un módulo de Python:
Almacenar objetos de Python con SQLite.
"Serialización + persistencia :: en unas pocas líneas de código, comprima y anote los objetos de Python en SQLite; luego, recupérelos cronológicamente mediante palabras clave sin ningún tipo de SQL. El módulo" estándar "más útil para que una base de datos almacene datos sin esquema".
En mi experiencia, SQLite es una opción más rápida y confiable que la mayoría de las bases de datos (incluidas PostgresQL y Berkeley DB) para la mayoría de los proyectos, y por supuesto, no necesita un daemon de servidor.
yserial es muy fácil de implementar (y mucho más rápido que el "nombre de archivo es la clave / contenido del archivo es el valor" ;-)
Personalmente iría para SQLite con NHibernate (y Fluent NHibernate). NHibernate puede generar el esquema de base de datos automáticamente para sus clases, por lo que solo necesita especificar qué clases desea conservar, y eso es bastante fácil con Fluent NHibernate. Además, puede buscar objetos específicos y no necesita cargar todos los datos en la memoria.
Puede probar este https://github.com/mdsoftware/mData . Pequeño, gratis y bastante inusual. Lenguaje de consulta de datos similar a Lisp, compilador de expresiones, serialización binaria de alto rendimiento, todo incluido.
Windows tiene una tienda integrada no relacional integrada. Se llama ESENT y es usado por varias aplicaciones de Windows, incluyendo Active Directory y Windows Desktop Search.
Si desea acceder a .NET, puede usar la capa ManagedEsent en CodePlex.
http://managedesent.codeplex.com/
Ese proyecto tiene una clase PersistentDictionary que implementa un almacén de valor-clave que implementa la interfaz IDictionary, pero está respaldado por una base de datos.