Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-03-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.913
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por Casimiro Notevi Ver Mensaje
De todas formas, ¡¡¡ a quién se le ocurre usar una BD de juguete para estas cosas !!!
Juguete? Sqlite es una BD muy capaz, para sus casos de uso.

Aunque es cierto que FB por ser una BD servidora tiene mas funcionalidad, el problema que se expone realmente como lo va a ser mejor?

En *CUALQUIER* motor de BD es el mismo y exacto problema. Esto es un caso patologico para cualquier BD relacional:

1- Hay muchos registros
2- Es Texto
3- Lo que se busca esta en cualquier parte del campo
4- No hay indice

Por lo tanto, hay un TABLE SCAN forzado. Y es mas, apuesto (aun sin hacer pruebas) que SQLITE es mas rapido que cualquier otro motor *precisamente* porque es una BD local y no una servidor que tiene que hacer todo por protocolos de red remotos.

Ademas, el usar un indice aqui dificilmente va a servir de NADA:

http://stackoverflow.com/questions/9...ebird-database
http://web.utk.edu/~jplyon/sqlite/SQ...ation_FAQ.html

FB & Sqlite (Y no veo que BD sea capaz) tienen el mismo problema al hacer busquedas donde el texto a encontrar estan en cuaquier parte, y solo (posiblemente) pueden usar indice si el LIKE es asi: 'Prefijo%', pero falla si es asi: '%Sufjio' o peor '%QuienSabe%'.

Asi que hacer un cambio de codigo/bd/tecnologia por esto solo no servira de mucho.

Cual es la solucion?

Una idea se da en:
http://web.utk.edu/~jplyon/sqlite/SQ...ation_FAQ.html
Código SQL [-]
If a * or % wildcard occurs in the middle of a string, or a complex pattern appears at the end, we can still use the above techniques to create a filter test which is done before the more expensive pattern test.
Example: The expression (x GLOB 'abc*jkl*') can be replaced by (x > 'abc' AND x < 'abd' AND x GLOB 'abc*jkl*'). Example: The expression (x LIKE 'abc_') can be replaced by (x > 'abc' AND x < 'abd' AND length(x) == 4)

La otra, mas simple es usar Full Text Search (un punto extra por Sqlite: FB no tiene una solucion FTS INTEGRADA):

https://www.sqlite.org/fts3.html

Con esto, las busquedas se resuelven en milisegundos, con el trade-off de que la BD crecera un poco mas por el uso de FTS.

El asunto es que como dice la teoria, uno escoje optimizar TAMAÑO o optimizar TIEMPO y no se puede ambas, asi que aparte de hacer malabares con los querys, usar FTS o encontrar una forma de almacenar el texto emulando una estructura de datos (ej: Cada palabra se guarda en una tabla separada con relacion a la tabla donde esta el texto "grande", o se usa algo similar a un ROPE (https://en.wikipedia.org/wiki/Rope_(data_structure)) u otra cosa) no hay vuelta con esto.
__________________
El malabarista.
Responder Con Cita
  #2  
Antiguo 31-03-2014
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
se armo la polemica

Gracias amigos por defenderse me gusta eso. en la polémica salen las mejores soluciones.

Evidentemente mamcx se ve que dominas el tema de sqlite, es que lo dijo bill gates las personas llegara el dia que no se mataran por dinero sino por la información , de verdad me fue tanto difícil llegar a ese despliegue de razones que me disparaste de ráfaga, yo había buscado un poco y no logré mucho avance en sqlite3, y cuando probé firebird me sorprendió la velocidad de respuesta , ademas lo uso de la misma manera embebido o sea una sola base de datos mono usuario nunca vi nada de lo que me comentas en sqlite , voy a investigar y te cuento como me va.

En concreto lo que estoy trabajando es en un sistema para llevar todo lo referente a un tema específicamente de electrónica, llevarlo portable a donde quieras y disponer cuanto necesites lo mas rápido posible, una enciclopedia.

La esencia es guardar todo lo que el cliente le llega de esos temas .doc,xls,pdf,html en ese mismo formato, o sea todo lo que tiene y agregar cuando desee cualquier fichero.
entonces la aplicacion solamente tiene un ejecutable y una base de datos que la tenia sqlite, y un campo text que lo que hace es que a la hora de importar los ficheros a la base de datos extrae el texto de todos los ficheros y lo guarda en un campo de la base de datos.

las busquedas entonces son de las mas malas de hacer o sea %QuienSabe%

Gracias amigos por sus respuestas siempre se puede exprimir algo un poco mas, voy a ver si le saco mas jugo a la naranja de sqlite pero te advierto que el firebird de la primera probada me dejo un buen sabor.

depues pongo los resultados si es que logro entender bien lo que me dejo de tarea extra clase el amigo mamcx


juank
Responder Con Cita
  #3  
Antiguo 31-03-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.054
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por mamcx Ver Mensaje
Juguete? Sqlite es una BD muy capaz, para sus casos de uso.
Sí, es un jueguetito. Nada más.
No es una base de datos relacional. No es multiusuario. Tiene unas grandes limitaciones con los triggers. Stored procedures, ni saben lo que es. Claves foráneas, mediante inventos por código. Tipos de datos... para qué hablar de eso. Y no sigo.
Sqlite está muy bien para lo que es, para una agenda de contactos, para una BD simple y cosas así. Si quieres hacer algo "serio" te mueres de pena con tantos problemas.

Por cierto, con firebird, desde 2008 hay un "addon/pluggin/soft de terceros" que permite "Full Text Search". Y me parece, creo recordar, que en las últimas versiones de FB ya iba implementado.

Y de todas formas, no hay comparación posible, yo vengo de usar firebird desde que se creó y este último año he estado usando sqlite... ni punto de comparación en nada, sqlite es como un DBF más moderno, nada más.
Responder Con Cita
  #4  
Antiguo 01-04-2014
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Casimiro,

En esta estoy con Mario. Es decir, yo creo que ambos tienen razón pero a veces como que se nos va un poco la defensa a ultranza (que también Mario la hace ) Pero a ver, él claramente dice: Juguete? Sqlite es una BD muy capaz, para sus casos de uso. El que no haga todo lo que hace FB o carezca de procedimientos almacenados, disparadores, etc. no la convierte en un juguete. Como decía un conocido; hay casos que incluso Excel te los resuelve; y eso no convierte a Excel en un juguete ni quien lo hace debe sentir pena. Y mucho menos con sqlite.

// Saludos
Responder Con Cita
  #5  
Antiguo 01-04-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.054
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
Casimiro,
Sí, tienes razón, por eso digo:
Cita:
Sqlite está muy bien para lo que es, para una agenda de contactos, para una BD simple y cosas así.
Responder Con Cita
  #6  
Antiguo 01-04-2014
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
bueno amigos realmente el final de la polémica es lograr algo mas concreto, hacer que funcione.

Casimiro he estado mirando pero no logro aterrizar que que quiero todavia , estaba mirando lo de Sphinx Full Text Search , dime si has probado algo de eso ya que tienes mas experiencia que yo en el firebird. en sphinx-0_9_8_1_Firebird_Win32 hay algunos ejecutables pero me quede un poco perdido en la pequeña explicacion que dan, has visto algo de eso u otra manera de implementar lo del full text Search.

gracias juank
Responder Con Cita
  #7  
Antiguo 01-04-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.913
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Algo que falta: Que es lo que esta almacenado en ese campo? Podrias dar ejemplos? En especial los peores casos
__________________
El malabarista.
Responder Con Cita
  #8  
Antiguo 01-04-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.054
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por juank1971 Ver Mensaje
bueno amigos realmente el final de la polémica es lograr algo mas concreto, hacer que funcione.
¿Pero no lo habías instalado, probado y funcionaba muy bien?
Si es así, ¿para qué quieres instalar lo otro?
Responder Con Cita
  #9  
Antiguo 01-04-2014
juank1971 juank1971 is offline
Miembro
 
Registrado: feb 2008
Posts: 230
Poder: 17
juank1971 Va por buen camino
en el campo contenido tengo almacenado el texto de cada fichero por ejemplo en un manual de un equipo de radio es un pdf de 200 paginas extraigo el texto de cada pagina lo concateno quitando lineas en blanco y todo ese texto lo guardo en el campo , entonces si quieres finalmente hacer una busqueda por el contenido de los ficheros puedes hacer la que hemos estado hablando y logras encontrar digamos que ficheros hablan de un transistor específico, cosa la cual prácticamente no se puede hacer en windows buscar dentro de una carpeta de miles de ficheros pdf,word,xls etc. ademas lo otro bueno que tiene la aplicación es que tienes todo los ficheros que necesitas para el trabajo en un solo lugar y lo puedes transporta a cualquier parte teniendo siempre una biblioteca de electrónica portable que se puede incrementar cuando se desee, no es otra cosa que un gran saco lleno de ficheros pdf,word etc con unas herramientas de búsquedas en su contenido.

solamente tres tablas tengo

Código SQL [-]
CREATE TABLE "Ficheros" (
"Id_Fichero"  INTEGER,
"Fichero"  BLOB,
"contenido"  text,
PRIMARY KEY ("Id_Fichero" ASC)
);

otra con los nombres de los ficheros y otra con el nombre de las carpetas y la estructura en arbol que habia en windows.

esa es la idea les pongo una capura de pantalla de la aplicación


y lo otro casimiro es que pensé en hacer la llegar un poco mas lejos y hacer un tipo de filtro mientras se escribe, o sea en el keyup y hacer una búsqueda mas instantánea según escribas las letras , estaba mirando lo del limit y en el caso de sqlite esta también el offset , probe esto

Código SQL [-]
select id_fichero  from ficheros  where contenido like 
         '%2n3055%' order by id_fichero limit 2 OFFSET 1

despues haces esto 

select id_fichero  from ficheros  where contenido like 
         '%2n3055%' order by id_fichero limit 2 OFFSET 4
despues 
select id_fichero  from ficheros  where contenido like 
         '%2n3055%' order by id_fichero limit 2 OFFSET 6

y así sucesivamente y te van apareciendo los ficheros encontrados primero muestras 2 luego encuentras 2 mas que serian 4 pero son los 2 que le siguen a los primeros 2 encontrados
eso lo estaba probando con hilos y me va encontrando y sumando al resultado poco a poco lo que va encontrando hasta que devuelve una consulta vacia que ya no hay mas registros que cumplan la condición.
nada complicándome la vida. saludos jk
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
SQLite + String + Dbcombobox = (MEMO) ERROR Furyxe SQL 7 01-02-2012 15:49:28
buscar una subcadena en un campo vroa74 SQL 1 23-10-2007 20:55:30
Campo memo tabla escribirlo en componente Memo Sayuri Conexión con bases de datos 2 18-08-2005 13:58:01
Búsquedas en campos MEMO ingacg Conexión con bases de datos 1 05-12-2003 10:35:23
AYUDA Busquedas lentas st7 Conexión con bases de datos 3 14-05-2003 04:30:01


La franja horaria es GMT +2. Ahora son las 05:55:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi