Сейчас используем EMySQL. Сервер (некоторое время уже) перегружен, основная нагрузка (с моей стороны) - это вставка и обновление. Сейчас пишут в базу воркеры, обслуживающие устройства. Раньше был пул MySQL воркеров (поверх пула EMySQL). Случаются таймауты. Хотелось бы запускать запросы асинхронно, впоследствии получая подтверждения; при этом не хочется городить пул отдельных воркеров для этого (как раньше было): душа не лежит. Один из вариантов: использовать функции EMySQL более низкого уровня. Но, может быть, есть уже библиотека для асинхронной работы? Ближайший аналог - RabbitMQ erlang client.--
--
Страница рассылки: http://groups.google.com/group/erlang-russian
Новости: http://erlanger.ru
Чат: xmpp://erl...@conference.jabber.ru
Чат для оффтопа: xmpp://erlang...@conference.jabber.ru
Правила, действующие в чате и рассылке: http://erlanger.ru/ru/erlang-at-conference-jabber-ru
Написать письмо: erlang-...@googlegroups.com
Отписаться: erlang-russia...@googlegroups.com
думаю что под асинхронностью подразумевается то что процесс который хочет выполнить запрос не блочится, а результат выполнения запроса получает потом в виде колбека или сообщения.
только вот если база не справляется, то очередь запросов будет только разрастаться. в таких случаях лучше однотипные INSERT-ы накапливать и потом вставлять одним запросом. Или если это не возможно переносить эти данные в nosql решение
Разве что динамическим расширением пула. Это то, что требуется?
я так думаю что компилирование запроса это не основная проблема. Больше нагрузки создает перестройка индекса, проверка ключей и тд.
Я бы юзал динамический, не скомпилированный, и вставлял бы после того как накопится более 1000 записей, или до этого успевает сработать таймер.
Насколько я помню довольно старые бенчмарки, вариант с вставлением нескольких тысяч строк одним инсертом сильно лучше, чем несколько тысяч раз дернуть инсерт.
On Tuesday, December 4, 2012 4:37:25 PM UTC+2, Max Lapshin wrote:Насколько я помню довольно старые бенчмарки, вариант с вставлением нескольких тысяч строк одним инсертом сильно лучше, чем несколько тысяч раз дернуть инсерт.
Спасибо. Для моего случая, думаю, сотни-двух хватит; у меня сейчас порядка десятка записей в секунду.А по самому первому вопросу, я так понял, новостей нет. Придумал еще архитектуру: по одному воркеру СУБД на один типовой инсерт; каждый накапливает очередь, потом группой вставляет, при этом перехватывает исключения; при наличии исключения повторяет позже.
Правильно понял, что тормозит на 10 инсертов/апдейтов в секунду? Какая-то скромная совсем цифра... Или там запросы сложные? Или слишком строгие настройки бд?
4 декабря 2012 г., 19:09 пользователь Andy <avel...@positrace.com> написал:
On Tuesday, December 4, 2012 4:37:25 PM UTC+2, Max Lapshin wrote:Насколько я помню довольно старые бенчмарки, вариант с вставлением нескольких тысяч строк одним инсертом сильно лучше, чем несколько тысяч раз дернуть инсерт.
Спасибо. Для моего случая, думаю, сотни-двух хватит; у меня сейчас порядка десятка записей в секунду.А по самому первому вопросу, я так понял, новостей нет. Придумал еще архитектуру: по одному воркеру СУБД на один типовой инсерт; каждый накапливает очередь, потом группой вставляет, при этом перехватывает исключения; при наличии исключения повторяет позже.У вас множество клиентов, каждый со своей транзакцией и вы планируете их все вместе вставлять? Что здесь от ACID остается?
On Tuesday, December 4, 2012 6:09:49 PM UTC+2, Boris Timokhin wrote:4 декабря 2012 г., 19:09 пользователь Andy <avel...@positrace.com> написал:
On Tuesday, December 4, 2012 4:37:25 PM UTC+2, Max Lapshin wrote:Насколько я помню довольно старые бенчмарки, вариант с вставлением нескольких тысяч строк одним инсертом сильно лучше, чем несколько тысяч раз дернуть инсерт.
Спасибо. Для моего случая, думаю, сотни-двух хватит; у меня сейчас порядка десятка записей в секунду.А по самому первому вопросу, я так понял, новостей нет. Придумал еще архитектуру: по одному воркеру СУБД на один типовой инсерт; каждый накапливает очередь, потом группой вставляет, при этом перехватывает исключения; при наличии исключения повторяет позже.У вас множество клиентов, каждый со своей транзакцией и вы планируете их все вместе вставлять? Что здесь от ACID остается???? Элементарные инсерты (конкретно один инсерт в одну таблицу на одну точку) нельзя группировать? Вроде ж ACID для связанных операций предназначался (хорошо помню связанные транзакции по бухгалтерии)?
Я не знаю что там в бухгалтерии и какое у вас приложение. Если вы уверены, что последствия ваших инсертов, вообще никак не пересекаются в приложении, то конечно.
...
Наложите надуманный пример на ваше приложение.