powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обмен данными между своими процессами
109 сообщений из 109, показаны все 5 страниц
Обмен данными между своими процессами
    #39616643
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть служба, которая запускает несколько процессов, которым она будет передавать данные (объекты размером около 10кб). Обратно передавать ничего не надо. Для этого есть несколько технологий:
1. File Mapping
2. Named Pipes
3. WM_COPYDATA

Передача данных будет высокоинтенсивная. Какая технология подойдет лучше по вашему мнению?
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616649
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,

ну ты просто попробуй все три, да сравни.
...
Мэилслоты ещё, самый простой способ, имхо.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616651
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД, спасибо кэп
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616654
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оконные сообщения самые медленные.

так что 1 или 2 + можно по сети кидаться, в локалхосте это очень быстро происходит.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616659
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbЕсть служба, которая запускает несколько процессов, которым она будет передавать данные (объекты размером около 10кб). Обратно передавать ничего не надо. Для этого есть несколько технологий:
1. File Mapping
2. Named Pipes
3. WM_COPYDATA

Передача данных будет высокоинтенсивная. Какая технология подойдет лучше по вашему мнению?

MMF
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616674
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
cptngrbЕсть служба, которая запускает несколько процессов, которым она будет передавать данные (объекты размером около 10кб). Обратно передавать ничего не надо. Для этого есть несколько технологий:
1. File Mapping
2. Named Pipes
3. WM_COPYDATA

Передача данных будет высокоинтенсивная. Какая технология подойдет лучше по вашему мнению?
я бы TCP/IP использовал - удобно и универсально
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616677
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет MMF, я не тестил, но винт при моих объемах (сотни объектов в секунду по >10кб) может сдохнуть быстро. Или нет?
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616679
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работает сервис 247.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616682
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbПередача данных будет высокоинтенсивная. Какая технология подойдет лучше по вашему мнению?
Более принципиальный вопрос - как именно должны передаваться данные:
а) непосредственно от процесса к процессу (2, 3)
б) опосредованно через доп. буферы (1 и сокеты).
В первом случае возникает проблема синхронизации готовности, второй может быть медленнее.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616688
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис, в этом и вопрос как именно
Я знаю, что нужно сервису передать блок памяти процессу , а что он будет с ним делать - до фонаря.
сервис должен контролить процессы на живучесть, и их перезапускать по необходимости.
Для общего понимания, я хочу потоки перевести на отдельные процессы, так как в рамках ОДНОГО процесса(службы), они со своей задачей не справляются, вот и стал вопрос в поиске буферов
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616689
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,

так не далеко и до разнесения по разным хостам
как вариант, с заделом на будущее, использовать для передачи данных очереди сообщений, а контролировать живучесть сервисов и операционка может
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616690
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbЕсть служба, которая запускает несколько процессов, которым она будет передавать данные (объекты размером около 10кб). Обратно передавать ничего не надо. Для этого есть несколько технологий:
1. File Mapping
2. Named Pipes
3. WM_COPYDATA

Передача данных будет высокоинтенсивная. Какая технология подойдет лучше по вашему мнению?
Подойдет лучше по каким критериям? Приведен только один - высокая интенсивность. Он реально один или еще есть?
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616692
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну я, ну и гарантия доставки
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616694
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений, а перезапускать их тоже ОС будет?
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616695
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbОбратно передавать ничего не надо
cptngrbну и гарантия доставки
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616697
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД, я имею ввиду технологию)))
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616706
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbСоколинский Борис, в этом и вопрос как именно
Я знаю, что нужно сервису передать блок памяти процессу , а что он будет с ним делать - до фонаря.
сервис должен контролить процессы на живучесть, и их перезапускать по необходимости.
Для общего понимания, я хочу потоки перевести на отдельные процессы, так как в рамках ОДНОГО процесса(службы), они со своей задачей не справляются, вот и стал вопрос в поиске буферов Если скорость взаимодействия некритична, наверное MMF.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616709
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
У меня система видеонаблюдения,
разрезана на несколько сервисов - собственно сервис приёма и обработки видеопотоков,
сервис архивации видеопотоков, сервис веб-доступа к видеопотокам и архивам

Как ты понимаешь, всё это высоконагруженное.
Взаимодействие реализовано через TCP/IP посредством библиотеки RealThinClient

Всё это спокойно летает на i5 на трёх десятках камер.

Я даже не представляю, что у тебя там за данные сервисы обрабатывают
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616711
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbну я, ну и гарантия доставки
Опа. А где должна находиться точка определения гарантии доставки - в передатчике или в приемнике?
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616712
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbДегтярев Евгений, а перезапускать их тоже ОС будет?

почему нет?
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616714
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbНасчет MMF, я не тестил, но винт при моих объемах (сотни объектов в секунду по >10кб) может сдохнуть быстро. Или нет?MMF это не только физические файлы
частный случай - shared memory, вообще диск никак не трогает (ну если своп не учитывать)
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616715
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorЯ даже не представляю, что у тебя там за данные сервисы обрабатывают
+
хотелось бы больше контекста

зы
ТС, варианты оптимизаций существующего решения рассмотрены?
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616717
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb...нужно сервису передать блок памяти процессу , а что он будет с ним делать - до фонаря...
...ну и гарантия доставки...

Так смешно.
Корреспондент получил сообщение, и тебе до фонаря, что он там с нима делает?
Ну, ладно.

Пошли ему еще одно сообщение. Если он с первым еще ничего не успел сделать,
сообщение чудесным образом встанет в чудесным образом появившуюся очередь.
Пока очередь не заполнится. Ту придется либо ждать, когда очередь рассосется,
либо прекратить передачу сообщений (отбрасывать их), других вараинтов нет.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616723
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator, В итоге все уперлось в запись в БД Oracle. При работе с одним клиентом (одна oci.dll) и 50 потоками, она не успевает все укладывать. Решил попробовать, для теста, разнести на несколько клиентов запись в БД.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616724
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений, не особо видны эти самые варианты оптимизации, может и есть другие способы. Просто пробую варианты
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616725
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
cptngrbdefecator, В итоге все уперлось в запись в БД Oracle. При работе с одним клиентом (одна oci.dll) и 50 потоками, она не успевает все укладывать. Решил попробовать, для теста, разнести на несколько клиентов запись в БД.
у меня видеонаблюдение работает на OracleXE 11
Всё укладывается замечательно (индексы по видеопотоку, например).
Но у меня каждый канал (одна камера) имеет собственный коннект к БД.
Пока все они ломились через одно подключение, тоже была задница.
Пришлось сделать одна камера - один коннект к БД
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616727
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbdefecator, В итоге все уперлось в запись в БД Oracle. При работе с одним клиентом (одна oci.dll) и 50 потоками, она не успевает все укладывать. Решил попробовать, для теста, разнести на несколько клиентов запись в БД.

Oracle - он быстрый. Оптимизировать нужно узкие места, вооружившись профилировщиком.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616729
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator, сижу на канале ~10ГБ/с и пакетики разбираю
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616730
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
cptngrbdefecator, сижу на канале ~10ГБ/с и пакетики разбираю
Закон Яровой ?
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616731
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi, подскажите как оптимизировать TOracleQuery.SetVariable, который в одном потоке выполняется за 3сек, а если запустить 50 потоков, то иногда до 10мин?
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616733
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
cptngrbschi, подскажите как оптимизировать TOracleQuery.SetVariable, который в одном потоке выполняется за 3сек, а если запустить 50 потоков, то иногда до 10мин?
Сделай несколько подключений, я же тебе уже сказал
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616734
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator, это как? если имеете ввиду сессий, то так оно и есть, а если использовать несколько несколько клиентов, то тут мне и нужны отдельные процессы и буферы между ними и основным приложением
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616736
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
cptngrbdefecator, это как? если имеете ввиду сессий, то так оно и есть, а если использовать несколько несколько клиентов, то тут мне и нужны отдельные процессы и буферы между ними и основным приложением
Один поток - одна сессия к Oracle.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616737
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator, так и есть
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616739
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
cptngrbdefecator, так и есть
Если и сейчас тормозит, то ты делаешь что-то не так.
Как уже посоветовали - ищи узкое место.

P.S. А вообще, разбор пакетов в 10-тигигабитной сети делается другим железом и другим софтом.
Это так, на заметку.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616740
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator, а какими компонентами ты пользуешься для записи в БД?
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616741
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
cptngrbdefecator, а какими компонентами ты пользуешься для записи в БД?
ODAC
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616744
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Ты используешь используешь Direct Oracle Access (DOA)
А они очень тормозные и не развиваются уже лет 10 минимум
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616750
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator,

почему? последний релиз с поддержкой токио был 31 марта прошлого года, если верить сайту разработчика .
Я правда давно с DOA не работал, но когда работал, этой либе не требовался установленный клиент оракла компе пользователя программы. Это был большой плюс.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616752
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
asutp2defecator,

почему? последний релиз с поддержкой токио был 31 марта прошлого года, если верить сайту разработчика .
Я правда давно с DOA не работал, но когда работал, этой либе не требовался установленный клиент оракла компе пользователя программы. Это был большой плюс.
DOA в принципе не умеет работать без установленного клиента Oracle.
Нет там такого функционала.

Зато такой функционал есть в ODAC.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616753
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
asutp2defecator,

почему? последний релиз с поддержкой токио был 31 марта прошлого года, если верить сайту разработчика .
там только поддерживают совместимость с очередными версиями дельфей.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616754
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbschi, подскажите как оптимизировать TOracleQuery.SetVariable, который в одном потоке выполняется за 3сек, а если запустить 50 потоков, то иногда до 10мин?

Не видя запроса, не видя базы, не видя ничего подсказать ? Это на форум гадалок, мой хрустальный шар давно сломался.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616759
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorasutp2defecator,

почему? последний релиз с поддержкой токио был 31 марта прошлого года, если верить сайту разработчика .
Я правда давно с DOA не работал, но когда работал, этой либе не требовался установленный клиент оракла компе пользователя программы. Это был большой плюс.
DOA в принципе не умеет работать без установленного клиента Oracle.
Нет там такого функционала.

Зато такой функционал есть в ODAC.вообще название Direct Oracle Access как бы намекает на принцип доступа к Oracle, не?))))
За нынешнюю версию DOA утверждать не берусь, но ранее прогу с DOA можно было запускать на чистой машине, без установленного клинта Oracle, и все отлично работало.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616765
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
asutp2defecatorпропущено...

DOA в принципе не умеет работать без установленного клиента Oracle.
Нет там такого функционала.

Зато такой функционал есть в ODAC.вообще название Direct Oracle Access как бы намекает на принцип доступа к Oracle, не?))))


Нет. Это говорит только о том, что доступ к БД идёт безо всяких лишних прослоек типа BDE

asutp2За нынешнюю версию DOA утверждать не берусь, но ранее прогу с DOA можно было запускать на чистой машине, без установленного клинта Oracle, и все отлично работало.

Поверь мне, в DOA никогда такого не было, от слова совсем.
Я с ним с 2004-го года работал, и сейчас приходится.

Другое дело, что у Oracle есть такой Instant Client, который не требует установки,
достаточно скопировать файлы клиента в папку с EXE.
но в любом случае DOA требует наличие клиента Оракла в том или ином виде.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616768
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Даже на сайте DOA чётко написано, что наличие клиента Оракла - обязательное условие
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616769
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,
все уперлось в запись в бд, а как сама субд поживает?
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616771
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator,

ну так тому и быть)
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616790
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorcptngrbdefecator, так и есть
Если и сейчас тормозит, то ты делаешь что-то не так.
Как уже посоветовали - ищи узкое место.

P.S. А вообще, разбор пакетов в 10-тигигабитной сети делается другим железом и другим софтом.
Это так, на заметку.+1
какой нафиг оракл при таком трафике
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616891
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator,
использую DOA + instantclient - в обычных оконных приложениях работает хорошо. Проблемы на x64 появились. FireDAC работает еще медленнее. Попробую на ODAC потестить, может быть не будет таких проблем.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616893
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений, СУБД прекрасно поживает. Запрос выполняется за 3-6 сек, а подготовка запроса (работа DOA) может доходить до 10 мин в пиковые нагрузки. Это сумашествие
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616894
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbdefecator,
использую DOA + instantclient - в обычных оконных приложениях работает хорошо. Проблемы на x64 появились. FireDAC работает еще медленнее. Попробую на ODAC потестить, может быть не будет таких проблем.

Я бы посоветовал профилировщик, а не гадание.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616896
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
cptngrbДегтярев Евгений, СУБД прекрасно поживает. Запрос выполняется за 3-6 сек , а подготовка запроса (работа DOA) может доходить до 10 мин в пиковые нагрузки. Это сумашествие

вот это вот, что я выделил, и есть самое большое сумасшествие
особенно если у тея настолько нагруженная система, как ты пишешь
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616926
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi, профилировщик указывает на конкретную процедуру
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616929
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator, кстати без OCI ODAC в моем случае работать не будет. Я передаю в качестве параметров 8 массивов по 150 000 элементов
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616936
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,

открой тайну, что за данные такие?
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39616958
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгенийоткрой тайну, что за данные такие?
иконки попиксельно?
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617075
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
cptngrbdefecator, кстати без OCI ODAC в моем случае работать не будет. Я передаю в качестве параметров 8 массивов по 150 000 элементов
ну что я могу сказать.
ты не на своём месте
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617200
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator, ага
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617225
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator, посмотрел не туда. при Direct mode нет поддержки PLSQL tables, а не ассоциативных массивов. Но не беда. При присвоении
Variant массивов очень много памяти жрется, но это не точно, я с ODAC не работал, буду копаться
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617248
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
cptngrbdefecator, посмотрел не туда. при Direct mode нет поддержки PLSQL tables, а не ассоциативных массивов. Но не беда. При присвоении
Variant массивов очень много памяти жрется, но это не точно, я с ODAC не работал, буду копаться

Direct Mode в ODAC работает медленнее, чем работа через клиента оракла
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617254
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbschi, профилировщик указывает на конкретную процедуру
код процедуры то этой есть?
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617284
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
 type
  TobPack = class (Tobject)
    m1: Variant;
    m2: Variant;
    m3: Variant;
    m4: Variant;
    m5: Variant;
    m6:Variant;
    m7: Variant;
    m8: Variant;
    cnt_pack: integer;
    constructor Create(const dbSize: integer); overload;
    destructor Destroy; override;
  end;

constructor TobPack.create(const dbSize: integer);
begin
  inherited Create;
  try
    m1 := VarArrayCreate([0, dbSize-1], varOleStr);
    m2 := VarArrayCreate([0, dbSize-1], varOleStr);
    m3:= VarArrayCreate([0, dbSize-1], varOleStr);
    m4:= VarArrayCreate([0, dbSize-1], varInteger);
    m5:= VarArrayCreate([0, dbSize-1], varInteger);
    m6:= VarArrayCreate([0, dbSize-1], varInteger);
    m7:= VarArrayCreate([0, dbSize-1], varDate);
    m8:= VarArrayCreate([0, dbSize-1], varDate);
  except
    on e : Exception do
    WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now)+' (!ОШИБКА) TobPack.create '+' Ошибка:'+e.Message);
  end;
end;

destructor TobPack.Destroy;
begin
  m1 := null;
  m2 := null;
  m3:= null;
  m4:= null;
  m5:= null;
  m6:= null;
  m7:= Null;
  m8:= Null;

  inherited;
end;




При инициализации

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
err:= False;

  try
    oraSession := TOracleSession.Create(nil);
    oraSession.LogonUsername := AUser;
    oraSession.LogonPassword := APasswd;
    oraSession.LogonDatabase := AConnectionString;
    oraSession.ThreadSafe := True;
    oraSession.StatementCache:= True;
    oraSession.Preferences.ConvertCRLF:= false;
    oraSession.Preferences.TrimStringFields:= false;
  except
    on E: exception do
    begin
      err := True;
      errMessage := E.Message;
      WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now) +' - (!ОШИБКА) процедура создания oraSession. Поток записи в БД №' + inttostr(Fnum) + '. '  + E.Message);
    end;
  end;

  if err = false then
  begin
    try
      oraSession.LogOn;
    except
      on E: exception do
      begin
        err := True;
        errMessage := E.Message;
        WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now) +' - (!ОШИБКА) процедура oraSession.LogOn. Поток записи в БД №' + inttostr(Fnum) + '. ' + E.Message);
      end;
    end;


    if err = false then
    begin
      try
        ods:= TOracleQuery.create(nil);
        ods.Tag:= Fnum;
          with ods do
          begin
             Session:= oraSession;
             DeleteVariables;
             sql.Text:='begin' + #13#10 +
                       '               proc(m1 => :m1,' + #13#10 +
                       '                       m2 => :m2,' + #13#10 +
                       '                       m3 => :m3,' + #13#10 +
                       '                       m4 => :m4,' + #13#10 +
                       '                       m5 => :m5,' + #13#10 +
                       '                       m6 => :m6,' + #13#10 +
                       '                       m7 => :m7,' + #13#10 +
                       '                       m8 => :m8,' + #13#10 +
                       '                       v_cnt => :v_cnt);' + #13#10 +
                       'end;';

             DeclareVariable('m1', otDate);
             DimPLSQLTable('m1', size_pack, 0);
             DeclareVariable('m2', otDate);
             DimPLSQLTable('m2', size_pack, 0);
             DeclareVariable('m3', otString);
             DimPLSQLTable('m3', size_pack, 10);
             DeclareVariable('m4', otString);
             DimPLSQLTable('m4', size_pack, 10);
             DeclareVariable('m5', otString);
             DimPLSQLTable('m5', size_pack, 10);
             DeclareVariable('m6', otInteger);
             DimPLSQLTable('m6', size_pack, 0);
             DeclareVariable('m7', otInteger);
             DimPLSQLTable('m7', size_pack, 0);
             DeclareVariable('m8', otInteger);
             DimPLSQLTable('m8', size_pack, 0);
             DeclareVariable('v_cnt', otInteger);
             Optimize:= True; //не будет пересобирать заново запрос
          end;

      except
        on E: exception do
        begin
          errMessage:= e.Message;
          WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now)+' - (!ОШИБКА) процедура создания Query. Поток записи в БД №'+inttostr(fnum)+'.'+#13#10+e.Message);
        end;
      end;

      err_Execute:= False;
    end;
  end;

  if err then  //ошибка при инициализации
  begin
    WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now) + ' - (!ОШИБКА) Инициализация потока записи в БД №' + inttostr(fnum) + '. Служба будет перезапущена');
    CSectionErrDB.Enter;
    TRY
      err_conn_db:= 1;
    FINALLY
      CSectionErrDB.Leave;
    END;
  end;



В Execute потока:

try

fStartNew:= GetTickCount;
ods.SetVariable(0, obPack.m1);
ods.SetVariable(1, obPack.m2);
ods.SetVariable(2, obPack.m3);
ods.SetVariable(3, obPack.m4);
ods.SetVariable(4, obPack.m5);
ods.SetVariable(5, obPack.m6);
ods.SetVariable(6, obPack.m7);
ods.SetVariable(7, obPack.m8);
ods.SetVariable(8, obPack.cnt_pack);

buf_set:= inttostr(GetTickCount - fStartNew);

fStartNew:= GetTickCount;

try
EOracle:= 0;
ods.Execute;
err_Execute:= False;
except
on E: EOracleError do
begin
EOracle:= E.ErrorCode;
end;

on E: Exception do
begin

WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now)+' (!ОШИБКА) Модуль записи в БД. Выполнение запроса. Поток №'+inttostr(fnum)+' '+e.Message);
err_Execute:= True;
end;
end;
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617289
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И что, профилировщик прямо на весь этот горький катаклизм указывает ?

Не верю.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617295
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi, на этот

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
fStartNew:= GetTickCount; 
ods.SetVariable(0, obPack.m1);
ods.SetVariable(1, obPack.m2);
ods.SetVariable(2, obPack.m3);
ods.SetVariable(3, obPack.m4);
ods.SetVariable(4, obPack.m5);
ods.SetVariable(5, obPack.m6);
ods.SetVariable(6, obPack.m7);
ods.SetVariable(7, obPack.m8);
ods.SetVariable(8, obPack.cnt_pack);

buf_set:= inttostr(GetTickCount - fStartNew);
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617319
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если использовать ODAC

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
try
    oraSession := TOraSession.Create(nil);
    oraSession.ConnectPrompt := False;
    oraSession.Options.Direct:= True;
    oraSession.ConnectString := 'Direct=True;Home Name=InstantClient1;Host=201.0.10.15;SID=orcl;User ID=user1;Password=pass;Login Prompt=False';
    oraSession.AutoCommit:= False;
    oraSession.ThreadSafety := True;
    oraSession.ConvertEOL:= False;
  except
    on E: exception do
    begin
      err := True;
      errMessage := E.Message;
      WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now) +' - (!ОШИБКА) процедура создания oraSession. Поток записи в БД №' + inttostr(Fnum) + '. '  + E.Message);
    end;
  end;

  if err = false then
  begin
    try
      oraSession.Connect;
    except
      on E: exception do
      begin
        err := True;
        errMessage := E.Message;
        WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now) +' - (!ОШИБКА) процедура oraSession.LogOn. Поток записи в БД №' + inttostr(Fnum) + '. ' + E.Message);
      end;
    end;


    if err = false then
    begin
      try
        Q:= TOraSQL.Create(nil);
        Q.Session:= oraSession;
        Q.Params.Clear;
        Q.SQL.Text:= 'begin' + #13#10 +
                       '  pkg_nat.ins_pack_buf(m1 => :m1,' + #13#10 +
                       '                       m2 => :m2,' + #13#10 +
                       '                       m3 => :m3,' + #13#10 +
                       '                       m4 => :m4,' + #13#10 +
                       '                       m5 => :m5,' + #13#10 +
                       '                       m6 => :m6,' + #13#10 +
                       '                       m7 => :m7,' + #13#10 +
                       '                       m8 => :m8,' + #13#10 +
                       '                       v_cnt => :v_cnt);' + #13#10 +
                       'end;';
        Q.ParamByName('m1').DataType:= ftDateTime;
        Q.ParamByName('m1').ParamType:= ptInput;
        Q.ParamByName('m1').Table:= True;
        Q.ParamByName('m1').Length:= size_pack;

        Q.ParamByName('m2').DataType:= ftDateTime;
        Q.ParamByName('m2').ParamType:= ptInput;
        Q.ParamByName('m2').Table:= True;
        Q.ParamByName('m2').Length:= size_pack;

        Q.ParamByName('m3').DataType:= ftString;
        Q.ParamByName('m3').ParamType:= ptInput;
        Q.ParamByName('m3').Table:= True;
        Q.ParamByName('m3').Length:= size_pack;

        Q.ParamByName('m4').DataType:= ftString;
        Q.ParamByName('m4').ParamType:= ptInput;
        Q.ParamByName('m4').Table:= True;
        Q.ParamByName('m4').Length:= size_pack;

        Q.ParamByName('m5').DataType:= ftString;
        Q.ParamByName('m5').ParamType:= ptInput;
        Q.ParamByName('m5').Table:= True;
        Q.ParamByName('m5').Length:= size_pack;

        Q.ParamByName('m6').DataType:= ftInteger;
        Q.ParamByName('m6').ParamType:= ptInput;
        Q.ParamByName('m6').Table:= True;
        Q.ParamByName('m6').Length:= size_pack;

        Q.ParamByName('m7').DataType:= ftInteger;
        Q.ParamByName('m7').ParamType:= ptInput;
        Q.ParamByName('m7').Table:= True;
        Q.ParamByName('m7').Length:= size_pack;

        Q.ParamByName('m8').DataType:= ftInteger;
        Q.ParamByName('m8').ParamType:= ptInput;
        Q.ParamByName('m8').Table:= True;
        Q.ParamByName('m8').Length:= size_pack;

        Q.ParamByName('v_cnt').DataType:= ftInteger;
        Q.ParamByName('v_cnt').ParamType:= ptInput;
        Q.ParamByName('v_cnt').Table:= False;

        Q.Prepare;
      except
        on E: exception do
        begin
          errMessage:= e.Message;
          WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now)+' - (!ОШИБКА) процедура создания Query. Поток записи в БД №'+inttostr(fnum)+'.'+#13#10+e.Message);
        end;
      end;

      err_Execute:= False;
    end;
  end;

  if err then  //ошибка при инициализации
  begin
    WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now) + ' - (!ОШИБКА) Инициализация потока записи в БД №' + inttostr(fnum) + '. Служба будет перезапущена');
    CSectionErrDB.Enter;
    TRY
      err_conn_db:= 1;
    FINALLY
      CSectionErrDB.Leave;
    END;
  end;




Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
fStartNew:= GetTickCount;
                Q.Params[0].Value:= obPack.m1;
                Q.Params[1].Value:= obPack.m2;
                Q.Params[2].Value:= obPack.m3;
                Q.Params[3].Value:= obPack.m4;
                Q.Params[4].Value:= obPack.m5;
                Q.Params[5].Value:= obPack.m6;
                Q.Params[6].Value:= obPack.m7;
                Q.Params[7].Value:= obPack.m8;
                Q.Params[8].AsInteger:= obPack.cnt_pack;

                buf_set:= inttostr(GetTickCount - fStartNew);
                if (FLogType = 4)  then  WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now)+' - (!ИНФ) Модуль записи в БД. Сделали SetVariable. 3 этап. Поток №:'+inttostr(fnum));

                fStartNew:= GetTickCount;

                try
                  EOracle:= 0;
                  Q.Execute;
                  err_Execute:= False;
                except
                  on E: exception do
                  begin
                    WriteLog(FormatDateTime('yyyy_mm_dd_hh:nn:ss', now)+' (!ОШИБКА) Модуль записи в БД. Выполнение запроса. Поток №'+inttostr(fnum)+' '+e.Message);
                    err_Execute:= True;
                  end;
                end;



на методе Execute происходит прирост ОЗУ памяти с 1,5 ГБ до 3,8 и вылетает с ошибкой ORA-03113: end-of-file on communication
это при Direct mode, при Client mode еще не пробовал
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617333
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
8 массивов по 150к элементов - не хило так
не пробовал передавать в запрос пачки по меньше
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617340
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений, пробовал, но не подходит, начинает копиться очередь, мне бы 500 000 поставить - лучше бы было другим потокам, но тогда вообще тормоза с DOA
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617354
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
постоянно такой поток или это на пиках?
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617357
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений, постоянно, на пиках больше в несколько раз, но между пиками есть время успеть разобрать накопленное
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617372
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,

Код: pascal
1.
2.
 'Петя' + #13#10 + 'Коля'
 'Петя'#13#10'Коля'



:)
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617378
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Данная задача по скорости не может быть решена в принципе с используемым инструментарием.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617386
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator, печалька
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617391
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
cptngrbdefecator, печалька
сваливай данные для загрузки в базу в файлы
а отдельный процесс или поток пусть неспешно файлы читает, заносит данные в БД, и удаляет файл
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617392
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД, так код автоматом из PL/SQL Developer'а генерится)
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617396
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
cptngrbчччД, так код автоматом из PL/SQL Developer'а генерится)
при использовании ODAC вот это всё говнище:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
        Q.ParamByName('m1').DataType:= ftDateTime;
        Q.ParamByName('m1').ParamType:= ptInput;
        Q.ParamByName('m1').Table:= True;
        Q.ParamByName('m1').Length:= size_pack;

        Q.ParamByName('m2').DataType:= ftDateTime;
        Q.ParamByName('m2').ParamType:= ptInput;
        Q.ParamByName('m2').Table:= True;
        Q.ParamByName('m2').Length:= size_pack;

        Q.ParamByName('m3').DataType:= ftString;
        Q.ParamByName('m3').ParamType:= ptInput;
        Q.ParamByName('m3').Table:= True;
        Q.ParamByName('m3').Length:= size_pack;

        Q.ParamByName('m4').DataType:= ftString;
        Q.ParamByName('m4').ParamType:= ptInput;
        Q.ParamByName('m4').Table:= True;
        Q.ParamByName('m4').Length:= size_pack;

        Q.ParamByName('m5').DataType:= ftString;
        Q.ParamByName('m5').ParamType:= ptInput;
        Q.ParamByName('m5').Table:= True;
        Q.ParamByName('m5').Length:= size_pack;

        Q.ParamByName('m6').DataType:= ftInteger;
        Q.ParamByName('m6').ParamType:= ptInput;
        Q.ParamByName('m6').Table:= True;
        Q.ParamByName('m6').Length:= size_pack;

        Q.ParamByName('m7').DataType:= ftInteger;
        Q.ParamByName('m7').ParamType:= ptInput;
        Q.ParamByName('m7').Table:= True;
        Q.ParamByName('m7').Length:= size_pack;

        Q.ParamByName('m8').DataType:= ftInteger;
        Q.ParamByName('m8').ParamType:= ptInput;
        Q.ParamByName('m8').Table:= True;
        Q.ParamByName('m8').Length:= size_pack;

        Q.ParamByName('v_cnt').DataType:= ftInteger;
        Q.ParamByName('v_cnt').ParamType:= ptInput;
        Q.ParamByName('v_cnt').Table:= False;


писать руками не надо от слова совсем.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617398
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
чччДcptngrb,

Код: pascal
1.
2.
 'Петя' + #13#10 + 'Коля'
 'Петя'#13#10'Коля'




:)

Это тоже

Код: pascal
1.
  if err = false then
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617400
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator, а винт не сломается?
если в памяти не справляется, то через файлы справиться?
я думал над этим. хотел разделить на несколько процессов и использовать FileMapping или что-то другое, создал вопрос на форуме, но все скатилось на что-то я не так делаю и пришли к выводу, что нужно делать по другому
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617403
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator, это супер!
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617407
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
cptngrbdefecator, а винт не сломается?
если в памяти не справляется, то через файлы справиться?
я думал над этим. хотел разделить на несколько процессов и использовать FileMapping или что-то другое, создал вопрос на форуме, но все скатилось на что-то я не так делаю и пришли к выводу, что нужно делать по другому

ещё раз, последний, повторю: разделяй быструю часть и медленную часть.
СУБД - это медленная часть.

Быстрая часть пусть со своей скоростью генерит данные и складирует их хотя бы на винт.
Медленная часть со своей скоростью выгребает данные из файлов и заносит в базу.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617410
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator, я понимаю, о чем ты. Я только хотел уточнить.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617421
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oracle быстр, если с ним правильно работать. За все четыре страницы так и непонятно, какая задача должна быть решена, как эти 100500 элементов связаны с базой данных и т.п. Зато куча хрустальных шаров
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617427
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
schiOracle быстр, если с ним правильно работать. За все четыре страницы так и непонятно, какая задача должна быть решена, как эти 100500 элементов связаны с базой данных и т.п. Зато куча хрустальных шаров
какие хрустальные шары ?
Чувак хочет запихать в базу стотыщ нефти мгновенно.
Но у него не получается, и не получится, как ты с Ораклем ни работай
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617428
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi, через хранимую процедуру, которую я не могу менять, быстро писать 100500 записей
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617432
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbdefecator, а винт не сломается?
если в памяти не справляется, то через файлы справиться?
я думал над этим. хотел разделить на несколько процессов и использовать FileMapping или что-то другое, создал вопрос на форуме, но все скатилось на что-то я не так делаю и пришли к выводу, что нужно делать по другому
Повторюсь, посмотрел бы в сторону какого-нибудь сервиса типа rabbitmq, activemq, kafka для буферизации и доставки данных до обработчиков, в этом случае обработчиков можно будет плодить как на одной так и на нескольких машинах.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617437
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Дегтярев Евгенийcptngrbdefecator, а винт не сломается?
если в памяти не справляется, то через файлы справиться?
я думал над этим. хотел разделить на несколько процессов и использовать FileMapping или что-то другое, создал вопрос на форуме, но все скатилось на что-то я не так делаю и пришли к выводу, что нужно делать по другому
Повторюсь, посмотрел бы в сторону какого-нибудь сервиса типа rabbitmq, activemq, kafka для буферизации и доставки данных до обработчиков
зачем нужна эта ересь, если сделать через файлы на диске гораздо быстрее и проще ?
Быстрый сервис создаёт файл и кладёт туда пачку данных.
Медленный сервис с какой-то периодичностью проверяет наличие новых файлов,
открывает каждый и пишет данные в базу.
Файл удаляется.

Если хочется вообще быстро-быстро, то всё это можно хранить на электронном диске
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617453
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorзачем нужна эта ересь, если сделать через файлы на диске гораздо быстрее и проще ?
Быстрый сервис создаёт файл и кладёт туда пачку данных.
Медленный сервис с какой-то периодичностью проверяет наличие новых файлов,
открывает каждый и пишет данные в базу.
Файл удаляется.
а вот не факт что быстрее и проще.

зы
что за электронный диск?
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617455
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Дегтярев Евгенийdefecatorзачем нужна эта ересь, если сделать через файлы на диске гораздо быстрее и проще ?
Быстрый сервис создаёт файл и кладёт туда пачку данных.
Медленный сервис с какой-то периодичностью проверяет наличие новых файлов,
открывает каждый и пишет данные в базу.
Файл удаляется.
а вот не факт что быстрее и проще.

зы
что за электронный диск?
RAM-диск
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617653
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorДегтярев Евгенийпропущено...

Повторюсь, посмотрел бы в сторону какого-нибудь сервиса типа rabbitmq, activemq, kafka для буферизации и доставки данных до обработчиков
зачем нужна эта ересь, если сделать через файлы на диске гораздо быстрее и проще ?
Быстрый сервис создаёт файл и кладёт туда пачку данных.
Медленный сервис с какой-то периодичностью проверяет наличие новых файлов,
открывает каждый и пишет данные в базу.
Файл удаляется.

Если хочется вообще быстро-быстро, то всё это можно хранить на электронном диске

Несколько непонятно, зачем нужна промежуточная прослойка в виду файлов, пусть даже на электронном диске
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617658
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
schidefecatorпропущено...

зачем нужна эта ересь, если сделать через файлы на диске гораздо быстрее и проще ?
Быстрый сервис создаёт файл и кладёт туда пачку данных.
Медленный сервис с какой-то периодичностью проверяет наличие новых файлов,
открывает каждый и пишет данные в базу.
Файл удаляется.

Если хочется вообще быстро-быстро, то всё это можно хранить на электронном диске

Несколько непонятно, зачем нужна промежуточная прослойка в виду файлов, пусть даже на электронном диске
а почему бы и нет ? Это один из вариантов решения
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617660
Грех
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если писать напрямую в память процесса??? К примеру мы запускаемся, программа ищет подходящие - наши приложения. А дальше пишет в них по адресу. А в наших приложениях есть мониторинг.. Так же как работают читы.

Вауля. Самый быстрый способ
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617669
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorschiпропущено...


Несколько непонятно, зачем нужна промежуточная прослойка в виду файлов, пусть даже на электронном диске
а почему бы и нет ? Это один из вариантов решения

Дело в том, что из сообщений ТС видно только, что он "сидит на канале 10Гб/с и разбирает пакетики". Если у него нужные данные с такой скоростью поступают, то любые прослойки, мне кажется, будут замедлять общую обработку. Но пятая точка мне подсказывает, что полезные данные вряд ли с такой скоростью поступают и их надо ВСЕ сохранять в базе.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617674
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насчет того, что DOA плохое, а ODAC впереди планеты всей. ODAC client mode.
Провел замеры на своей машине i7-6700 3,4 и 16ГБ ОЗУ .
5 потоков записи в БД в обоих случаях. средние значения:
DOA - время присвоения переменных 1500 мс, время выполнения запроса 2400 мс, ОЗУ съели ~3 ГБ
ODAC - время присвоения переменных 100 мс, время выполнения запроса 8000 мс, ОЗУ съели ~14 ГБ

В DOA во время присвоения переменных происходит раскладывания в структуры oci.dll,
а в ODAC не знаю(исходников нет), но такое чувство, что раскладывает при Execute. Тестил на компоненте TOraSQL
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617676
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schi, не все, но даже полезные не успеваю укладывать, даже при полезном потоке ~2ГБ
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617677
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot schi]defecator...то любые прослойки, мне кажется, будут замедлять общую обработку...
до тех пока хватает одного процесса/сервера
одного процесса уже не хватает
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617681
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на локальной машине при полезном потоке ~600МБ проводились замеры. с DOA я справляюсь без проблем, при ODAC нет, вернее ОП заканчивается
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617688
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поделись хоть что за данные в таком кол-ве?
мне только мониторинг на ум приходит
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617690
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений, на локальной машине разбираю udp пакеты, которые pcap player'ом сам себе отправляю
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617693
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Дегтярев Евгений]schiпропущено...

до тех пока хватает одного процесса/сервера
одного процесса уже не хватает

Сам Oracle как-то справляется с нагрузками, у него там диспетчеры всякие есть, и прочие процессы :)
Но, повторюсь, давать советы, не зная задачи, не всегда легко и действенно.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617701
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrbДегтярев Евгений, на локальной машине разбираю udp пакеты, которые pcap player'ом сам себе отправляю
ну меня как раз интересует характер данных внутри пакетов, если это не секрет фирмы ))
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617824
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений,

СОРМ? :)
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617831
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cptngrb,
смотри не вздумай начать рассказывать о прикладной задаче: толку все равно будет ноль, но советами засношают.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617838
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
чччДcptngrb,
смотри не вздумай начать рассказывать о прикладной задаче: толку все равно будет ноль, но советами засношают.
а разве не за советами он сюда пришёл ?
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617841
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator,
точно не за теми, которые вывалят, если он даст слибину и сболтнет лишнего.
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617852
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
чччДdefecator,
точно не за теми, которые вывалят, если он даст слибину и сболтнет лишнего.
он уже показал, что код писать не умеет, а хайлоад системы для него вообще тёмный лес.
Куда уж больше-то
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39617991
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДcptngrb,
смотри не вздумай начать рассказывать о прикладной задаче: толку все равно будет ноль, но советами засношают .
а почему бы и нет ))
есть предположение, что данные не сохраняются в БД в том виде, в котором прилетают в процедуру, ибо будет овердофига, т.е. в процедуре может быть агрегация данных, которую можно вынести в приложение и тем самым сильно сократить общение с БД
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39618006
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сколько уж ахулиардов в батче получается? я больше нескольких тысяч энидаком не вставлял но "A typical picture of a local Oracle on a rather old laptop will still show > 100'000 records per second " и если тормоза именно на даковских обертках то может есть смысл прямо oci задействовать?
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39618047
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Трындец, спросил одно, ответили другое, какашками закидали.
defecator вообще пукан разорвал... хотя по ответам сам в с Oracle + хайлоад системы видел издалека, если так категоричен
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39618049
cptngrb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vavan, думаю над этим, хотя склоняюсь на структурные изменения, но времени пока нет
...
Рейтинг: 0 / 0
Обмен данными между своими процессами
    #39618051
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
cptngrbТрындец, спросил одно, ответили другое, какашками закидали.
defecator вообще пукан разорвал... хотя по ответам сам в с Oracle + хайлоад системы видел издалека, если так категоричен
я сужу о твоём опыте программирования по тому коду, который ты тут понакопипастил
...
Рейтинг: 0 / 0
109 сообщений из 109, показаны все 5 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Обмен данными между своими процессами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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