Ich erstelle ein E-Commerce-Backend, in dem in meinem Produkt die folgenden Zählerattribute enthalten sind:
%Vor%Die aktuellen Datenbankspalten, die ich für die Produktdatenbanktabelle habe, ist
%Vor%Wie in dem folgenden Blog Wanelo Engineering Blog Das Implementieren eines Zählers, der häufig in einer einzelnen Zeile aktualisiert werden kann, würde eine Zeilensperre auf innodb verursachen, die, wenn sie häufig aktualisiert wird, in der Anwendung zu Deadlock-Situationen führen kann. Aber die Lösung dafür ist im Blog ziemlich genau erklärt, worüber ich eine Idee hatte. Was passiert aber, wenn einem Produkt mehrere Zähler zugeordnet sind, die gleichzeitig aktualisiert werden können, wenn die App wächst? Wie sollte ich die Datenbanktabelle für die Zähler entwerfen? Sollte ich separate Tabellen viz
pflegen müssen %Vor%Durch die Beibehaltung einer separaten Tabelle, selbst wenn eine gleichzeitige Aktualisierung für ein Produkt erfolgt (wie + Kommentar + Ansicht), wird sie separat aktualisiert und verringert die Wahrscheinlichkeit von Situationen, in denen die Zeilensperre vorliegt. Wenn es in einer einzelnen Tabelle ist und wenn die Aktualisierungen für alle gleichzeitig auftreten, kann dies zu einem Problem führen.
Frage: Gibt es eine bessere Möglichkeit, die Tische für einen Schalter zu entwerfen? Irgendwelche Vorschläge bitte?
Ein Zähler in der Produkttabelle für Ansichten ist in Ordnung.
Eine separate Tabelle für Likes mit Spalten wie (product_id, user_id), sodass jeder Benutzer ein Produkt nur einmal mögen kann. Sonst wären sie in der Lage zu mampfen wie wenn es nur ein einfacher Zähler wäre.
Eine separate Tabelle für Kommentare mit Spalten wie (product_id, comment_text, date .. etc.)
Ist das, was Sie fragen?
Das Verwenden von Hintergrundwarteschlangen zum Puffern von Einfügungen / Aktualisierungen, wie in dem Link, den Sie freigegeben haben, vorgeschlagen wird, ist ziemlich normal, und ich würde dasselbe vorschlagen.
Sie können mehrere Zähler auf die gleiche Weise wie einen einzelnen Zähler neu berechnen. Die Anzahl der Aufrufe kann in Memcached / Redis zwischengespeichert werden, oder Sie können sie in einer separaten Tabelle speichern (obwohl ich vorschlagen würde, hierfür nur eine Analyselösung zu verwenden).
In Ihrem Arbeiter:
%Vor%Und in Ihrem Modell:
%Vor%Ein weiterer Vorschlag wäre, diese Ansichtszählfunktion in ein Problem aufzuteilen.
Tags und Links mysql deadlock e-commerce counter