|
|
|
Асинхронная работа с БД
|
|||
|---|---|---|---|
|
#18+
Подскажите готовое решение для асинхронной работы с SQL БД (в частности - вставки данных), с очередью, дампом\рестором в случае падения и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2010, 02:50 |
|
||
|
Асинхронная работа с БД
|
|||
|---|---|---|---|
|
#18+
Поясню. Имеется высоконагруженный сервер (порядка M запросов\сек). Необходимо все запросы загонять в постоянное хранилище с последующими генерациями отчетов. Лучше всего для данной задачи в качестве хранилища подходит SQL БД. Но есть огромная проблема - скорость вставки в SQL БД, которая равна N, причем N много меньше M. О синхронной вставке не может быть и речи. Таким образом, необходимо реализовать очередь, причем для надежности в отдельном процессе, с постоянной памятью и дампом\восстановлением в файл и прочими наворотами в случае падения даже этого отдельного процесса. Вопрос в следующем: есть ли какие-либо готовые решения? Конечно, можно реализовать этот велосипед самостоятельно, но нет времени, и не верится, что нет готового решения, написанного, отлаженного и выложенного в открытый доступ. Единственное ограничение - коммерческие решения не подходят. p.s. искал много и долго, но ничего не нашел. Вообще. Как будто такой проблемы не существует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2010, 10:00 |
|
||
|
Асинхронная работа с БД
|
|||
|---|---|---|---|
|
#18+
кое-что конечно же нашлось, но к огромному удивлению - все с приставкой "windows" - ms sql service broker и azure, и то они лишь отдаленно напоминают необходимый мне инструмент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2010, 10:21 |
|
||
|
Асинхронная работа с БД
|
|||
|---|---|---|---|
|
#18+
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 Как будто такой проблемы не существует.Скорее всего вы странного хотите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2010, 17:09 |
|
||
|
Асинхронная работа с БД
|
|||
|---|---|---|---|
|
#18+
Robert AyrapetyanО синхронной вставке не может быть и речи. Таким образом, необходимо реализовать очередь, причем для надежности в отдельном процессеТак вставляйте асинхронно в отдельном процессе. Robert Ayrapetyanпричем для надежности в отдельном процессе, с постоянной памятью и дампом\восстановлением в файл и прочими наворотами в случае падения даже этого отдельного процесса.А тут нестыковочка - вам нужна отдельная СУБД для такого хранения, причём она будет работать синхронно. Соответственно, не будет-ли медленно работать уже эта другая СУБД? Robert AyrapetyanВопрос в следующем: есть ли какие-либо готовые решения? Конечно, можно реализовать этот велосипед самостоятельно, но нет времени, и не верится, что нет готового решения, написанного, отлаженного и выложенного в открытый доступ. Единственное ограничение - коммерческие решения не подходят. p.s. искал много и долго, но ничего не нашел. Вообще. Как будто такой проблемы не существует.Ну, задача слишком общая. Хотя что-то есть, например, можно действительно использовать сервис-брокер или лучьше даже надёжный транспорт типа MSMQ. Robert Ayrapetyanp.s. искал много и долго, но ничего не нашел. Вообще. Как будто такой проблемы не существует.Обычно в таких случаях делают асинхронную запись в СУБД и дополнительно запись в файлы для надёжности и восстановления на случай даунтайсма сервера. Более быстрое и простое решение не могу придумать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2010, 17:34 |
|
||
|
Асинхронная работа с БД
|
|||
|---|---|---|---|
|
#18+
SERG1257С этого момента поподробнее - чем занимается ваш сервер. (в хрустальном шаре я вижу некую OLTP базу с M транзакций\сек) в данном случае неважно - пусть это будет простой echo-сервер, а в базу нужно складывать все запросы клиентов, как лог. SERG1257Наверное некоторые запросы (типа отчет) лучше будет выполнять на отдельном сервере, так? безусловно, отчеты будут генериться на отдельном сервере. В данном случае это тоже не важно - это уже задача репликации. SERG1257Этот самый отчетный сервер вы хотите реализовать на базе MS SQL server, так? нет, он не подходит из-за коммерческ. лицензий. SERG1257У вас не получилось организовать синхронную вставку, так? фактически да. Синхронная вставка делает ответ echo-сервера клиенту недопустимо медленным (скажем, в десятки раз). SERG1257Почему? По религиозным соображениям или просто денег нет? изначально так задача не стояла. Просто если такой простой механизм, как менеджер очерди, потянет за собой коммерческое хранилище и еще кучу ненужных вещей, то это вообще не то решение. И да, денег нет ). [quote alexeyvg]Так вставляйте асинхронно в отдельном процессе./quote] спасиб ) alexeyvgА тут нестыковочка - вам нужна отдельная СУБД для такого хранения, причём она будет работать синхронно. Соответственно, не будет-ли медленно работать уже эта другая СУБД? тут мое упущение - важный момент. Нагрузка на мой сервер непостоянна. Т.е. за периоды "затишья" накопившаяся очередь гарантированно опустошиться. Но в периоды нагрузки - работа с постоянным хранилищем должна быть асинхронной. alexeyvgОбычно в таких случаях делают асинхронную запись в СУБД и дополнительно запись в файлы для надёжности и восстановления на случай даунтайсма сервера. именно изобретательством данного велосипеда я и не хочу заниматься. Чтоб стало более понятно - gearman впринципе очень близко к тому, что мне нужно - у него и очереди хранятся в постоянной памяти (в той же SQL БД), и распараллеливание. Но судя по номеру последней версии (0.14), кол-ву багов и новизне - это не решение для продакшн системы. Пока его не удалось даже собрать с девятым постгресом. И вообще - он несколько другой направленности, в основном распареллелить задачи, хотя используя его возможности можно реализовать то что и мне нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2010, 21:23 |
|
||
|
Асинхронная работа с БД
|
|||
|---|---|---|---|
|
#18+
В последних версиях SQL сервера есть потоковая вставка данных - именно то что вам необходимо она подходит для вставки данных приходящих потоком от оборудования, для mobile-операторов, для интернет-операторов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2010, 15:02 |
|
||
|
Асинхронная работа с БД
|
|||
|---|---|---|---|
|
#18+
Robert Ayrapetyan Синхронная вставка делает ответ echo-сервера клиенту недопустимо медленным (скажем, в десятки раз).Ну это если одиночными инсертами вставлять Я бы направил вывод вашего сервера в текстовый файл, а затем по какому либо событию (по таймеру например и/или по достижению определенного размера) переключал лог, а свежезакрытый файл качал в СУБД. Если это велосипед, то удачи вам в поисках оптимального решения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2010, 15:48 |
|
||
|
Асинхронная работа с БД
|
|||
|---|---|---|---|
|
#18+
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 отдельный менеждер очереди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2010, 16:49 |
|
||
|
Асинхронная работа с БД
|
|||
|---|---|---|---|
|
#18+
пока отвечу себе сам - вот интересный тест по моему вопросу: http://bhavin.directi.com/rabbitmq-vs-apache-activemq-vs-apache-qpid/ Это, так сказать, классические решения. Судя по объемам кода - реализовывать все это, пусть даже не так универсально, точно жесть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2010, 00:08 |
|
||
|
Асинхронная работа с БД
|
|||
|---|---|---|---|
|
#18+
Robert Ayrapetyan Например, необходимо вызвать несколько хранимых процедyр (раскидать данные по нескольким таблицам) внyтри основного запросаНу так грузите в стейджинговую таблицу и раскидывайте себе на здоровье. Лучше если это будет несколько массовых инсертов типа Код: plaintext 1. 2. 3. 4. 5. 6. 7. Robert Ayrapetyan Еще есть y оракла job-ы У оракла это называется AQ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2010, 05:28 |
|
||
|
Асинхронная работа с БД
|
|||
|---|---|---|---|
|
#18+
Robert AyrapetyanПодскажите готовое решение для асинхронной работы с SQL БД (в частности - вставки данных), с очередью, дампом\рестором в случае падения и т.п. Мне кажется что то совсем "готовое" пытаться искать не стоит. Вам нужна хорошая промышленная реализация очереди сообщений. Это может быть, например, MSMQ, JMS, IBM WebSphere MQ. Из бесплатных реализаций очередей - Apache ActiveMQ . Далее вы должны реализовать посылку сообщения в очередь, асинхронную обработку его некоторым процессом-сервисом и получение ответа. Далее все зависит от используемой вами платформы. В двух словах не опишешь. Паттернов много. Вообщем виде надо выделить какой то сервисный уровень, который будет отправлять сообщения в очередь и обращаться к очереди ответов, другой сервис будет читать сообщения из очереди в многопоточном режиме, обрабатывать их и посылать результат-сообщение в очередь ответов. Если рассматривать конкретные платформы: WCF, например, позволяет использовать MSMQ в качестве транспорта, есть сторонние адаптеры под WebSphere MQ J2EE сервера все реализуют JMS Если уж совсем что то грандиозное задумывается на уровне большого предприятия, то тут скорее стоит посмотреть промышленные реализации ESB, сервера и средства интеграции: на MS BizTalk, IBM ESB/Message Broker, Tibco... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2010, 18:10 |
|
||
|
Асинхронная работа с БД
|
|||
|---|---|---|---|
|
#18+
Полностью реализовал все с qpid, повертел, вроде работает, но там целая эпопея с версиями (единственная рабочая версия у них лежит только в trunk-е, они там на форумах до сих пор не могут определиться как реализованы у них persistent очереди, спорят друг с другом и непонятно кто вообще пишет код в этом проекте). Итог: общее впечатление - сильно все усложнено и ненадежно. Решил теперь реализовать запись в файл и cron-ом закидывать в базу COPY (или pg_bulkload-ом). Просто и надежно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2010, 21:02 |
|
||
|
Асинхронная работа с БД
|
|||
|---|---|---|---|
|
#18+
а чем обоснован был выбор? почему не Apache ActiveMQ+Apache ServiceMix, кот. вроде бы больше распространен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2010, 21:17 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36968533&tid=1542423]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
167ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
74ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 509ms |

| 0 / 0 |
