Pregunta

Necesito desarrollar un sistema para almacenar grandes cantidades (de 10 a 100 de miles) de objetos. Cada objeto es similar al correo electrónico: hay un cuerpo de texto principal y varios campos de texto auxiliar de tamaño limitado. Un cuerpo tendrá desde unos pocos bytes hasta varios KB de tamaño.

Cada elemento tendrá un único ID único (probablemente un GUID) que lo identifica.

La tienda solo se escribirá cuando se le agregue un objeto. Se leerá con frecuencia. Las eliminaciones serán raras. Los datos son casi todos textos legibles por humanos, por lo que serán fácilmente comprimibles.

Un sistema que me permita emitir las E / S y administrar la memoria y el almacenamiento en caché sería ideal.

Voy a mantener los índices en la memoria, usándolos para asignar índices a la clave única (y primaria) para los objetos. Una vez que tenga la clave, la cargaré desde el disco o el caché.

El sistema de gestión de datos debe ser parte de mi aplicación; no quiero depender de los servicios del sistema operativo. O paquetes instalados por separado. Native (C ++) sería lo mejor, pero una cosa gestionada (C #) estaría bien.

Creo que una base de datos es una opción obvia, pero debe ser súper rápida para buscar y cargar en la memoria de un objeto. No tengo experiencia en tecnología de bases de datos y me preocupa que los sistemas relacionales generales no manejen todos estos datos de tamaño variable de manera eficiente.

(Tenga en cuenta que esto no tiene nada que ver con mi trabajo, es un proyecto personal).

En su experiencia, ¿cuáles son las alternativas viables a una base de datos relacional tradicional? ¿O un DB funcionaría bien para esto?

¿Fue útil?

Solución

Mire SQLite , tiene enlaces para muchos lenguajes de programación y entornos disponibles y es, como el Berkeley DB , una base de datos en disco sin la necesidad de una instalación de motor de base de datos.

Si solo agrega los índices correctos, las búsquedas serán muy rápidas y, dado que es una base de datos basada en conjuntos, aún puede hacer consultas masivas y similares.

Otros consejos

Le daría una oportunidad a PFS: http://blog.sensenet.hu/post/2008/05/Portal-File-System- (PFS) -an-open-source-content-content-repository- for-Net.aspx

Lástima que estés en c / .Net, ya que Jackrabbit habría sido una elección perfecta.

Realmente no indica cómo buscará estos datos. He hecho un trabajo similar con algunas aplicaciones de minería de texto donde los datos principales se almacenan en MySQL pero mantengo un índice de búsqueda textual en Ferret (el proyecto está en Ruby) para encontrar la fila apropiada en la tabla de mensajes basada en la búsqueda de palabras clave. Creo que este enfoque híbrido también podría funcionar para usted. SQLServer y Lucene.Net pueden funcionar bien para usted en el entorno C #. Estoy seguro de que si miras a tu alrededor puedes encontrar soluciones similares en el espacio de C ++.

No recomiendo usar la búsqueda de texto completo de SQLServer: Lucene y sus derivaciones parecen ser una opción mucho mejor.

Creo que tendría mucha mejor suerte con casi cualquier solución de DB que con una solución basada en archivos. Casi cualquier base de datos moderna debería poder manejar sus requisitos de datos, al menos en términos de espacio. Construir los índices en su campo grande es un asunto diferente y es por eso que recomendaría un enfoque de minería de texto si necesita buscar sobre él.

Suena exactamente para lo que Berkeley DB fue diseñado. Sin embargo, no lo he usado.

Tal vez deberías pensar un poco en un servidor WebDav como Apache + mod-dav. Esto almacenará el contenido y los metadatos en el disco. Para buscar, puede colocar un motor de búsqueda existente en la parte superior de este servidor WebDav, p. Lucene.

De esta forma, mantiene su propio desarrollo al mínimo y comienza con un poderoso conjunto de características.

¿Ha visto db4o o Karvonite ?

Eche un vistazo a Glimpse .

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