2010-03-18 11 views
5

Als Lernübung versuche ich mir ein Blogging-System.Datenbank-Design in Blogging-Systemen

Das Ziel ist es, etwas zu programmieren, mit dem ich mehrere Blogs wie blogger.com oder wordpress.com erstellen kann, aber viel einfacher.

Ich möchte Sie fragen, was ist das beste Datenbankdesign für diese Art von Skript.

Ist es besser, eine große Tabelle zu haben, die Beiträge von allen Blogs aller Benutzer enthält (wie friendfeed) oder wäre es besser, separate Tabellen für die Beiträge jedes Blogs zu erstellen?

Vielen Dank im Voraus für Ihre Hilfe, Peter.

Antwort

3

Ihr effizientester Ansatz wird sein, eine ordnungsgemäß normalisierte Datenbank (Autoren, Beiträge, Kommentare Tabellen) zu erstellen und dann nach Möglichkeiten zu suchen, mit Ihren Leistungsproblemen umzugehen, anstatt sie für Probleme zu entwerfen vorne ... diese Probleme werden sich vielleicht nie einstellen.

Wenn Sie eine einzelne Tabelle in Vielfache aufteilen, müssen Sie normalerweise untersuchen, wie die Daten abgefragt werden, und die beste Methode zum Partitionieren der Daten ermitteln. Es kann sein, dass Zeit ist eine bessere Möglichkeit, es zu partitionieren, oder dass Sie nach Autor oder sogar nach Blog-URL partitionieren möchten.

Zusammenfassend: Beginnen Sie mit einem traditionellen normalisierten Design und weichen Sie nur bei Performance-Problemen von diesem Pfad ab.

+0

+1 Gute Antwort! – amelvin

+1

Wenn Sie in mehrere Tabellen aufteilen, müssen Sie entweder SQL direkt generieren oder komplexe dynamische Aliase verwenden, um eine Anwendung zu erhalten, die * n * identische Kopien der Tabellen verwendet. Das ist ein möglicher Albtraum für die Softwarewartung. Wenn Sie es falsch machen (d. H. Mit dynamisch generiertem SQL), kann dies ein Sicherheitsalarm sein. –

1

Dies ist eine gute Frage (+1).

In Bezug auf die Skalierbarkeit ist es offensichtlich, dass ein Tisch für jeden Blog von jeder Person nicht fliegen wird, wenn Sie ein sehr großes Budget haben. Vielleicht kann FriendFeed es sich leisten, eine Serverfarm an einen Tisch zu schieben - aber ich wäre daran interessiert, Ihre Nachforschungen darüber zu lesen.

Wenn Sie nur eine kleine Anzahl von Benutzern erwarten, dann konzentrieren Sie sich auf das Design und ignorieren Sie die Skalierbarkeit.

Ich denke, die Antwort hängt davon ab, wie weit Sie Ihr Projekt skalieren möchten.

Verwandte Themen