2009-12-06 16 views
6

He escrito una aplicación de escritorio de Windows que funciona muy bien con Sqlite. Era una aplicación para un solo usuario, y la base de datos se encuentra directamente en la máquina donde se ejecuta la aplicación.Solución simple de base de datos multiusuario

Sin embargo, la aplicación ha crecido, y ahora varios usuarios debe ser capaz de ejecutar la aplicación y conectarse a una base de datos compartida.

Me gustaría simplemente poder compartir el archivo sqlite en una unidad de red, pero eso obviamente daría como resultado datos dañados a menos que alguien tenga alguna idea.

Supongo que podría requerir la instalación de un servidor de base de datos, pero una licencia comercial de MySQL no tiene sentido, PostgreSQL es lo suficientemente diferente como para tener que volver a escribir una gran cantidad de mi aplicación. No he trabajado con Firebird en absoluto, así que no estoy seguro si esa es una buena solución o no.

¿Hay algún servidor de base de datos Sqlite que se pueda instalar que maneje las transacciones entrantes en el archivo de base de datos Sqlite?

Si requiero el cliente para descargar e instalar MySQL en su propia, ¿tengo que tener una licencia comercial?

Cualquier sugerencia o dirección sería genial, gracias.

+0

¿por qué se mueve a PostgreSQL causa volver a escribir una gran cantidad de su aplicación, pero MySQL no lo haría? – warren

+0

Basada en experimentos pasados ​​con Postgresql. Pero tomar otra mirada probablemente no duela, han pasado algunos años. –

+3

Una actualización, le di otro intento a Postgresql, y de hecho estoy teniendo mucho éxito. –

Respuesta

5

¿Qué hay de SQL Server Express, es gratis y debe dejar de tener que volver a escribir la mayor parte de su código,

+0

Para votar abajo, por favor deje un comentario ¿por qué esta no es una buena respuesta? – Rippo

2

No sé por qué se supone que el archivo de datos se corrompe si lo pones en una unidad de red y permite que varias instancias de tu aplicación accedan a ella al mismo tiempo. Si haces principalmente lectura, deberías estar bien. Si realiza muchas escrituras, es probable que sufra un golpe de rendimiento, ya que solo una instancia puede escribir al mismo tiempo. (Consulte http://www.sqlite.org/faq.html)

Si realiza muchas escrituras, probablemente necesite una instalación de servidor independiente: ¿ha considerado MS SQL Server Express? Debería ser fácil y simple de poner en funcionamiento.

+0

El foro Sqlite dice que si está en un sistema de archivos FNS, no podrá bloquearse. ¿Es cierto que Windows nos comparte SMB y no NFS, por lo que no es probable que haya un problema? Me preocupa tener que escribir el código en cada búsqueda para hacer un bucle si el archivo está bloqueado. –

8

Es posible que pueda utilizar el archivo de SQLite desde una unidad de red compartida como usted describió, dependiendo del sistema de archivos subyacente:

http://www.sqlite.org/faq.html#q5

procesos múltiples pueden tener la misma base de datos abierto en la parte Mismo tiempo. Múltiples procesos pueden estar haciendo un SELECCION al mismo tiempo. Sin embargo, solo un proceso puede realizar cambios en la base de datos en cualquier momento, .

SQLite utiliza bloqueos de lector/escritor para controlar el acceso a la base de datos. (Bajo Win95/98/ME, que carece de soporte para cerraduras lector/escritor, un probabilístico simulación se utiliza en su lugar.) Pero el uso precaución: este mecanismo de bloqueo podría no funcionar correctamente si el archivo de base de datos se mantiene en un NFS sistema de archivos Esto se debe a que el bloqueo de archivos fcntl() está roto en muchas implementaciones de NFS. Debe evitar poner archivos de base de datos SQLite en NFS si varios procesos pueden intentar acceder al archivo al mismo tiempo.En Windows, la documentación de Microsoft dice que bloqueo puede no funcionar en sistemas de archivos FAT si no está ejecutando el daemon Share.exe. Las personas que tienen una gran cantidad de la experiencia con Windows Me dicen que archivo de bloqueo de archivos de red es muy buggy y no es confiable. Si lo que dicen es cierto, compartir una base de datos SQLite entre dos o más máquinas Windows podría causar problemas inesperados .

+1

La página [Cuándo usar] (http://www.sqlite.org/whentouse.html) desaconseja el uso de SQLite directamente a través de una red cuando hay múltiples usuarios/clientes. Establece que "una buena regla general es que evite el uso de SQLite en situaciones donde se accederá simultáneamente a la misma base de datos desde muchas computadoras a través de un sistema de archivos de red". –

4

creo que Firebird puede ser una muy buena opción

  • Es existe libre
  • versión incrustada
+0

Pasé una gran cantidad de tiempo tratando de hacer que Firebird trabajara con mi aplicación, pero terminé encontrando errores en cada paso. Tuve que ir a las preguntas frecuentes unas 5 veces solo para ver por qué no podía crear una tabla porque cada vez que cambiaba algo de las preguntas frecuentes, obtenía un nuevo error, tenía que volver atrás, cambiar algo y luego otro error. Mayormente basado en permisos. No creo que quiera pasar por estas frustraciones con cada cliente que intenta instalarlo. –

+0

No conozco su problema con el permiso, pero si necesita algunas buenas herramientas de GUI, puede usar www.upscene.com o www.ibexpert.com (ambas tienen versión gratuita) –

0

Demasiado tarde sé, pero nadie en estos días debe tener una necesidad de escribir una aplicación sin un marco que ofrece la abstracción de base de datos.

Personalmente utilizo Web2py que es un marco basado en Web pitón. Por defecto usa SQLite, que es ideal para aplicaciones de usuario único en el escritorio local o aplicaciones pequeñas a medianas en la red local, que son principalmente operaciones de lectura. Sin embargo, si decidiera aumentar el alcance del uso de la aplicación, simplemente cambiaría la cadena de conexión en la base de datos modal para usar otra base de datos. Web2py o cualquier otro marco que valga la pena usar, simplemente reescribiría las declaraciones SQL para cumplir con los nuevos requisitos.

0

uso este código en la cadena de conexión después de que múltiples usuarios pueden insertar, eliminar, seleccione e.t.c. en su base de datos sin problema.

SQLiteConnection con = new SQLiteConnection ("Data Source = D: \ yourdatabase.db; Count Changes = desactivado; Journal Mode = desactivado; Pooling = true; Cache Size = 10000; Page Size = 4096; Synchronous = off") ;

0

Si requiero el cliente para descargar e instalar MySQL en su propia, ¿tengo que tener una licencia comercial?

El valor de uso comercial de MySQL es que le permite distribuir MySQL estándar o un MySQL modificado en forma binaria sin la oblihation para distribuir también el código fuente. También le da acceso a soporte.

Sin embargo, si el usuario obtiene MySQL de Oracle, la GPL no le obliga a proporcionar el código fuente de MySQL. Pueden obtenerlo de Oracle. De hecho, Oracle está obligado a proporcionarlo, siempre que se distribuyan bajo la GPL.

Cuestiones relacionadas