2010-06-16 5 views
3

Je suis en train de coder un système de forum en utilisant PHP. Je stocke actuellement un ID de thread, un titre, un auteur, des vues et d'autres attributs dans une base de données SQL, puis stocke le corps de thread (HTML et BBcode) dans des fichiers texte dans un dossier nommé après l'ID de thread.Grandes chaînes: fichiers texte ou SQL DB?

En pratique, il est très simple de saisir les valeurs de la base de données, puis il suffit de récupérer le corps du fil dans le fichier texte, mais je me demandais si c'est la «bonne façon»? Je n'ai personnellement aucun problème à le faire, mais s'il s'avère que c'est massivement inefficace et que je devrais plutôt stocker à la place le corps de thread HTML et BBcode dans la base de données, alors je vais changer. Cependant, pour moi, il semble erroné de stocker une très grande (très probablement) grande chaîne de texte multiligne avec beaucoup de caractères différents dans une base de données - on m'a enseigné que les bases de données sont plutôt des valeurs de champ court plutôt que le contenu du site Web.

Je voudrais juste une réponse définitive à cette question, car il me dérange depuis des lustres pour savoir où je l'ai fait correctement.

Est-ce que quelqu'un sait comment les systèmes de forum populaires stockent des discussions?

Ajouté Merci pour les réponses, il est donc préférable de stocker le contenu du fil dans la base de données, quel type de champ dois-je utiliser? Qu'en est-il des réponses? Une autre table qui a l'ID de thread et l'ID de commentaire puis le corps de commentaire? Je suis nouveau dans cette base de données, merci pour votre aide.

+0

Joomla - tout le contenu est dans la base de données. Drupal probablement aussi. D'innombrables systèmes stockent le contenu dans une base de données. (Attention, il ne s'agit que d'une statistique!) – MvanGeest

+0

Il est préférable de poser une question de suivi distincte pour la conception de la base de données. Il n'y a pas de limite au nombre de questions que vous pouvez poser, et changer les critères signifie que ceux qui ont fourni les réponses à l'origine pourraient être downvoted - nous ne sommes pas alertés lorsque vous mettez à jour votre question. –

+0

Ok ouais je comprends, merci! – Tommo

Répondre

4

Confluence (un wiki commercial) stocke le contenu entier de la page dans une seule colonne.

La raison de stocker un grand texte dans la base de données est:

  1. Il y a (je l'espère) pas de déconnexion entre la valeur et le dossier (s) le texte est associé à
  2. Il existe des technologies comme Texte intégral Recherche (FTS) pour faire trouver des chaînes spécifiques en grandes quantités de texte
  3. sauvegarde simplifiée & processus de restauration
+0

+1. J'ai oublié de Confulence, et nous l'utilisons ... – David

0

Il est recommandé de stocker le thread dans la base de données, car cela vous permettra de mettre à l'échelle et de rechercher plus facilement.

Si vous souhaitez continuer à utiliser des fichiers pour stocker le contenu, je vous recommande d'utiliser quelque chose comme GridFS. Fondamentalement juste morceaux vers le haut de fichiers et les stocke dans NOSQL.

0

Je sais que DotNetNuke et AspDotNetStorefront utilise une base de données pour stocker ces données. Ce ne sont pas des forums, mais un système de gestion de contenu et un panier avec des capacités de gestion de contenu.

J'ai également expérimenté plusieurs forums (tels que YAF) et tous ceux qui utilisent des bases de données. Personnellement, je m'en tiens à une base de données pour le HTML, et tous les fichiers image/contenu doivent être stockés sur le disque avec une référence à leur emplacement en HTML.

Peut-être l'argument le plus fort pour stocker dans la base de données: Il est beaucoup plus facile de rechercher les champs de texte avec une clause LIKE que de rechercher un fort dans un fichier texte.

Aussi, avec le logiciel de forum gratuit cout là, puis-je vous demander pourquoi vous écrivez un nouveau à partir de zéro? Je sais qu'il ya probablement de bonnes raisons, mais juste au cas où il est quelque chose que vous ne l'aviez pas encore pensé ...

Ajouté

La plupart de mes références étaient le code .NET. Voici un forum open source écrit en PHP: http://www.phorum.org/

+2

Et cette clause LIKE peut finir par être très lente ... Vous voudrez peut-être utiliser l'indexation de texte complet pour cela. –

+0

@Nelson - Bon point! – David

+0

Merci. En outre, je le code moi-même principalement comme un exercice d'apprentissage, ce n'est pas un site web sérieux, donc j'ai pensé que je donnerais un coup de coder le système moi-même. – Tommo

0

Ceci est un aparté car la question a déjà été acceptée, cependant vous devriez vérifier phpbb3 (http://www.phpbb.com/). Forum php très robuste. Peut vous faire gagner du temps de développement: D

+0

Merci, mais le but principal pour moi de coder ce forum est comme un exercice d'apprentissage pour moi-même sinon je ne serais pas utiliser phpbb :) – Tommo

0

Je suis d'accord avec les autres réponses, stocker toutes les données dans votre base de données simplifier la mise à l'échelle, sauvegarde/restauration, vous permet d'interroger les données et ainsi de suite.

Si vous êtes concerné par les performances, vous pouvez implémenter un cache pour le contenu de la page. Je sais que PHPBB le fait en ayant un tableau sérialisé dans un fichier texte avec un horodatage d'expiration. Peut également être fait en utilisant memcached ou autrement.

Le stockage des données dans une base de données vous apporte le plus de flexibilité et de commodité, la plupart des problèmes liés à la fourniture des données à l'utilisateur final peuvent être traités par la mise en cache des données.

Questions connexes