Meilleure approche pour une base de données de chaînes longues

12

J'ai besoin de stocker les questions et réponses dans une base de données. Les questions seront d'une à deux phrases, mais les réponses seront longues, au moins un paragraphe, probablement plus.

La seule façon que je sache de le faire en ce moment est une base de données SQL. Cependant, je ne pense pas que ce soit une bonne solution car, pour autant que je sache, ces bases de données ne sont pas utilisées pour des données de ce type ou de cette taille. Est-ce la bonne façon de procéder ou existe-t-il une meilleure façon de stocker ces données? Existe-t-il un meilleur moyen que de stocker des chaînes brutes?

gsingh2011
la source
Avez-vous étudié la recherche en texte intégral? en.wikipedia.org/wiki/Full_text_search
FrustratedWithFormsDesigner
Veuillez définir "long" 1k, 5M, 1GB ??
James Anderson
pourquoi n'aimes-tu pas les cordes "brutes"? Les données sont-elles en fait des chaînes ou s'agit-il de données structurées? Envisagez-vous d'en faire quelque chose qui ne fonctionnerait pas pour les chaînes? Il n'y a aucune raison claire dans votre question pour laquelle une base de données ne serait pas appropriée. La même chose avec les chaînes (ou peut-être CLOBS si elles sont trop grandes et en fonction de la base de données que vous utilisez).
ps
Je faisais référence à un moyen intelligent de les stocker, peut-être par le biais d'un certain type de compression, pas de chaînes de texte en clair. Je m'inquiète essentiellement de la taille de la base de données ici.
gsingh2011
1
Quel SGBDR utilisez-vous? Oracle a un excellent support pour la gestion et la recherche de texte.
Matthew Flynn

Réponses:

19

Mongodb est génial, mais vous connaissez SQL. Il n'y a rien de mal à stocker des réponses longues dans les champs. Vous pouvez stocker des images ou même des fichiers en SQL. Je pense que la taille maximale du champ est de 2 Go.

Je suis presque certain que cette réponse elle-même est stockée quelque part dans un champ de table.

Quant à leur présence par milliers, pas de problème. Même des millions ne devraient pas être un problème. Vous pourriez envisager d'utiliser l'indexation de texte intégral si vous recherchez des mots clés ou quelque chose dans le champ. Mais j'essaie de ne pas optimiser jusqu'à ce que je vois un problème. Les ordinateurs sont bon marché, le stockage est essentiellement gratuit.

DanielEli
la source
11
+1 pour ne pas optimiser jusqu'à ce que vous ayez réellement le problème!
GrandmasterB
4
La taille de champ maximale n'est pas spécifiée dans ANSI SQL, elle dépend du SGBD (et généralement de quelques autres facteurs, tels que le jeu de caractères, le type de données de colonne, le moteur de stockage, le système d'exploitation, etc.).
tdammers
6

Il n'y a aucun problème à stocker du texte long dans des bases de données (SQL ou autre). C'est ainsi que pratiquement chaque entrée de blog (pensez Wordpress), article de presse et message de forum (pensez phpbb) sur Internet est stockée. Je ne connais pas les détails spécifiques de la configuration de l'échange de pile, mais je suis sûr que votre question est également stockée dans une base de données. La plupart des bases de données SQL ont un TEXTtype de champ ou l'équivalent uniquement dans le but de stocker des données textuelles de n'importe quelle longueur. Beaucoup ont également des systèmes de recherche de texte intégral en place.

Prenez des décisions techniques basées sur les connaissances techniques et la compréhension, pas sur les sentiments.

GrandmasterB
la source
5

Oui, c'est la bonne façon de procéder. Stocker des chaînes dans une base de données SQL est ce que vous voulez faire. Une de mes tables dans la base de données contient plus d'un gig de données en texte brut et fonctionne très bien.

Si vous êtes inquiet à propos de l'espace de stockage, n'oubliez pas qu'il est bon marché!

Si vous êtes préoccupé par les performances - ne vous inquiétez pas, une bonne base de données peut évoluer (ou augmenter) pour autant de données que vous souhaitez y ajouter.

La dernière chose que vous voulez faire est de commencer à l'optimiser maintenant pour le plaisir (compresser les chaînes avant de les mettre dans la base de données ou quelque chose de fou) avant que cela ne devienne réellement un problème. Vous vous donnez simplement plus de travail.

Rocklan
la source
2

Il n'y a aucun problème à stocker de grandes chaînes ou des données binaires. J'ai travaillé avec une base de données avec plus d'un téraoctet de données binaires et j'ai très bien fonctionné (postgres) et la seule mauvaise chose était le temps de sauvegarde.

La grande question est: "Aurez-vous besoin de faire des recherches constantes dans ce texte?"

Si vous allez rechercher des chaînes dans le texte, vous pouvez penser à une solution d'index:

Rodrigo Menezes
la source