![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#61
|
|||
|
|||
|
Aca en Saturo todo es al revez: hasta el menos sabio sabe que DOS cosas no pueden estar al mismo tiempo en un solo lugar, que todas la bases de datos, hasta las mas robustas, usan sistemas de locks y esperas.
En el planeta tierra, ni se diga, es como tumban los sitios ahi: con un tumulto de accesos. Y aunque los terricolas no lo sepan, o por discutir, se les olvida que "simultaneo" no quiere decir realmente "simultaneo", sino bastante rapido como para que PAREZCA "simultaneo". Las bases de datos tipo servidor usan muchos archivos, para "cachar" informacion mientras se libera el record o bloque donde tiene que hacerse la grabacion final. Muchas de sus base de datos se bloquean cuando no son de las mas robustas, y viven las esperas requeridas. SQLite es igual, o similar, bloquea por milisegundos, en transacciones tipicas, y usa archivos temporales escritos a disco o a memoria. Solo que es para uso LEVE en ese asunto. Y es por eso que se llama a si misma "lite", que quiere decir "ligera". En cuanto a encriptar a SQLite, hay como en casi todo hoy en dia, gratuito y a costo. Cual sirva o no sirva, no viene al caso sin tener como base la experiencia del haberlo verificado. Pero, en Saturno como el el planeta Tierra, la mayoria de las bases de datos no usan encriptamiento y toda data que no este encriptada, se puede leer. Alquien de este foro usa encriptacion en sus bases de datos? |
|
#62
|
||||
|
||||
|
Cita:
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#63
|
|||
|
|||
|
Explica, tu, como es, casimiro.
|
|
#64
|
|||
|
|||
|
Amigos del foro,
Les platico esto que les pueda ser de interes, en cuanto a el tema tratado en este hilo: Hice una prueba usando una aplciacion que desarrolle , que puede mandar a una base de datos SQLite3 un conjunto de renglones para cargar le bastante data en una transaccion. La data es real (la consegui del web) consiste de cargar 239 paises, o sea una tabla con 15 columnas y 239 renglones. Las columnas son codigo de pais,nombre de pais, continente, region, superficie, año de independencia, poblacion, vida promedio de habitantes, GNP, gnpANTERIOR, nombre local, tipo de gobierno, presidente o cabeza de estado, capital, codigo1, Codigo2. En total son 3,585 datos a cargar a cada tabla. Corri 2 instancias de la misma aplicacion, y a cada una la prepare para que mandara la misma data, CREANDO cada una tabla identica, pero con nombres Pais1 y la otra Pais2, a la misma base de datos, que ya cada instancia tenia abierta. Cada transaccion crea su tabla y la carga de datos. Puse los botones de mando de cada aplicacion pegaditos (usando always on top) a manera de que pude hacer click una aplicacion y la otra al instante. No recibi ningun mensaje de error, y casi ni lo creia, cuando vi que INSTANTANEAMENTE, se crearon en la MISMA base de datos DOS tablas, Pais1 y Pais2, identicas, cada una con 3585 datso reales cada tabla, que son 7,170 datos en total, contenidos en 239 renglones mult. por 2 = 478 renglones que cargo sin chistar. Esto debio de haber ocurrido en milisegundos, pues hasta parecio que no habia habido respuesta a los dos clicks practicamente simultaneos, mas rapido no podria haber picado los botones uno tras otro, pues estaban pegaditos. Si esto no es acceso concurrente, alguien tendria que tener base para negarlo. Ahora, comparen lo que se tardarian operadores terricolas tecleando esta informacion y mandandola para grabarla, a la base de datos. Tal vez unos cuatro capturistas tardarian un par de dias en hacerlo y no veo como SQLite no tuviese la capacidad de manejarlos a todos simultaneamente. Les aviso que soy pianista y puedo picar botones con mucha rapidez. De todas maneras, les recuerdo que nunca dije, ni diria, que SQlite sea mejor que otra, pero que es multiconcurrente y mltiusuario, con sus limitaciones, claro, sostengo que SI lo es. Bueno, hasta la vista. |
|
#65
|
||||
|
||||
|
No, eso no es acceso concurrente.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#66
|
||||
|
||||
|
Cita:
Yo entiendo tu defensa de SQLite, y también creo que el concepto de concurrencia es discutible, pero tampoco hay que exagerar y hacer ver a SQLite como uno de los grandes no Lite. // Saludos |
|
#67
|
||||
|
||||
|
Amigo ElMug, si quieres hagamos una prueba, a ver si sqlite la pasa con éxito:
En una tabla donde tengas ya registros, o creas una nueva, no importa que sea simple, ejemplo: En esa tabla inserta 100, 500, 1000 registros, los que quieras. El 'id' será la clave primaria, así que introduce 1,2,3,4,5,... 999,1000 El resto de campos, lo que te parezca, cualquier dato aleatorio. Ahora crea un programita sencillo en plan rápido que haga esto:
Pones 1 botón y ejecutas. No debe fallar. Ahora abres otra instancia del programita, vamos a simular 2 usuarios trabajando. Ejecutas y pruebas. Si no falla, puede ser que no falle si no coinciden en actualizar el mismo registro. Ahora abres otra instancia del programita, ahora serán 3 usuarios trabajando. Y así hasta que te aburras. A ver qué ocurre. Cuantos más registros tengas, menos posibilidades de que toquen el mismo registro al mismo tiempo. Cuantos menos registros tengas, más posibilidades de que seleccionen el mismo. Cuantos más usuarios al mismo tiempo, más posibilidades de que seleccionen el mismo. Es sólo algo didáctico, por probar. p.d. He puesto más o menos como debe ser el código, no tengo ningún delphi/lazarus para probar.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal Última edición por Casimiro Noteví fecha: 06-09-2012 a las 18:05:03. |
|
#68
|
||||
|
||||
|
Oye Casimiro, ¿y qué pasa en Firebird si hago esta misma prueba que propones? ¿Qué pasa si dos usuarios tocan el mismo registro al mismo tiempo?
// Saludos |
|
#69
|
|||
|
|||
|
No, no voy a hacer esa prueba que dices Casimiro, porque ya debes de saber que SQLite bloquea toda la base de datos por milisegundos requeridos para grabar.
La prueba que describo se debe de entender asi. Pero lo bello del SQLite3 es que es TAN RAPIDA que el tipico usuario en una aplicacion mediana, con datos tipicos de facturas, inventarios, altas, etc., no tiene problema en brindar multiusuario y escritos concurrentes. Cada aplicacion es "su propia maquinita" y se comunican unas a otras atravez de archivos temporales. Ahora, esto que les mencione brevemente, es tambien MUY IMPORTANTE para quien desea (ahi si) que haya mucha mas concurrencia permitida, es que SQLite puede conectarse con hasta 10 bases de datos, cada base de datos puede tenter un numero enorme de tablas, y cada tabla un numero enorme tambien de campos. Todos esos "enormes" son miles. Cuando conecta una aplicacion a varias bases de datos, TODAS las bases y sus tablas son accesibles a comandos SQL, como si fuera una sola base de datos. Entonces pues, ahi Usuario1 grabando datos en Base de datos 1, y Usuario 2 grabando en base de datos 2, no ven ni uno de los dos NINGUN lock. Quiere decir que para un negocio tipico, en el que una sola base de datos no fuera adecuada, se pueden repartir el archivo de escritos mas frecuentes en su propia basededatos, y los menos frecuentes en otra. Si hay mucho trafico, para otro tipo de archivo, se usa OTRA mas, base de datos. Todas esas bases de datos son relacionales, conforman a integridad referencial. Inclusive, tiene SQlite el sistema de "triggers" que son un equivalente a "stored procedures" que tambien se pueden considerar en cuanto a rendimiento. Lo que dije antes, no he logrado que se corrompa ni una sola de las bases de datos, a pesar que les he dado bastante duro. Lo que todos ustedes saben es que hay muchas tecnicas posibles para hacer las cosas mejor, o superar limitaciones, y con SQLite eso no es la excepcion. Pongo esto por lo que a alguien le pueda interesar o servir. Pero no hay nada mejor que cada quien buscar lo mas aproximado a lo cierto. Hasta luego. P.S. No vayan a salir conque repartir archivos es un truco o es algo inferior, pues les recuerdo que de hecho, ASI trabajan muchas bases de datos: usan un archivo para cada tabla, y ESO en gran parte es lo que les da mas concurrencia. Y esto es lo mismo aun en las bases de datos mas poderosas. Postgres, por ejemplo, asi lo hace. Claro que tienen mecanismos mucho mas avanzados para repartir el trabajo y la data. Última edición por ElMug fecha: 06-09-2012 a las 21:31:47. |
|
#70
|
||||
|
||||
|
Cita:
Si un usuario está editando un registro y otro usuario entra a editar el mismo registro, el último no ve los cambios que está haciendo el primero (mientras el primero no confirme los cambios), básicamente el último en escribir es lo que se mantiene En la práctica, usando transacciones con los parámetros: read_committed rec_version nowait Es prácticamente imposible que sucedan "deadlocks", es más, yo jamás los he visto. Mejor pego una explicación más técnica, no sé qué tal es la traducción: Cita:
Así que sqlite permite miles de campos, eso está bien. Amigo, no sé de dónde eres, pero por aquí decimos: "tú sigue en tus mundos de yupi" ![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#71
|
||||
|
||||
|
Aquí quería yo llegar
![]() Mi punto es: si no implementas algún tipo de control, por muy multigeneracional que sea, el último en guardar los cambios va a machacar los cambios de los demás. La aplicación puede optar por un bloqueo optimista y, por lo menos, avisar al último usuario que alguien ya hizo cambios. En estos términos, estamos igual que con motores no concurrentes: hay que tener un control sobre qué hacer cuando hay accesos simultáneos a la misma información. // Saludos |
|
#72
|
||||
|
||||
|
En ese aspecto es configurable para trabajar de la forma más adecuada a lo que necesite cada uno.
Cita:
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#73
|
|||
|
|||
|
Acceso multiconcurrente es que mas de un usuario pueda grabar en una base de datos, sin importar los mecanismos usados, y esto lo hace SQLite3 usando su Modulo Pager.
SQLite3 tambien usa dos copias de las transacciones y las usa para el roll-back y para controlar el uso simultaneo de escritos a una misma tabla. |
|
#74
|
|||
|
|||
|
Aqui para los que dicen que SQLite3 no es multiconcurrente, acabo de hacer otra prueba, aun mas extensa.
1. Misma base de datos anterior que contiene dos tablas: Pais y Pais1. La tabla Pais ya existe, con la data original de todos los paises (ya explicado antes) y es unica que se usa en esta prueba. La tabla Pais ya contenia 239 renglones, uno para cada pais. 2. Una aplicacion que manda los comandos que se le carguen, se abre dos veces, en dos instancias: App1 y App2 3. Se le carga a ambas el MISMO set de commandos SQL. Este set carga los 239 paises del planeta, con sus respectivas estadisticas, ya descritas. 4. Esta es una tira tipica de las 239 tiras del set: INSERT INTO "country" VALUES('GUM','Guam','Oceania','Micronesia',549,NULL,168000,77.8,1197,1136,'Guam','US Territory','George W. Bush',921,'GU'); I 5. Amartillo las dos aplicaciones de tal manera que los botones de App1 y App2 de mando estan a un centimetro de separadas y el tiempo en presionar el boton de mando en App1 y App2 es minimo. 6. Como ahora no se crean tablas, y la tabla permite cargar duplicaciones, nada me impidio que me diera vuelo en presionar App1 y App2 alternandolos MUCHAS VECES y SIN LIMITE ALGUNO que el de mi rapidez y en unos cuantos ciclos la tabla Pais tiene ya 30,000 paises apx. Ni una sola de las veces rechino ni salio mensaje que me impida repetir esto hasta el cansancio. No conte los cliks que di, pero dividiendo me resultan 125 transacciones A LA MISMA TABLA Pais que SQLite3 recibio correctamente, sin chistar. Como ven, a SQLite no le importa a cual tabla le envien el grabado, siempre y cuando la data que se le mande sea correcta. P.S. Me tarda mas escribir este mensaje que hacer las pruebas. SQLite3 todavia me esta esperando para que les siga picando el boton a App1 y App2, pues todavia las tengo preparadas y les puedo seguir picando los botones. Mas la verdad es que no le veo el caso. Para mi esto es concurrente y multiusuario. Que haya mas capacidad que esto, no lo niego. |
|
#75
|
||||
|
||||
|
Cita:
// Saludos |
|
#76
|
|||
|
|||
|
Cita:
|
|
#77
|
||||
|
||||
|
Cita:
Cita:
Otra cosa distinta es que si yo abro para editar, y me voy rápido al baño. Tú mientras tanto llegas y modificas el mismo registro que yo he dejado editando. ¿Qué hacer?, ¿avisarte de que lo está editando otro usuario y no dejarte hacer nada?, ¿dejarte editarlo?, creo que lo correcto es lo último. Luego vuelvo yo y le digo "guardar", ¿debería dejarme?, ¿debería decirme que otro usuario ya ha modificado mi registro?. Cada una de esas preguntas admite varias posibilidades, y para ello se puede configurar a gusto del consumidor: read_commited, nowait, snapshot, etc. son parámetros para que firebird "responda" de una manera u otra, dependiendo de lo que queramos. Habitualmente, siempre, he preferido que se guarde lo que haga el último que guarda. ¿Para qué bloquear?, además de que en la vida real no suele haber problema por eso, realmente nunca he tenido un problema por eso, pongamos un ejemplo simple: Tenemos un cliente: codigo: 1000, nombre: empresapaco, DescuentoHabitual: 10 % El cliente es muy bueno y el jefe dice: "al cliente empresapaco le subimos el descuento habitual al 12%" Si nuestra empresa es un caos de organización, tenemos a todos los trabajadores de la oficina abriendo la ficha del cliente y modificando su descuento habitual. Todos sobreescriben los datos de los demás, ningún problema. Pero si hay uno un poco sordo y entendió 14 en lugar de 12, y es el último en grabar... se quedará el 14% ¿Es un fallo de firebird, postgresql, mysql, etc.?, evidentemente, no. En la vida real creo que es difícil encontrarse problemas con una base de datos por cosas de ese tipo, incluido sqlite ![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#78
|
|||
|
|||
|
Cita:
Usuario-1 hace un cambiecillo a tira-a y Usuario-2 hace otro un cambio a tira-1 se hacen los DOS cambios, uno tras otro. Mientras la data sea valida, ambos cambios se aplican. Si la data de uno de los dos usuarios no califica, la transaccion se rechaza. Por ejemplo, si no se permiten duplicados de registro, y el usuario-2 quiere duplicar, pues se le rechaza. Ninguna base de datos puede cambiar un registro exactamente al mismo tiempo. Yo creo que mal-entiendes algo, Casimiro. Cual es el problema? |
|
#79
|
||||
|
||||
|
Cita:
Cita:
Aunque si te refieres "exactamente al mismo tiempo".... hombre, eso es prácticamente 'casi' imposible, si varía unas millonesímas de segundos, ya no es "exactamente al mismo tiempo" ![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#80
|
||||
|
||||
|
Cita:
Bueno, en un sistema de bloqueos resulta lo mismo. El software tiene que decidir qué hacer si quiere abrir un registro bloqueado. Aunque las opciones son menos. Ahora bien, si esto sucede muy pocas veces en la vida real, con mayor razón bastaría usar bloqueos. Incluso podríamos usar bases del tipo NoSQL que ni transacciones tienen pero que son muy cómodas de usar. Creo que por el contrario, esto sucede con mucha frecuencia, aunque no el caso que describes y por ello la preocupación de que el gestor sea ACID. No se trata, como el ejemplo que pones, de una mala organización de l compañía en la que dos empleados editan los mismos datos. Si tienes que manejar un stock, necesariamente va a haber varios puestos accediendo a las existencias del mismo producto. // Saludos |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| SQLITE:Establecer Contraseña a mi db | bitbow | Conexión con bases de datos | 0 | 17-09-2010 23:48:34 |
| Usuario y Contraseña??? | danytorres | Oracle | 1 | 24-07-2007 16:16:19 |
| Usuario, contraseña, rol | santiago14 | Firebird e Interbase | 1 | 11-12-2006 00:00:38 |
| Form con usuario y contraseña | nenufer | Varios | 3 | 19-05-2006 11:37:35 |
| Usuario y contraseña con ADOconnection | Gelmin | Conexión con bases de datos | 3 | 27-09-2005 08:42:48 |
|