powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Асинхронная работа с БД
15 сообщений из 15, страница 1 из 1
Асинхронная работа с БД
    #36967892
Robert Ayrapetyan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите готовое решение для асинхронной работы с SQL БД (в частности - вставки данных), с очередью, дампом\рестором в случае падения и т.п.
...
Рейтинг: 0 / 0
Асинхронная работа с БД
    #36967953
Robert Ayrapetyan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поясню.
Имеется высоконагруженный сервер (порядка M запросов\сек). Необходимо все запросы загонять в постоянное хранилище с последующими генерациями отчетов. Лучше всего для данной задачи в качестве хранилища подходит SQL БД. Но есть огромная проблема - скорость вставки в SQL БД, которая равна N, причем N много меньше M. О синхронной вставке не может быть и речи. Таким образом, необходимо реализовать очередь, причем для надежности в отдельном процессе, с постоянной памятью и дампом\восстановлением в файл и прочими наворотами в случае падения даже этого отдельного процесса.
Вопрос в следующем: есть ли какие-либо готовые решения? Конечно, можно реализовать этот велосипед самостоятельно, но нет времени, и не верится, что нет готового решения, написанного, отлаженного и выложенного в открытый доступ. Единственное ограничение - коммерческие решения не подходят.
p.s. искал много и долго, но ничего не нашел. Вообще. Как будто такой проблемы не существует.
...
Рейтинг: 0 / 0
Асинхронная работа с БД
    #36967960
Robert Ayrapetyan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кое-что конечно же нашлось, но к огромному удивлению - все с приставкой "windows" - ms sql service broker и azure, и то они лишь отдаленно напоминают необходимый мне инструмент.
...
Рейтинг: 0 / 0
Асинхронная работа с БД
    #36968340
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Robert Ayrapetyan Имеется высоконагруженный сервер (порядка M запросов\сек)С этого момента поподробнее - чем занимается ваш сервер. (в хрустальном шаре я вижу некую OLTP базу с M транзакций \сек)
Robert Ayrapetyan Необходимо все запросы загонять в постоянное хранилище с последующими генерациями отчетов.Наверное некоторые запросы (типа отчет) лучше будет выполнять на отдельном сервере, так?
Robert Ayrapetyan Лучше всего для данной задачи в качестве хранилища подходит SQL БД.Этот самый отчетный сервер вы хотите реализовать на базе MS SQL server, так?
авторНо есть огромная проблема - скорость вставки в SQL БД, которая равна N, причем N много меньше M.У вас не получилось организовать синхронную вставку, так?
Robert Ayrapetyan Таким образом, необходимо реализовать очередь, причем для надежности в отдельном процессе, с постоянной памятью и дампом\восстановлением в файл и прочими наворотами в случае падения даже этого отдельного процесса.А вот тут не все так однозначно.
Robert Ayrapetyan Единственное ограничение - коммерческие решения не подходят.Почему? По религиозным соображениям или просто денег нет?
Robert Ayrapetyan p.s. искал много и долго, но ничего не нашел.Даже если я прав в своих предположениях картина еще очень туманна.
Robert Ayrapetyan кое-что конечно же нашлось, но к огромному удивлению - все с приставкой "windows" - ms sql service broker и azureНу что вы хотите ведь у вас Лучше всего для данной задачи в качестве хранилища подходит (MS?) SQL БД.
Robert Ayrapetyan Как будто такой проблемы не существует.Скорее всего вы странного хотите.
...
Рейтинг: 0 / 0
Асинхронная работа с БД
    #36968361
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Robert AyrapetyanО синхронной вставке не может быть и речи. Таким образом, необходимо реализовать очередь, причем для надежности в отдельном процессеТак вставляйте асинхронно в отдельном процессе.

Robert Ayrapetyanпричем для надежности в отдельном процессе, с постоянной памятью и дампом\восстановлением в файл и прочими наворотами в случае падения даже этого отдельного процесса.А тут нестыковочка - вам нужна отдельная СУБД для такого хранения, причём она будет работать синхронно. Соответственно, не будет-ли медленно работать уже эта другая СУБД?

Robert AyrapetyanВопрос в следующем: есть ли какие-либо готовые решения? Конечно, можно реализовать этот велосипед самостоятельно, но нет времени, и не верится, что нет готового решения, написанного, отлаженного и выложенного в открытый доступ. Единственное ограничение - коммерческие решения не подходят.
p.s. искал много и долго, но ничего не нашел. Вообще. Как будто такой проблемы не существует.Ну, задача слишком общая. Хотя что-то есть, например, можно действительно использовать сервис-брокер или лучьше даже надёжный транспорт типа MSMQ.

Robert Ayrapetyanp.s. искал много и долго, но ничего не нашел. Вообще. Как будто такой проблемы не существует.Обычно в таких случаях делают асинхронную запись в СУБД и дополнительно запись в файлы для надёжности и восстановления на случай даунтайсма сервера.

Более быстрое и простое решение не могу придумать.
...
Рейтинг: 0 / 0
Асинхронная работа с БД
    #36968533
Robert Ayrapetyan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG1257С этого момента поподробнее - чем занимается ваш сервер. (в хрустальном шаре я вижу некую OLTP базу с M транзакций\сек)
в данном случае неважно - пусть это будет простой echo-сервер, а в базу нужно складывать все запросы клиентов, как лог.
SERG1257Наверное некоторые запросы (типа отчет) лучше будет выполнять на отдельном сервере, так?
безусловно, отчеты будут генериться на отдельном сервере. В данном случае это тоже не важно - это уже задача репликации.
SERG1257Этот самый отчетный сервер вы хотите реализовать на базе MS SQL server, так?
нет, он не подходит из-за коммерческ. лицензий.
SERG1257У вас не получилось организовать синхронную вставку, так?
фактически да. Синхронная вставка делает ответ echo-сервера клиенту недопустимо медленным (скажем, в десятки раз).
SERG1257Почему? По религиозным соображениям или просто денег нет?
изначально так задача не стояла. Просто если такой простой механизм, как менеджер очерди, потянет за собой коммерческое хранилище и еще кучу ненужных вещей, то это вообще не то решение. И да, денег нет ).
[quote alexeyvg]Так вставляйте асинхронно в отдельном процессе./quote]
спасиб )
alexeyvgА тут нестыковочка - вам нужна отдельная СУБД для такого хранения, причём она будет работать синхронно. Соответственно, не будет-ли медленно работать уже эта другая СУБД?
тут мое упущение - важный момент. Нагрузка на мой сервер непостоянна. Т.е. за периоды "затишья" накопившаяся очередь гарантированно опустошиться. Но в периоды нагрузки - работа с постоянным хранилищем должна быть асинхронной.
alexeyvgОбычно в таких случаях делают асинхронную запись в СУБД и дополнительно запись в файлы для надёжности и восстановления на случай даунтайсма сервера.
именно изобретательством данного велосипеда я и не хочу заниматься.

Чтоб стало более понятно - gearman впринципе очень близко к тому, что мне нужно - у него и очереди хранятся в постоянной памяти (в той же SQL БД), и распараллеливание. Но судя по номеру последней версии (0.14), кол-ву багов и новизне - это не решение для продакшн системы. Пока его не удалось даже собрать с девятым постгресом. И вообще - он несколько другой направленности, в основном распареллелить задачи, хотя используя его возможности можно реализовать то что и мне нужно.
...
Рейтинг: 0 / 0
Асинхронная работа с БД
    #36969815
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В последних версиях SQL сервера есть потоковая вставка данных - именно то что вам необходимо
она подходит для вставки данных приходящих потоком от оборудования, для mobile-операторов, для интернет-операторов
...
Рейтинг: 0 / 0
Асинхронная работа с БД
    #36969977
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Robert Ayrapetyan Синхронная вставка делает ответ echo-сервера клиенту недопустимо медленным (скажем, в десятки раз).Ну это если одиночными инсертами вставлять
Я бы направил вывод вашего сервера в текстовый файл, а затем по какому либо событию (по таймеру например и/или по достижению определенного размера) переключал лог, а свежезакрытый файл качал в СУБД. Если это велосипед, то удачи вам в поисках оптимального решения.
...
Рейтинг: 0 / 0
Асинхронная работа с БД
    #36970192
Robert Ayrapetyan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spВ последних версиях SQL сервера есть потоковая вставка данных - именно то что вам необходимо
yточните пожалyйста - какого именно сервера. Если MS - то он не подходит по описаным выше причинам. Неyжели только MS реализовал потоковю вставкy?

SERG1257Я бы направил вывод вашего сервера в текстовый файл, а затем по какому либо событию (по таймеру например и/или по достижению определенного размера) переключал лог, а свежезакрытый файл качал в СУБД. Если это велосипед, то удачи вам в поисках оптимального решения.
я дyмал об этом решении, но оно не подходит по причине ограниченности возможностей известных мне серверов. Например, необходимо вызвать несколько хранимых процедyр (раскидать данные по нескольким таблицам) внyтри основного запроса. Постгресовский COPY очень примитивен в этом плане, MYSQL-ный полyчше, но тоже недостаточно гибок. И, опять же - идет привязка к БД. Дyмаю, придется все же добивать gearman.

p.s. становится понятно, почемy так много коммерческих решений крyтятся на MS SQL, они оказывается единственные, кто реализовал реальнyю OLAP-системy. Еще есть y оракла job-ы, но она тоже стоит денег. postgres и mysql явно облажались здесь, хотя это вообще не задача БД - я как раз ищy отдельный менеждер очереди.
...
Рейтинг: 0 / 0
Асинхронная работа с БД
    #36970834
Robert Ayrapetyan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пока отвечу себе сам - вот интересный тест по моему вопросу:
http://bhavin.directi.com/rabbitmq-vs-apache-activemq-vs-apache-qpid/
Это, так сказать, классические решения.
Судя по объемам кода - реализовывать все это, пусть даже не так универсально, точно жесть.
...
Рейтинг: 0 / 0
Асинхронная работа с БД
    #36970941
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Robert Ayrapetyan Например, необходимо вызвать несколько хранимых процедyр (раскидать данные по нескольким таблицам) внyтри основного запросаНу так грузите в стейджинговую таблицу и раскидывайте себе на здоровье. Лучше если это будет несколько массовых инсертов типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
insert into your1_table
 select * from stage_table a
 where not exists (select * from your1_table b.primary_key=a.primary_key) and xxxxx
insert into your2_table
 select * from stage_table a
 where not exists (select * from your2_table b.primary_key=a.primary_key) and yyyy
truncate table stage_table
но можно (хотя и хуже) в цикле ваши процедурки вызывать. И таки да, вы сильно завязываетесь на СУБД, но она (СУБД) для этого и предназначена.
Robert Ayrapetyan Еще есть y оракла job-ы
У оракла это называется AQ
...
Рейтинг: 0 / 0
Асинхронная работа с БД
    #36986963
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Robert AyrapetyanПодскажите готовое решение для асинхронной работы с SQL БД (в частности - вставки данных), с очередью, дампом\рестором в случае падения и т.п.

Мне кажется что то совсем "готовое" пытаться искать не стоит.
Вам нужна хорошая промышленная реализация очереди сообщений.
Это может быть, например, MSMQ, JMS, IBM WebSphere MQ.
Из бесплатных реализаций очередей - Apache ActiveMQ .

Далее вы должны реализовать посылку сообщения в очередь, асинхронную обработку его некоторым процессом-сервисом и получение ответа.
Далее все зависит от используемой вами платформы.
В двух словах не опишешь. Паттернов много.
Вообщем виде надо выделить какой то сервисный уровень, который будет отправлять сообщения в очередь и обращаться к очереди ответов, другой сервис будет читать сообщения из очереди в многопоточном режиме, обрабатывать их и посылать результат-сообщение в очередь ответов.

Если рассматривать конкретные платформы:
WCF, например, позволяет использовать MSMQ в качестве транспорта, есть сторонние адаптеры под WebSphere MQ
J2EE сервера все реализуют JMS

Если уж совсем что то грандиозное задумывается на уровне большого предприятия, то тут скорее стоит посмотреть промышленные реализации ESB, сервера и средства интеграции: на MS BizTalk, IBM ESB/Message Broker, Tibco...
...
Рейтинг: 0 / 0
Асинхронная работа с БД
    #36995331
Robert Ayrapetyan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Полностью реализовал все с qpid, повертел, вроде работает, но там целая эпопея с версиями (единственная рабочая версия у них лежит только в trunk-е, они там на форумах до сих пор не могут определиться как реализованы у них persistent очереди, спорят друг с другом и непонятно кто вообще пишет код в этом проекте). Итог: общее впечатление - сильно все усложнено и ненадежно. Решил теперь реализовать запись в файл и cron-ом закидывать в базу COPY (или pg_bulkload-ом). Просто и надежно.
...
Рейтинг: 0 / 0
Асинхронная работа с БД
    #36995343
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а чем обоснован был выбор?
почему не Apache ActiveMQ+Apache ServiceMix, кот. вроде бы больше распространен?
...
Рейтинг: 0 / 0
Асинхронная работа с БД
    #36996164
Robert Ayrapetyan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько я понял - ApacheMQ использует qpid.
А даже возможностей qpid-а для моей задачи оказалось слишком много.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Асинхронная работа с БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]