Pregunta

Tengo una idea para una aplicación sencilla que supervisará un grupo de carpetas e indexará cualquier archivo que encuentre.Una interfaz gráfica de usuario me permitirá etiquetar rápidamente archivos nuevos y moverlos a una única base de datos para su almacenamiento y también proporcionará un mecanismo sencillo para consultar la base de datos por etiqueta, nombre, tipo de archivo y fecha.En este momento tengo más de 100 GB de archivos en un par de discos duros extraíbles, la base de datos será al menos así de grande.Si es posible, me gustaría admitir la búsqueda de texto completo de los documentos de texto y binarios incrustados.Esta será una aplicación de usuario único.

No intento iniciar una guerra de bases de datos, pero ¿qué base de datos de código abierto funcionará mejor para mí?Estoy bastante seguro de que SQLLite está descartado, pero podría estar equivocado.

¿Fue útil?

Solución

Todavía estoy investigando esta opción para uno de mis propios proyectos, pero sofádb puede que valga la pena echarle un vistazo.

Otros consejos

¿Por qué almacenar los archivos en la base de datos?Simplemente almacene sus metadatos y un nombre de archivo.Si necesita copiarlos a una nueva ubicación por algún motivo, hágalo como una copia del sistema de archivos.

Una vez que elimine el contenido del archivo, cualquier base de datos competente podrá manejar los metadatos de unos cientos de miles de archivos.

Mi preferencia sería almacenar el documento con los metadatos.Una razón es la integridad relacional.No puede mover o modificar archivos fácilmente sin que la base de datos realice la acción.Estoy seguro de que puedo manejar estos problemas, pero no es tan limpio como me gustaría y mi experiencia ha sido que la mayoría de los proveedores pueden manejar grandes cantidades de datos binarios en la base de datos hoy en día.Supongo que me preguntaba si PostgreSQL o MySQL tienen ventajas obvias en estas áreas; estoy familiarizado principalmente con Oracle.De todos modos, gracias por la respuesta, si la base de datos sabe dónde está el archivo externo, también será fácil traer el archivo en una fecha posterior si así lo deseo.Otro aspecto de la pregunta fue si es más fácil trabajar con alguna de las bases de datos cuando se usa Python.Supongo que es un lavado.

Siempre odio responder "no", pero sería mejor indexar con algo como Lucene (PyLuceno).Casi siempre se recomienda eso y almacenar las rutas en la base de datos en lugar del contenido del archivo.

Además, ninguno de esos motores de bases de datos almacenará LOB en un espacio de datos separado (estarán incrustados en el espacio de datos de la tabla), por lo que cualquiera de esos motores debería funcionar casi igual de bien (bueno, excepto sqllite).Debe pasar a Informix, DB2, SQLServer u otros para obtener ese tipo de manejo de objetos binarios.

Prácticamente cualquiera de ellos funcionaría (aunque SQLLite no estaba diseñado para usarse en un entorno multiusuario concurrente, lo que podría ser un problema...) ya que no desea indexar el contenido real de los archivos.

El único factor limitante es el tamaño máximo de "paquete" de la base de datos dada (por paquete me refiero a una consulta/respuesta).Por lo general, este límite ronda los 2 MB, lo que significa que sus archivos deben tener un tamaño inferior a 2 MB.Por supuesto podrías aumentar este límite, pero todo el proceso es bastante ineficiente, ya que por ejemplo para insertar un archivo tendrías que:

  • Leer el archivo completo en la memoria.
  • Transformar el archivo en una consulta (lo que generalmente significa codificarlo en hexadecimal, duplicando así el tamaño desde el principio)
  • Ejecutar la consulta generada (lo que a su vez significa, para la base de datos, que tiene que analizarla)

Yo elegiría una base de datos simple y los archivos asociados almacenados usando una convención de nomenclatura que los haga fáciles de encontrar (por ejemplo, según la clave principal).Por supuesto, este diseño no es "puro", pero funcionará mucho mejor y también es más fácil de usar.

¿Por qué pierdes el tiempo emulando algo que el sistema de archivos debería poder manejar?más almacenamiento + grep es tu respuesta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top