MySQL - INSERT DELAYED <- veraltet Was jetzt?


7

Ich habe mir gerade die https://dev.mysql.com/doc/refman/5.7/en/insert-delayed.html des MySQL-Dokuments angesehen

Ich hatte vor, ein INSERT DELAYED zu verwenden, aber ich sehe, dass dies veraltet ist.

Ich benötige diese Funktionalität weiterhin, um mit einem PHP-Code kompatibel zu sein, der einige sehr große Datenübertragungen verarbeitet. Ich bin ziemlich glücklich, mein PHP zu aktualisieren, aber ich habe keine Ahnung, wie ich jetzt die gleiche Funktionalität erreichen kann.

Wie würden wir das gleiche Ergebnis wie beim herkömmlichen INSERT DELAYED erzielen, wenn es veraltet ist?


Führen Sie eine Masseneinfügung in eine MyISAM-Tabelle durch?
RolandoMySQLDBA

Nein, es ist eine InodeDB und eine inkrementelle Synchronisierung zwischen zwei Datenbanken, die per Skript ausgeführt werden.
TolMera

Ist das Ziel, irgendwann viele Zeilen einzufügen , aber mit minimalen Auswirkungen auf andere Abfragen? Im Allgemeinen ist es besser, wenn InnoDB es selbst herausfindet. Vielleicht haben Sie einige nützliche Tipps bekommen hier .
Rick James

Können Sie die Replikation anstelle eines Skripts verwenden?
Rick James

Antworten:


5

Laut MySQL 5.5. Dokumentation

INSERT DELAYED funktioniert nur mit den Tabellen MyISAM, MEMORY, ARCHIVE und BLACKHOLE. Bei Motoren, die DELAYED nicht unterstützen, tritt ein Fehler auf.

Sie könnten ein Downgrade auf MySQL 5.5 durchführen (natürlich mache ich Witze). Ich habe drei Vorschläge. Bitte schauen Sie in sie.

VORSCHLAG # 1

Sie können MySQL Replication einrichten und Folgendes ausführen

  • Masseneinsatz in eine Tabelle auf dem Master, dessen Speicher-Engine BLACKHOLE ist.
  • Die gleiche Tabelle auf dem Slave wäre InnoDB. Führen Sie Ihre SELECTs auf dem Slave durch
  • Siehe meinen 3,5 Jahre alten Beitrag Wie man so etwas wie UPDATE DELAYED in MySQL macht

VORSCHLAG # 2

Optimieren der InnoDB-Umgebung für schnellere Schreibvorgänge. Weitere Informationen finden Sie in meinen 4,5 Jahre alten Beiträgen. Wie verwende ich die Einfügungsverzögerung mit der InnoDB-Engine und verwende weniger Verbindungen für Einfügeanweisungen? und MySQL laden von infile stecken auf Festplatte warten

VORSCHLAG # 3

Passen Sie die Masseneinfügung an, um erweiterte Einfügungen zu verwenden, die eine feste Anzahl von Zeilen gleichzeitig laden, wie dies bei einem mysqldump der Fall ist.


1

Ich verstehe Ihre Frage so, dass Sie die Arbeit bis nach einem bestimmten Zeitraum verschieben müssen.

Unter diesen Umständen würde ich eine Warteschlange verwenden und meinen Warteschlangenjob für die erforderliche Zeit verschieben.

Als Beispiel https://laravel.com/docs/5.3/queues#delayed-dispatching

Obwohl aus den Dokumenten "Warteschlange zum Einfügen, wenn die Tabelle von keinem anderen Thread verwendet wird" nicht wie mit dieser Methode erreichbar ist, müssten Sie diese Funktionalität in Ihrem Job implementieren, wenn dies erforderlich ist.


Ist das ohne Laravel möglich? Angeblich beantwortet dies meine Frage nicht wirklich.
TolMera

Ich hätte meine Antwort als Kommentar angegeben, obwohl ich nicht genug Repräsentanten habe. Ja, es ist ohne Laravel möglich. Sie können sich rabbitmq.com/tutorials/tutorial-two-php.html
64k
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.