2009-07-22 16 views
1

Ich arbeite an einer kleinen Anwendung im Digg-Stil, die jeden Tag zwischen 20 und 100 Einträge haben wird. Ich muss eine Laufstrecke darüber führen, wie viele Gegenstände zu einem bestimmten Zeitpunkt existieren. Ich weiß, dass ich nicht viele Platten habe, aber ich denke immer noch nicht, dass das Ausführen einer Zählung() die beste Methode ist, da ich das auf fast jeder Seite machen werde. Meine Idee ist, eine Tabelle speziell für Meta-Werte wie total_articles zu erstellen. Ich würde dann diesen Wert erhöhen, wenn eine neue Geschichte eingereicht wird, und den Wert dekrementieren, wenn eine Geschichte gelöscht wird.Anzahl der Einträge in Meta-Tabelle aufnehmen?

Ist dies eine allgemeine Lösung für diese Art von Problem oder gibt es einen besseren Weg? Wenn dies eine Standardlösung ist, welche Arten von Dingen sollte ich beachten, wenn ich sie als meine Lösung implementiere?

Antwort

2

Definitiv eine ziemlich häufige Art von Problem. Hier sind ein paar Dinge, die ich im Hinterkopf behalten würde.

  1. Ihre Datenbank-Engine - COUNT() muss nicht teuer sein, es kommt nur darauf an, wie es umgesetzt wird. Wenn Sie beispielsweise MySQL verwenden, ist COUNT() für eine InnoDB-Tabelle teuer. Wenn Sie jedoch eine MyISAM-Tabelle verwenden, ist die Anzahl der Datensätze bereits als Metadaten gespeichert, und eine Zählung ist äußerst kostengünstig.

  2. Auf einer schwer lesbaren Site funktioniert Ihr Ansatz der separaten Metadatentabellen gut. Die Verwaltung der Metadaten verursacht jedoch zusätzlichen Aufwand. Sie können dies mithilfe von Datenbank-Triggern oder zusätzlichem Code in Ihrer Anwendung erreichen, aber in beiden Fällen, wenn es sich um Daten handelt, die Sie verwalten, wird das für Sie ein bisschen mehr Arbeit bedeuten.

    Auf einer Website mit hohem Schreibaufwand kann der Leistungseinbruch bei der Aktualisierung von Metadaten bei jedem Datensatzschreiben die Lesevorgänge von COUNT() (oder einem anderen Meta-Abruf) übertreffen.

    Das Wiegen der Lese-/Schreibaktivität kann umsichtig sein. Es hört sich so an, als ob Sie keine großen Mengen an neuen Platten erwarten, also hat das Speichern Ihrer eigenen Zählungen wahrscheinlich die Performance-Ups.

Verwandte Themen