Frage

Jetzt sind die vorgeschlagenen Tabellenstrukturen:-

data_table
->impressions
->clicks
->ctr

ODER

data_table_1
->ctr

data_table_2
->impressions
->clicks

Welche Abfragen werden ausgeführt? Es gibt ungefähr 500 Updates pro Sekunde für die Eindrücke. Jede Sekunde gibt es ungefähr 1 Update für Klicks. Für die CTR gibt es ungefähr 500 Updates pro Sekunde.

Jetzt sortiert meine Anwendung die Daten mit der CTR. Die CTR ist der Klick durch die Rate, die von durch gearbeitet wird ctr = clicks/impressions. Jetzt habe ich erkannt, dass die CTR nicht aktualisiert werden muss, da alle Eindrücke für Artikel erhöht werden müssen, was die CTR in derselben Beziehung verringert bleibe auf dem Laufenden.

Derzeit ist die Update -Abfrage wie "Data_table set Impressionen set.

Dies bedeutet, dass zwar 2 Felder gleichzeitig aktualisiert werden, werden nur 1 Abfrage ausgeführt.

Der Engpass ist nun, dass diese 500 Updates dazu, was zu einer Verlangsamung der Auswahl in dieser Tabelle führt. Es gibt ungefähr 20 Auswahl pro Sekunde. Also dachte ich daran, die Tische zu trennen. Der neue Tabellenstil schlägt vor, dass die Aktualisierungen in einer separaten Tabelle und die Auswahl in einer separaten Tabelle stattfinden. Die Datentabelle, die die Impressionen enthält, wird sehr häufig aktualisiert, sodass die Aktualisierungen für die Eindrücke, die darauf ausgeführt werden, die Leistung in dieser Tabelle wirklich beschleunigt. Dies bedeutet, dass die Auswahl im Data_Table_2 auch schneller ist und die CTR jedes Mal aktualisiert werden kann, wenn jemand einen Klick macht.

Ich wollte also nur wissen, ob ich die neue Tabellenstruktur verwenden sollte oder nicht. Was machen Sie Vorschläge? Vor- und Nachteile meiner Vorschläge!

War es hilfreich?

Lösung

Vielleicht ist dies keine direkte Antwort auf Ihre Frage, aber ich denke, es ist wichtig, notiert zu werden.

Ich denke, Sie sollten in Betracht ziehen, NoSQL -Datenbanken wie Redis, Memcachedb, Mongdb, CouchDB zu verwenden. Relatationale DBMs sind für diese Art der Verwendung nicht gut geeignet. Zum Beispiel jedes Mal, wenn Sie eine Spalte aktualisieren (UPDATE data_table SET impressions = impressions + 1) Die Caches werden gelöscht und die DB muss auf die Festplatte gehen.

Andere denken, dass Sie in Betracht ziehen können, dass Memcache und Masse diese Daten nach einem Zeitraum auf der Festplatte auf der Festplatte verwenden.

Wenn Sie sich beispielsweise leisten können, einige Imprälen zu verlieren (denken Sie daran, dass Memcache keine Daten bestehen), können Sie die Impräume ++ in Memcache und alle 5 Minuten in der DB aktualisieren. Es würde Ihre Last erheblich verringern.

Ich hoffe es hilft dir.

BEARBEITEN:

Das Speichern von CTR ist eine gute Idee, sie heißt "Denormalisierung" und kann in Ihrer Anwendung funktionieren, wenn es sich um einen häufig erforderlichen Wert handelt.

Andere Tipps

Zunächst gehe ich davon aus, dass die Tabelle gut indiziert ist, damit die something = something Das Prädikat führt schnell in die entsprechende Zeile, oder?

Angenommen, Ihr Engpass ist aufgrund der hohen Aktualisierungsrate den Throughput auf Diskussionsdurchsatz. Da Sie durch Ihr Update begrenzt zu sein scheinen, sollte das Aktualisieren eines Feldes ungefähr die Hälfte der Auswirkungen des Schreibens von Daten auf die Festplatte. Angesichts eines solchen Szenarios, in dem die CPU wahrscheinlich relativ untätig ist, sollte die Berechnung der Klick/Impressionen für jedes Ergebnis ein nicht identifiziertes Problem sein. Ihr Ansatz würde sich auszahlen (erneut vorausgesetzt, die Festplatte ist der einschränkende Faktor, der davon ausgeht, dass er sich durch die CPU -Auslastung leicht befindet und kann leicht herausgefunden werden), und Ihr Ansatz bietet erhebliche Vorteile. IFF die Tabellen oder auf zwei verschiedenen Festplatten.

Wenn sich herausstellt, dass die CPU der begrenzende Faktor ist, dann liegt es wahrscheinlich daran, dass die something = something Das Prädikat ist sehr kompliziert, um zu bewerten. In diesem Fall sollte die Vereinfachung des Hauptanliegens und nicht das Aufteilen der Tabellen sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top