через прототип с forEach (), который должен пропустить свойства цепи прототипа:
Object.prototype.each = function(f) {
var obj = this
Object.keys(obj).forEach( function(key) {
f( key , obj[key] )
});
}
//print all keys and values
var obj = {a:1,b:2,c:3}
obj.each(function(key,value) { console.log(key + " " + value) });
// a 1
// b 2
// c 3
MySQL имеет расширенный стиль SQL, который может использоваться, где масса вставляет, помещаются в несколько за один раз:
INSERT INTO `table` (`id`, `event`) VALUES (1, 94263), (2, 75015), (3, 75015);
Я буду обычно собирать несколько сотен вставлять-частей в строку прежде, чем выполнить сам SQL-запрос. Это уменьшит издержки парсинга и коммуникации путем пакетной обработки их самостоятельно.
Это делает одно распространение в прямом и обратном направлениях на запрос, который Вы отправляете (независимо от того, является ли это в транзакции или не).
Это возможно в MySQL, для использования "расширенный вставляют" синтаксис, который позволяет Вам вставлять несколько (или действительно, многие) строки в отдельном операторе. Это обычно считают Хорошей Вещью.
Распространение в прямом и обратном направлениях к серверу БД не является тем же как распространением в прямом и обратном направлениях к базе данных по диску.
Прежде чем Вы решите, что распространения в прямом и обратном направлениях являются узким местом, сделайте некоторые фактические измерения.
Существуют способы вставить несколько строк с единственной вставкой, в зависимости от Вашего DBMS. Прежде чем Вы инвестируете усилие по кодированию, выясните, принесет ли оно, вероятно, Вам пользу.
При использовании MySQL 4.x несколько лет назад, мы столкнулись с жестким пределом размера запроса, который не настраивался.
Это, вероятно, не поможет Вам как:
Удачи!
Трудно сказать, не видя Ваш код, но я предполагаю, что Вы выполняете операторы по одному. Так, Вы получите одно распространение в прямом и обратном направлениях на оператор вставки.
В MSSql можно выполнить несколько вставок в отдельном операторе:
cmd.ExecuteNonQuery "insert table values (1) insert table values (2)"
Таким образом, можно создать большую строку и выполнить ее (я думаю, что она будет иметь предел), я предполагаю, что это будет работать на MySQL.
Также в MSSQL у Вас есть пакетная вставка (поиск "SqlBulkCopy"), в MySQL, возможно, пытаются загрузить данные из временного файла.
Это зависит от того, где вы вызываете оператор SQL. Я попробовал один раз с драйвером MySQL JDBC и получил сообщение об ошибке, что ограничение составляет 1 МБ, но его можно настроить.
Я не стал пытаться настроить его, а просто разбил операторы SQL на более мелкие части.