Асинхронная массовая (пакетная) вставка в MySQL (или MongoDB?) Через Node.js - PullRequest
0 голосов
/ 19 февраля 2012

Прямо до истощения ->.

Проблема: сделать асинхронные массовые вставки (необязательно массовые, если MySql может их обработать) с использованием Node.js (из форм .NET и PHP)

Пример: Предположим, что у меня есть 40 (настраиваемых) функций, выполняющих некоторую работу (асинхронную), и каждая из них добавляет запись в таблицу после своей отдельной итерации, теперь очень вероятно, что одновременно более одной функции выполняет вызов вставки. Может ли MySql справиться с этим напрямую? Учитывая, что там будет поле Автообновление.

В C # (.NET) я бы использовал dataTable для хранения всех строк каждой функции и в конце массово вставил dataTable в таблицу базы данных. и запустить много потоков для каждой функции.

Какой подход вы предложите в этом случае,

Должен ли подход изменить, если мне нужно обработать 10 000 или 4 миллиона строк на таблицу? ALso Схема БД не собирается меняться, будет ли MongoDB лучшим выбором для этого?

Я новичок в Node, NoSql и на этапе изучения noob. Так что, если вы сможете дать какое-то объяснение своему ответу, это будет здорово.

Спасибо.

РЕДАКТИРОВАТЬ : Ответ: Ни MySql, ни MongoDB не поддерживают какие-либо групповые вставки, под капотом это просто цикл foreach. Оба они способны обрабатывать большое количество соединений одновременно, производительность во многом зависит от ваших требований и производственной среды.

1 Ответ

2 голосов
/ 20 февраля 2012

1) в MySql запросы выполняются последовательно для каждого соединения.Если вы используете одно соединение, ваши 40 ~ функций приведут к 40 запросам в очереди (через явную очередь в библиотеке mysql, ваш код или системную очередь на основе примитивов синхронизации), необязательно в том же порядке, в котором вы запустили 40 функций.MySQL не будет иметь проблем с условиями гонки с полями автообновления в этом случае

2), если вы действительно хотите выполнить 40 запросов параллельно, вам нужно открыть 40 подключений к MySQL (что не очень хорошая идеяс точки зрения производительности, но опять же, Mysql предназначен для правильной обработки автоинкрементов для нескольких клиентов)

3) В протоколе Mysql на уровне проводов нет специальной команды массовой вставки, любая библиотека предоставляет объемную информациюфактически вставьте api, выполняя длинный запрос 'insert ... values'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...