2010-07-31 15 views
7

Si esta pregunta le parece común, le pido disculpas, hice una búsqueda rápida en este sitio y en algunas búsquedas de Google, y no pude encontrar una respuesta satisfactoria.Almacenamiento de base de datos en disco, mejores prácticas

Mi pregunta es esta;

Hace solo 3-4 años que soy desarrollador de software. Esto puede parecer el tiempo suficiente para responder a esta pregunta, sin embargo, en todo mi tiempo, nunca tuve que desarrollar software donde no se requiera que el cuerpo principal de almacenamiento de datos esté en una base de datos en línea. Esta vez, sin embargo, mi último desarrollo solo requiere que sus datos se almacenen solo en el disco.

Los datos reales en sí son livianos. Dentro del código, el activo principal será una clase con solo unas pocas propiedades basadas en cadenas que deben conservarse. Mis pensamientos iniciales están en la serialización simple. En la aplicación, los activos nuevos cercanos simplemente se serializan y almacenan en el disco como un archivo. También pensé que quizás para fines de copia de seguridad (o si de alguna manera es una mejor opción para una clase serializada) sería apropiado un archivo XML.

No puedo pensar en ninguna desventaja clara de ninguno de estos enfoques, es este hecho el que me hace formular esta pregunta públicamente. En mi experiencia, rara vez hay una solución para un problema que no tiene sus desventajas.

Respuesta

3

La serialización (binaria o XML) es adecuada para una pequeña cantidad de datos. El problema con este enfoque es cuando obtiene grandes cantidades de datos (que puede necesitar consultar).

Si se encuentra en una plataforma de Windows y necesita una base de datos adecuada, puede usar el motor de base de datos incrustado que viene con windows - ESENT. Es la tienda de respaldo de Exchange y RavenDB.

Here son las bibliotecas .NET wrapper para él.

ManagedEsent proporciona acceso administrado a ESENT, el motor de base de datos incrustado nativo de Windows. ManagedEsent utiliza el esent.dll que es parte de Microsoft Windows, por lo que no hay binarios adicionales no administrados para descargar e instalar.

0

Otra opción de base de datos incrustada es Sql Server Compact Edition. La última versión de este is v4 y parece ser mucho mejor que las versiones anteriores.

Es funcionalmente equivalente a usar un archivo XML o una base de datos de acceso, o incluso un archivo de texto antiguo, en el que no necesita tener un servicio Sql Server ejecutándose o instalar algo especial en la máquina que su aplicación se ejecuta en.

1

La solución más ligera, por supuesto, es usar XML y serialización. La principal ventaja de esto es que es muy fácil, requiere poco código y es fácilmente editable usando un editor de texto. La otra ventaja de esto es poder tener múltiples archivos, y serán fáciles de transferir de PC a PC.

Aquí hay un bonito tutorial on XML serialization.

Sin embargo, si su aplicación va a leer, escribir y cambiar mucho los datos, y solo hay una fuente de datos, sería mejor usar una base de datos liviana. A muchas personas les gusta SQLite, mientras que personalmente prefiero Firebird.

Vea esto question for using SQLite with C#, y see here for information for using Firebird with .net.

0

He estado usando Sqlite en un proyecto y funciona muy bien y es fácil de usar también, una cosa para tener en cuenta al usar Sqlite es que está diseñado para ser utilizado en un entorno de usuario único, por lo que si que lo utilice como base de datos para el backend de un sitio web, por ejemplo, es muy probable que encuentre que va a luchar bajo el más mínimo de la carga ..

salida este enlace para el C# envoltorio: http://sqlite.phxsoftware.com/

También uso NHibernate y NHibernate.Linq para interactuar con los datos, puede obtener una compilación de ambos que son compatibles aquí: http://www.dennisdoomen.net/2009/07/nhibernate-210-ga-with-linq-and-fluent.html

NHibernate.Linq le permite utilizar los bonita sintaxis de las consultas LINQ en su SQLite DB:

var = una sola pieza de s en session.Linq(), donde s.Name == "de una pieza" seleccione s;

Cuestiones relacionadas