El mejor enfoque para una base de datos de cadenas largas

12

Necesito almacenar preguntas y respuestas en una base de datos. Las preguntas serán de una a dos oraciones, pero las respuestas serán largas, al menos un párrafo, probablemente más.

La única forma en que sé hacer esto ahora es una base de datos SQL. Sin embargo, no creo que esta sea una buena solución porque, por lo que he visto, estas bases de datos no se utilizan para datos de este tipo o tamaño. ¿Es esta la forma correcta de hacerlo o hay una mejor manera de almacenar estos datos? ¿Hay una mejor manera que almacenar cadenas crudas?

gsingh2011
fuente
¿Has buscado en la búsqueda de texto completo? en.wikipedia.org/wiki/Full_text_search
FrustratedWithFormsDesigner
Defina "largo" 1k, 5M, 1GB ??
James Anderson
¿Por qué no te gustan las cuerdas "en bruto"? ¿Son los datos de hecho cadenas o son datos estructurados? ¿Planeas hacer algo con él que no funcione para las cadenas? No hay ninguna razón clara en su pregunta de por qué una base de datos no sería apropiada. Lo mismo con las cadenas (o quizás CLOBS si son demasiado grandes y dependiendo de la base de datos que use).
psr
Me refería a alguna forma inteligente de almacenarlos, tal vez a través de algún tipo de compresión, no cadenas de texto sin formato. Estoy preocupado por el tamaño de la base de datos aquí.
gsingh2011
1
¿Qué RDBMS estás usando? Oracle tiene un excelente soporte para manejar y buscar texto.
Matthew Flynn el

Respuestas:

19

Mongodb es genial, pero sabes SQL. No hay nada de malo en almacenar respuestas largas en los campos. Puede almacenar imágenes o incluso archivos en SQL. Creo que el tamaño máximo del campo es de 2 gb.

Estoy casi seguro de que esta respuesta se está almacenando en un campo de tabla en alguna parte.

En cuanto a que hay miles de ellos, no hay problema. Incluso millones no deberían ser un problema. Puede considerar la utilización de la indexación de texto completo si está buscando palabras clave en el campo o algo así. Pero trato de no optimizar hasta que veo un problema. Las computadoras son baratas, el almacenamiento es básicamente gratuito.

DanielEli
fuente
11
¡+1 en no optimizar hasta que realmente tengas el problema!
GrandmasterB
44
El tamaño máximo del campo no se especifica en ANSI SQL, depende del DBMS (y generalmente de algunos otros factores, como el conjunto de caracteres, el tipo de datos de la columna, el motor de almacenamiento, el sistema operativo, etc.).
tdammers
6

No hay problema para almacenar texto largo en bases de datos (SQL o de otro tipo). Así es como se almacena virtualmente cada entrada de blog (piense en Wordpress), artículo de noticias y publicación en el foro (piense en phpbb) en Internet. No conozco los detalles específicos de la configuración del intercambio de pila, pero estoy seguro de que su pregunta también se almacena en una base de datos. La mayoría de las bases de datos SQL tienen un TEXTtipo de campo o el equivalente solo con el fin de almacenar datos textuales de cualquier longitud. Muchos también tienen sistemas de búsqueda de texto completo en su lugar.

Tome decisiones técnicas basadas en el conocimiento técnico y la comprensión, no en los sentimientos.

Gran maestro B
fuente
5

Sí, es el camino correcto. Almacenar cadenas en una base de datos SQL es lo que desea hacer. Una de mis tablas en el DB tiene más de un concierto de datos de texto sin formato y funciona bien.

Si le preocupa el espacio de almacenamiento, recuerde que es barato.

Si le preocupa el rendimiento, no se preocupe, una buena base de datos puede escalar (o reducirse) a la cantidad de datos que desee incluir.

Lo último que desea hacer es comenzar a optimizar ahora por el bien (comprimir cadenas antes de ponerlas en el DB o algo loco) antes de que realmente se convierta en un problema. Solo te estás dando más trabajo.

Rocklan
fuente
2

No hay problema para almacenar cadenas grandes o datos binarios. Trabajé con una base de datos con más de un terabyte de datos binarios y funcioné muy bien (postgres) y lo único malo fue el tiempo de respaldo.

La gran pregunta es: "¿Necesitarás hacer búsquedas constantes en este texto?"

Si va a buscar cadenas en el texto, puede pensar en una solución de índice:

Rodrigo Menezes
fuente