So entwerfen Sie MySQL-Statistikdatentabellen

So entwerfen Sie MySQL-Statistikdatentabellen

Cache-Datentabellen werden häufig beim Erfassen statistischer Daten verwendet und daher auch als statistische Daten bezeichnet. Beispielsweise müssen wir möglicherweise bei Mitarbeiter- und Abteilungsdatentabellen abfragen, wie viele Mitarbeiter in einer Abteilung beschäftigt sind. Es gibt drei Möglichkeiten, dies zu erreichen:

  • Fügen Sie ein Feld für die Anzahl der Mitarbeiter in der Abteilung hinzu. Die Anzahl der Mitarbeiter muss jedes Mal synchron aktualisiert werden, wenn ein Mitarbeiter hinzugefügt, geändert oder gelöscht wird (wenn ein Mitarbeiter die Abteilung wechselt, muss die Anzahl der Mitarbeiter in mehreren Abteilungen aktualisiert werden). Diese Methode kann zwar eine Echtzeitleistung gewährleisten, ist jedoch sehr ineffizient. Dies ist in Ordnung, wenn der Vorgang nicht häufig ist. Wenn er jedoch recht häufig ist, bedeutet dies, dass jedes Mal zwei Tabellen bearbeitet werden müssen und der Geschäftscode gleichzeitig verarbeitet werden muss, was das statistische Geschäft eng mit dem normalen Geschäft verknüpft.
  • Bei jeder Abfrage wird die SUM-Funktion aus der Mitarbeitertabelle ausgeführt, um die Anzahl der Mitarbeiter in der Abteilung zu ermitteln. Mit dieser Methode werden vergrabene Punkte vermieden, allerdings muss die Mitarbeiterdatentabelle jedes Mal summiert werden, was ineffizient ist, wenn die Menge der Mitarbeiterdaten groß ist.
  • Erstellen Sie eine neue Statistiktabelle, um in regelmäßigen Abständen die Anzahl der Personen in den einzelnen Abteilungen aus der Mitarbeitertabelle zusammenzufassen. Diese Methode zum Extrahieren von Daten zu einem festen Zeitpunkt geht zwar auf Kosten der Echtzeitleistung, verringert jedoch die Kopplung des Codes. Da es nicht zu viele Abteilungen gibt, ist die Größe dieser Tabelle vorhersehbar, was auch die Effizienz des Datenzugriffs verbessert. Diese Methode wird als zwischengespeicherte Datentabelle bezeichnet.

Am Beispiel des mobilen persönlichen Zentrums von Nuggets ist es nicht möglich, für jede Abfrage eine SUMME durchzuführen, um die Anzahl der Follower, Follower und den Nuggets-Power-Wert jedes Benutzers anzuzeigen. Dies bedeutet, dass SUM-Operationen mehrerer Tabellen durchgeführt werden müssen, was sehr ineffizient wäre. Darüber hinaus erfordert die Berechnung des Nuggets-Power-Werts eine komplexere Berechnungsmethode (bezogen auf die Anzahl der Aufrufe und Likes des Artikels). Daher können wir das allgemeine Tabellendesign erraten, sodass beim Abfragen der persönlichen Homepage-Informationen des Benutzers alle Daten aus dieser Tabelle gelesen werden können.

ERSTELLEN Sie t_user_summay (
  ID INT Primärschlüssel,
  Benutzer-ID BIGINT(20),
  fokussierter_Benutzer_cnt INT,
  gefolgt_Benutzer_cnt INT,
  Benutzerwert INT,
  Benutzerebene ENUM('Lv1', 'Lv2', ..., 'Lv8'),
  Erstellungszeit DATETIME,
  aktualisierte_Zeit DATETIME,
);

Ist eine Echtzeitaktualisierung erforderlich?

In der tatsächlichen Anwendung gibt es zwei Möglichkeiten, die statistische Tabelle zu aktualisieren: Eine ist die Echtzeitaktualisierung und die andere ist die regelmäßige Rekonstruktion der Daten. Beide Methoden haben ihre Vor- und Nachteile. Echtzeitaktualisierungen stellen die Unmittelbarkeit der Abfragedaten sicher, beeinträchtigen jedoch die Leistung und erfordern die Einbettung von Code. Da Datenaktualisierungen unregelmäßig erfolgen, kann es außerdem zu Fragmentierung kommen. Die regelmäßige Rekonstruktion von Daten geht zu Lasten der Echtzeitleistung. Wenn sich die meisten Daten nicht ändern, führt dies zu unnötigen statistischen Berechnungen. Wenn sich die Daten jedoch häufig ändern, ist die regelmäßige Rekonstruktion der Daten offensichtlich effizienter und vermeidet die Situation vergrabener Punkte. Natürlich kann das Einbetten von Anwendungen auch durch Trigger vermieden werden. Weitere Informationen finden Sie unter //www.jb51.net/article/213062.htm

Materialisiertes Ansichtstool (Flexviews)

In MySQL gibt es ein Open-Source-Tool namens Flexviews, das zum Extrahieren von Daten aus dem Datenbank-Binlog verwendet wird, um Datenstatistiken zu vervollständigen. Es ähnelt in gewisser Weise einer Ansicht, unterscheidet sich jedoch von einer Ansicht darin, dass die von Flexviews generierte Datentabelle eine physische Tabelle ist, weshalb sie als materialisierte Ansicht bezeichnet wird. Darüber hinaus unterstützt Flexviews auch inkrementelle Updates und vollständige Updates. Es wird empfohlen, inkrementelle Aktualisierungen zu verwenden, um zu vermeiden, dass die Statistiken für alle Zeilen neu erstellt werden müssen. Bei inkrementellen Updates wird vor der Durchführung des Updates geprüft, welche Zeilen sich geändert haben. Dies ist leistungsstärker als bei vollständigen Updates. Um Datenänderungen zu erkennen, muss jedoch eine Ansicht eingeführt werden, um das Änderungsprotokoll der Datenzeilen aufzuzeichnen.

Zähltabelle

Bei der tatsächlichen Entwicklung müssen wir häufig einige Vorgänge zählen, beispielsweise die Anzahl der Artikellesungen und Likes. Werden die Zählwerte in die gleiche Tabelle eingetragen, kann es beim Aktualisieren zu Parallelitätsproblemen kommen. Durch die Verwendung einer separaten Zähltabelle können Probleme mit der Ungültigkeit des Abfragecaches vermieden und einige fortgeschrittenere Techniken ermöglicht werden. Beispielsweise eine Datentabelle, die die Anzahl der Artikel-Leser und Likes zählt:

CREATE TABLE t_article_counter (
  Artikel-ID INT PRIMARY KEY,
  read_cnt INT UNSIGNED NOT NULL,
  Lob_cnt INT UNSIGNED NOT NULL
);

Beim Aktualisieren der Leseanzahl können Sie die in MySQL integrierte Inkrementierungsoperation verwenden:

UPDATE t_article_counter 
SETze read_cnt = read_cnt + 1
WO Artikel-ID = 1;

Mit dieser Methode kann die Operation einzeilig und für Dinge gegenseitig ausschließend gestaltet werden, wodurch die Transaktionen serialisiert werden und Parallelitätsprobleme vermieden werden. Dies wirkt sich jedoch auf die Anzahl gleichzeitiger Anfragen aus. Sie können einem Artikel mehrere Slots hinzufügen, um die Parallelität zu erhöhen.

CREATE TABLE t_article_counter (
  id INT NICHT NULL PRIMÄRSCHLÜSSEL,
  Steckplatz TINYINT UNSIGNED,
  Artikel-ID INT,
  read_cnt INT UNSIGNED NOT NULL,
  lob_cnt INT UNSIGNED NOT NULL,
  INDEX(Artikel-ID)
);

Zu diesem Zeitpunkt können Sie 100 Slots erstellen, um die Daten zu initialisieren, und beim Aktualisieren Folgendes tun:

UPDATE t_article_counter
SETze read_cnt = read_cnt + 1 
WO Slot = RAND() * 100 UND Artikel-ID = 1;

Um die Gesamtzahl der Lesevorgänge für einen Artikel zu ermitteln, müssen Sie eine SUM-Operation verwenden:

Wählen Sie SUM (read_cnt) aus t_article_counter
WO Artikel-ID = 1;

Bei dieser Methode wird tatsächlich Speicherplatz gegen Zeit getauscht und die Parallelität erhöht.

Zusammenfassen

Dieser Artikel beschreibt, wie man statistische Datentabellen entwirft. Der Schlüssel liegt in der Art des Unternehmens. Bei Tabellen mit niedriger Aktualisierungsfrequenz und kleinem Datenvolumen ist die Verwendung von Echtzeitsynchronisierung oder direktem SUM kein Problem. Für große Datentabellen mit häufigen Aktualisierungen können unabhängige statistische Tabellen verwendet werden. Gleichzeitig kann bei einer hohen Parallelität die statistische Tabelle das Hinzufügen mehrerer Slots zu jeder Entität in Betracht ziehen, um die Parallelität zu erhöhen. Wenn Sie Daten regelmäßig synchronisieren möchten, können Sie auch das Plug-In „Materialisierte Ansicht“ von Flexviews verwenden.

Oben finden Sie Einzelheiten zum Entwerfen statistischer Datentabellen in MySQL. Weitere Informationen zum Entwerfen statistischer Datentabellen in MySQL finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Zusammenfassung gängiger Fehler beim Entwurf von MySQL-Tabellen
  • MySQL-Datentabellenpartitionierungsstrategie und Vor- und Nachteileanalyse
  • Erweiterte MySQL-Funktionen - detaillierte Erläuterung des Konzepts und des Mechanismus der Datentabellenpartitionierung
  • So erstellen Sie einen Tabellenindex in MySQL
  • So verwalten Sie MySQL-Indizes und Datentabellen
  • Beispiel für die MySQL-Methode zum Löschen von Daten und Datentabellen
  • Einstellen der Engine MyISAM/InnoDB beim Erstellen einer Datentabelle in MySQL
  • So löschen Sie eine MySQL-Tabelle
  • Über MySQL müssen Sie die Datentypen und Operationstabellen kennen
  • Detaillierte Erklärung zum Erstellen einer Datentabelle in MySQL und zum Herstellen von Primär- und Fremdschlüsselbeziehungen
  • Eine einfache Methode zum Zusammenführen und Entfernen doppelter MySQL-Tabellen

<<:  Detaillierte Erklärung des this-Pointing-Problems von JavaScript-Prototypobjekten

>>:  Detailliertes Tutorial zur Installation von Harbor Private Warehouse mit Docker Compose

Artikel empfehlen

Anwendung von Hadoop-Zählern und Datenbereinigung

Datenbereinigung (ETL) Vor dem Ausführen des MapR...

So erstellen Sie eine Datenbank in Navicat 8 für MySQL

Beim Entwickeln einer Website müssen Sie häufig e...

jQuery-Plugin zur Implementierung des Minesweeper-Spiels (1)

Dieser Artikel teilt den spezifischen Code des er...

Detaillierte Erklärung zur Verwendung der benutzerdefinierten Vue-Baumsteuerung

In diesem Artikel erfahren Sie, wie Sie das benut...

Informationen zur ROS2-Installation und zur Verwendung der Docker-Umgebung

Inhaltsverzeichnis Warum Docker verwenden? Docker...

Detaillierte Erläuterung des Fehlerproblems der Case-When-Anweisung

Vorwort In der MySQL-Datenbank verwenden wir manc...

Beispiel für handschriftliches Vue2.0-Daten-Hijacking

Inhaltsverzeichnis 1: Webpack erstellen 2. Datend...

js Canvas realisiert Slider-Verifizierung

In diesem Artikelbeispiel wird der spezifische Co...

Beispiel für eine Methode zur Überprüfung des Status einer Linux-Firewall

So überprüfen Sie den Status der Linux-Firewall 1...

Der Prozess der Installation und Konfiguration von Nginx in Win10

1. Einleitung Nginx ist ein kostenloser, quelloff...

Attribute und Verwendung von INS- und DEL-Tags

ins und del wurden in HTML 4.0 eingeführt, um Auto...

VMWare15 installiert Mac OS-System (grafisches Tutorial)

Installationsumgebung Windows 10 VMware Workstati...