Ich muss in die MySQL-Datenbank eine Menge Daten für etwa 5 mal pro Sekunde schreiben. Was ist der schnellste Weg: Fügen Sie jede 1/5 Sekunde ein oder erstellen Sie eine Warteschlange und fügen Sie alle gespeicherten Daten alle ~ 5 Sekunden ein? Wenn der zweite Weg besser ist - ist es möglich, in 1 Tabelle mit 1 Anfrage ein paar Zeilen einzufügen?Einfügen in die Datenbank
Antwort
In Anbetracht der Häufigkeit der Einfügungen Seine besser zu gehen Sie mit dem zweiten Ansatz, der in der Warteschlange ist und dann auf einmal hinzufügen.!
Aber Sie sollten diese Szenarien betrachten zuerst:
Ist Ihr System Echtzeit.? Ja, dann, was ist die maximale Verzögerung, die Sie sich leisten können (wie es dauert ~ 5 Sekunden für die nächste Insertion und Daten werden beibehalten/verfügbar)?
Wie sind die Chancen, dass falsche Werte/Fehler in Daten kommen, als ob eine Daten falsch ist, verlieren Sie alle Ruhe, wenn die Abfrage fehlschlagen muss.
Verwenden mehrerer Pufferpools mit innodb_buffer_pool_instances
. es kann von der Anzahl der Kerne auf der Maschine abhängen. Verwenden Sie Partitioning
der Tabelle.
Sie können Daten gemeinsam mit XML
einfügen.
Sie einen Einsatz mit allen Daten witho so etwas wie dies machen:
INSERT INTO table (field1, field2,... , fieldN)
VALUES
(value1_1', value1_2,... , value1_N),
(value2_1', value2_2,... , value2_N),
...
(valueM_1', valueM_2,... , valueM_N);
Da jede Transaktion mit einem festen Kosten kommt, würde ich sagen, dass ein mehrzeiliges alle paar Sekunden einfügen zu tun ist besser . Bei einigen der Systeme, die wir bei der Arbeit verwenden, werden Hunderte von Zeilen zwischengespeichert, bevor sie alle auf einmal eingefügt werden.
Von der MySQL documentation Sie können ein tun mehrzeiligen wie so ein:
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
Meine Erfahrung ist, dass, wenn Daten in einer MySQL-Datenbank einfügen es schneller ist mit Chargen zu arbeiten.
So ist die langsamer Option ausführt, mehrere Insert-Abfragen:
INSERT INTO my_table VALUES (1, "a"); INSERT INTO my_table VALUES (2, "b");
Die schneller Option wäre:
INSERT INTO my_table VALUES (1, "a"), (2, "b");
- 1. Einfügen in die Datenbank
- 2. TDD Einfügen in die Datenbank
- 3. yii2 in die Datenbank einfügen
- 4. Einfügen von Datum in die Datenbank, wenn wir Daten in die Datenbank einfügen jedes Mal Anzeige Datum einfügen in asp.net
- 5. Externe Daten in die Datenbank einfügen
- 6. Combobox-Werte in die Datenbank einfügen?
- 7. Einfügen in die Datenbank von Joomla Formularfelder
- 8. Einzelne Einträge in die Datenbank einfügen
- 9. können keine Daten in die Datenbank einfügen
- 10. Einfügen von Text in die Datenbank
- 11. Integer-Variable in die Datenbank einfügen
- 12. Exakten Datenwert in die Datenbank einfügen
- 13. Silex kann nicht in die Datenbank einfügen
- 14. Wie Datensatz in die Datenbank einfügen Schleife
- 15. $ _POST keine Werte in die Datenbank einfügen
- 16. kann keine Daten in die Datenbank einfügen
- 17. wie Einfügen in die Datenbank zu stoppen
- 18. Array-Werte in die Datenbank einfügen
- 19. Einfügen in Access-Datenbank
- 20. Datensatzeinträge in Datenbank einfügen
- 21. Befehl einfügen Nicht in Datenbank einfügen?
- 22. PHP in MySQL-Datenbank einfügen
- 23. PHP Tabelle in Datenbank einfügen
- 24. PHP - In Datenbank-Problem einfügen
- 25. In SQLite-Datenbank einfügen Android
- 26. Daten in cpanel Datenbank einfügen
- 27. Datum in MSAccess-Datenbank einfügen.
- 28. Einfügen in Datenbank-Problem pdo
- 29. Einfügen in Datenbank mit PHP
- 30. Videoinfo in die Datenbank über die API einfügen
Ja, das System ist in Echtzeit. Die Daten sind eine einfache Base64 mit ~ 100 Datenbytes. – Ockonal
Wenn ja, würde ich mit Single-Insertion und mit Connection Pooling auf DAO-Ebene gehen. Da Sie es sich nicht leisten können, Daten in RTS zu verlieren, ist auch die Zeit entscheidend. Hoffe das hat dir geholfen. :) –
Danke für die Hilfe;) – Ockonal