Base de datos SQL mínima C #

12

Estoy trabajando en un proyecto pequeño (no de producción) donde necesito almacenar suficientes datos para que algo como un CSV sea ineficiente de procesar y un servidor SQL / MySQL sea demasiado. ¿Tiene .Net alguna forma de almacenar eficientemente varias entradas de datos con la capacidad de consultar sin tener que administrar y conectarse a un servidor en lugar de cargar y procesar un solo archivo?

David
fuente
Si ya tiene un servidor de base de datos en funcionamiento haciendo otra base de datos, es bastante trivial. Si solo está utilizando los datos, tal vez podría considerar Access.
Brad
@Brad, este es solo un proyecto personal y actualmente no ejecuto ningún servidor de bases de datos en mi casa. Su sugerencia de acceso puede ser exactamente lo que estoy buscando.
David
44
No soy fanático de Access , pero a veces le concederé la solución correcta. ¿Has considerado la serialización de objetos ? Simplemente cree un objeto y escríbalo en un archivo. (El objeto podría ser a List<foo>)
Dan Pichelman
¿Desea que estos persistan o solo necesitan estar en la memoria?
Richard
1
@David: 4000 entradas, ¿tan pocas? ¿Por qué no mantenerlos a todos en la memoria? Si solo necesita una base de datos en memoria para realizar algunas consultas, sin ninguna herramienta administrativa, un conjunto de datos con alguna tabla de datos (persistente en un archivo) puede ser suficiente para sus necesidades.
Doc Brown

Respuestas:

15

Hay algunas alternativas, sin ningún orden en particular:

  1. Todas las versiones de Visual Studio (¿pago?) Vienen con SQL Server Express instalado . Puedes usar eso.
  2. (Ugh) archivos XML
  3. SQL Server CE (básicamente, SQL local vía archivo)
  4. SQLite

Más ideas aquí: /programming/3639846/what-is-a-good-embedded-database-to-use-with-c

Sklivvz
fuente
Realmente quiero algo que sea totalmente autónomo en un solo ejecutable, sin DLL y sin software de terceros. ¿Alguno de los anteriores, excepto XML, puede satisfacer estas necesidades?
David
Puede incrustar los dlls en su ejecutable tal vez.
Sklivvz
Bueno, creo que la parte más importante es que ningún tercero * servicios como MSSQL / MySQL haría # 3 o # 4 ajuste que
David
No recuerdo si SQL CE tiene un tiempo de ejecución separado o no. SQLite no lo hace, pero puede ser un poco complicado de configurar con un proyecto .NET.
GalacticCowboy
3
Yo agregaría que LocalDB es una opción. Vea esta respuesta: stackoverflow.com/questions/9655362/…
Andy
4

Además de las opciones que ofrece Sklivvz , no tenga miedo de aventurarse fuera del ámbito SQL y utilizar un motor de base de datos orientado a objetos incrustado, como Sterling o DB4O .

Ofrecen las ventajas de ser pequeño y basado en archivos, integrable en su aplicación, pero también son muy rápidos y fáciles de programar.

Eric King
fuente
3

SQLite sería tu mejor opción.
Como está escrito en su sitio:

SQLite es una biblioteca de software que implementa un motor de base de datos SQL transaccional autónomo, sin servidor, de configuración cero.

¡Parece realmente lo que estás buscando!

¡Incluso hay un paquete de Chocolatey si eres demasiado vago para descargarlo e instalarlo tú mismo!

MaxSC
fuente
2

ADO.NET puede serializar a XML y tiene casi toda la funcionalidad de un RDBMS. (Bueno, los baratos, de todos modos).

Sé que es "Viejo" y menospreciado, ahora, pero ADO.NET funciona muy bien exactamente para lo que estás describiendo. Incluso hace un trabajo bastante decente al rastrear los cambios no comprometidos.

Puede ser "viejo", pero ciertamente no es "reventado". Sin embargo, tiene una huella de memoria bastante pesada, así que su llamada al respecto. 4000 registros no serán un problema.

Wesley Long
fuente
¿Podría elaborar sobre "huella de memoria pesada"?
David
@David: significa que la totalidad del conjunto de datos se mantendría en la memoria, y no solo los registros que devuelve de una consulta. Si tuviera una base de datos de 4 millones de registros, mantenerlo todo en un conjunto de datos ADO.NET sería una gran atracción de recursos, mientras que un RDBMS "real" lo mantendría en un disco hasta que consulte un subconjunto de ellos. 4000 registros es un pequeño estornudo en el uso de la memoria, por lo que no me preocuparía.
Wesley Long
+1, creo que esta es la mejor opción, para estos requisitos, incluso algo pequeño como SQLlite parece ser un gran esfuerzo.
Doc Brown