2010-02-18 12 views
5

Tengo una aplicación WCF que actualmente utiliza el almacenamiento de archivos basado en XML para almacenar datos que se utilizan para generar informes. Además de este proceso, las decisiones se toman en base a la información almacenada en estos archivos XML.¿Alguna consideración antes de saltar a SQLite?

Ahora estoy alcanzando volúmenes de alrededor de 30 000 archivos de texto. Esto es increíblemente agotador, y la aplicación a veces se detiene.

Siempre he querido cambiar XML DAL a favor de un RDBMS, pero los gerentes de proyecto simplemente no lo permitirán. Pero estarían dispuestos a ver una solución sin servidor, por ejemplo, SQLLite. Estoy realmente tentado de sumergirme y comenzar a usarlo como un DAL de reemplazo (Data Access Layer).

No necesitaría más de 20 tablas en toda la solución, y esperaría obtener no más de alrededor de 20 000 - 100 000 transacciones por día, sin embargo, esto es extremo, los volúmenes reales serían menores que este en la mayoría de los casos.

actualización

No estoy esperando una gran cantidad de conexiones simultáneas, cuando digo transacciones, que en esencia significa 1 o 2 clientes que realizan llamadas y ejecutar contra la base de datos en orden. En ocasiones puede haber una posibilidad de que los clientes externos realicen llamadas rápidas al DB. Pero la mayor parte de las conexiones de bases de datos se realizarán por mi servicio WCF, que es una tarea programada de respaldo, que no atiende a 100 personas en una organización.

Otro buen punto es que solo necesito retener los datos durante 90 días, por lo que la base de datos no debería crecer demasiado.

Mis principales preocupaciones son:

¿Qué tan confiable es SQLLite? ¿Qué sucede si el archivo de base de datos se corrompe, perderá todos los datos de procesamiento? ¿Qué tan fácil es la base de datos para hacer una copia de seguridad? ¿Manejará mis volúmenes? Y, por último, qué tan bien funciona el proveedor de .net (ubicado aquí: http://sourceforge.net/projects/sqlite-dotnet2/).

Si tiene alguna experiencia con SQLLite, publique sus experiencias para que pueda tomar una decisión informada de cambiar o no.

Gracias de antemano ...

Respuesta

1

Teniendo en cuenta su volumen de transacciones Yo diría que el hecho de que la propia base de datos es un archivo monolítico individual con sistema de bloqueo de archivos sólo disponible podría ser un problema.

No hay ningún bloqueo basado en filas hasta donde yo sé.

+0

Permítanme reformular mi pregunta. –

+0

Correcto, sqlite no maneja múltiples usuarios que intentan acceder a él simultáneamente, pero siempre que sea simplemente un almacén de datos monolítico utilizado por una aplicación a la vez, funciona muy bien. – Karl

+0

@Karl, maneja el acceso simultáneo por diferentes procesos, incluso desde diferentes sistemas, y admite transacciones, que es la mejor manera de administrar el bloqueo. Cumple con ACID. Sin embargo, dado que toda la base de datos está contenida en un archivo y se bloquea en el nivel de archivo, los lectores bloquean las escrituras pendientes y el bloque de escrituras hasta que terminan las lecturas. –

3

Podría considerar la edición Sql Compact de Microsoft.
Es como sqlite, en términos de ser una base de datos incrustada de un solo archivo, pero tiene una mejor integración con el .NET Framework :)
SQLite parece confiable, e incluso con Microsoft, no espere recibir mucho soporte en caso de una base de datos corrupta.

+0

Sqlite funciona muy bien, pero definitivamente tuve problemas para que funcionara bien con la interfaz de objetos de datos activos del estudio visual, por lo que mientras estés en tierra firme, tal vez MS Sql Compact sea una mejor opción. – Karl

5

SQLite es tan confiable como su sistema operativo y hardware.

Su velocidad de transacción es similar a SQL Server, y a menudo más rápido porque está todo en proceso.

El proveedor .NET ADO funciona muy bien.

Para realizar una copia de seguridad de la base de datos, detenga el servicio y copie el archivo. Si el archivo de diario está presente, cópielo también.

EDITAR: SQLite usa UTF-8 de forma predeterminada, por lo que con el proveedor ADO-NET debe poder evitar perder acentos (siempre que siga el XML típico en las reglas de cadena).

+0

También es seguro hacer una copia de seguridad de la base de datos cuando tiene una transacción exclusiva sin detener el servicio: su transacción exclusiva asegura que nada más está tocando el archivo db. Además, la versión 3.6.11 agregó una API de respaldo en vivo directamente dentro del motor central (no sé si los wrappers .NET exponen esto todavía, pero si no fuera fácil de agregar). –

1

Utilicé SQLite con el proveedor .Net sin problemas en un entorno monouser, a excepción de una preocupación: los acentos, que no se muestran correctamente. La copia de seguridad es bastante simple: la base de datos SQLite es un archivo de texto sin formato. Simplemente cópialo.

+0

¿Qué son los acentos? Nunca he escuchado de ellos. –

+0

"acentos" en español, supongo: algo como esto – Apocatastasis

+0

Ok, entonces tendré un problema porque la solución que estoy usando es para clientes checos que no usan un conjunto de caracteres en inglés. –

1

Uso Sqlite para almacenar datos de configuración XML y no he tenido problemas con él. Uso el proveedor System.Data.Sqlite: http://sqlite.phxsoftware.com/. Es sólido y tiene un buen foro de soporte. También incluye un proveedor de LINQ. También se integra con VS 2008 para que pueda usar Server Explorer para consultar tablas. Los ejemplos y la documentación también muestran cómo usar comandos y transacciones parametrizadas para aumentar el rendimiento.

La versión candidata para LinqPad ahora es compatible con Sqlite: http://www.linqpad.net/Beta.aspx.

Sqlite almacena todo en un solo archivo, que se puede respaldar como cualquier otro archivo binario.

Sqlite solo admite el bloqueo de nivel de archivo, pero no debe presentar un problema de rendimiento, ya que no parece que tenga una gran cantidad de transacciones simultáneas.

Unicode no debería ser un problema. Este enlace en el foro aborda un área donde alguien intentaba leer caracteres Unicode con una utilidad incompatible http://sqlite.phxsoftware.com/forums/t/954.aspx.

Este sitio muestra cómo hacer comparaciones UTF8 con mayúsculas y minúsculas utilizando System.Data.Sqlite mediante un clasificador personalizado, con caracteres rusos como ejemplo: http://www.codeproject.com/KB/database/SQLiteUTF8CIComparison.aspx.

Cuestiones relacionadas