|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
Необходимо вычитать несколько строк из таблицы и сразу их удалить. Использование запроса типа: DELETE FROM USERS WHERE USERS_BASE = ? returning USERID, CLIENTID, PWD работает только если в таблице одна строка. Как быть? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 14:23 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
Сначала выбирай, потом удаляй. В чём проблема-то? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 14:34 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
vitamin77, Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 14:35 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
vitamin77, использовать GTT ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 14:48 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
Одним запросом нужно, чтобы лишний раз по TCP к удаленной БД запросы не отправлять. Процедуру не хотелось бы делать, т.к. возможно придется на другую СУБД мигрировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 15:04 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
vitamin77Одним запросом нужно, чтобы лишний раз по TCP к удаленной БД запросы не отправлять. Не экономь на спичках. Затраты на отправку одного запроса DELETE утонут на фоне всего остального. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 15:06 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
vitamin77, ты бы сначала узнал про другие СУБД. В каких из них RETURNING вообще поддерживается? В каких он может возвращать более одной удалённой строки? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 15:12 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
vitamin77Одним запросом нужно, чтобы лишний раз по TCP к удаленной БД запросы не отправлять. http://firebirdsql.su/doku.php?id=execute_block 1. в одному запросе - копируешь нужные данные в per-transction GTT 2. удаляешь из основной таблицы ID из GTT 3. читаешь свои данные из GTT ..потом закрываешь транзакцию с автоматической очисткой GTT Это в предположении что в этом зпросе на самом деле данных фиг да ни фига. Если запрос "большой", то GTT опухнет, но тогда и огорчаться из-за "лишний раз по TCP" не стоит - ты все равно читать данные будешь десятком запросов, а то и сотней. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 16:20 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
vitamin77Одним запросом нужно, чтобы лишний раз по TCP к удаленной БД запросы не отправлять. Процедуру не хотелось бы делать, т.к. возможно придется на другую СУБД мигрировать. Тогда тебе сначала этот вопрос нужно задать в форуме про ту БД, куда мигрировать собрался, а только потом уже здесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2015, 16:22 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
Спасибо Arioch и всем остальны за помощь, попробую Dimitry Sibiryakov, дело в том, что серверное приложение и БД находятся на разных континентах. Пинг ~100-130 млс. Локально запросы выполняются очень быстро, но если отправлять их на удаленную БД по TCP, даже самый легкий запрос типа "Delete from tableName where Key = ?" выполняется не менее 0,6-0,8 сек. При том, что записей на удаление не больше 10-20. Поэтому как сказать, "спички". Приходится сокращать кол-во запросов насколько это возможно. Я пробовал настраивать firebird.conf: TcpRemoteBufferSize = 3072 TcpNoNagle = 1 Но никаких изменений в скорости практически не замечено. Скорость обработки запросов с использованием удаленной БД критична, поэтому собственно и не исключаю миграцию, если не получится как-то решить этот вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2015, 13:16 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
vitamin77, обычно если делается массовое удаление то результаты уже не возвращаются. Ну даже если хочешь сделать так без ХП пиши EXECUTE BLOCK, вот только он как и ХП будет непереносим на другую СУБД ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2015, 13:21 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
vitamin77дело в том, что серверное приложение и БД находятся на разных континентах. Пинг ~100-130 млс. Локально запросы выполняются очень быстро, но если отправлять их на удаленную БД по TCP, даже самый легкий запрос типа "Delete from tableName where Key = ?" выполняется не менее 0,6-0,8 сек. При том, что записей на удаление не больше 10-20. Используешь какие-то хреновые компоненты доступа и Firebird клиент версии меньше 2.5. Одно выполнение названного запроса это два роунд-трипа. У меня между Англией и Австралией пролазит не менее 10 таких запросов в секунду. vitamin77Я пробовал настраивать firebird.conf: TcpRemoteBufferSize = 3072 TcpNoNagle = 1 Но никаких изменений в скорости практически не замечено. Это странно, поскольку этими своими изменениями ты ухудшил производительность сетевой части как минимум вдвое. vitamin77Скорость обработки запросов с использованием удаленной БД критична, поэтому собственно и не исключаю миграцию, если не получится как-то решить этот вопрос. Судя по описанным симптомам, тебя спасёт только локальное зеркало БД при поддержке правильно настроенной репликации. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2015, 13:23 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Используется Jaybird 2.2.9 на Firebird SS 2.5 Уменьшение TcpRemoteBufferSize до 3072 дал небольшой прирост скорости. Я тестировал разные значения, от минимального 1448 до максимального 32767. 3072 показало лучший результат. Локальное зеркало не самый лучший вариант в моем случае. Куда еще можно посмотреть? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2015, 13:40 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
vitamin77Используется Jaybird 2.2.9 на Firebird SS 2.5 И подикося ещё в direct mode. Это бесперпективняк. vitamin77Локальное зеркало не самый лучший вариант в моем случае. Куда еще можно посмотреть? Никуда. Локальное зеркало это единственный оставшийся работоспособный вариант. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2015, 13:50 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
[quot Dimitry Sibiryakov] vitamin77Используется Jaybird 2.2.9 на Firebird SS 2.5 И подикося ещё в direct mode. Это бесперпективняк. Этого я не знаю. Но специально JDBC не настраивал. direct mode к чему относится? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2015, 13:59 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
vitamin77direct mode к чему относится? К тому использует ли Джейбирд клиентскую библиотеку или собственную (неоптимальную) реализацию сетевого протокола. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2015, 14:03 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovvitamin77direct mode к чему относится? К тому использует ли Джейбирд клиентскую библиотеку или собственную (неоптимальную) реализацию сетевого протокола. Дмитрий, где про это можно почитать? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2015, 14:12 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
vitamin77где про это можно почитать? У Джи-бирда нет документации?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2015, 14:25 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
А execute block разве не катит? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2015, 15:45 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
vitamin77Dimitry Sibiryakovпропущено... К тому использует ли Джейбирд клиентскую библиотеку или собственную (неоптимальную) реализацию сетевого протокола. Дмитрий, где про это можно почитать? В документации jaybird как раз сказано, что PURE_JAVA (в стандартном пакете) дает лучший результат при коннекте к удаленной БД по TCP/IP. The PURE_JAVA driver type uses pure Java implementation of the Firebird wire protocol. This type is recommended for connecting to a remote database server using TCP/IP sockets. No installation is required except adding the JDBC driver to the class path. This type of driver provides best performance when connecting to the remote server. Альтернативно можно использовать JNI proxy -требует установки самой платформы и клиентской библиотеки Firebird. Я бы заморочился со вторым вариантом, если бы был уверен, что это даст хотя бы 20-30% к производительности. Но опять же, сами разработчики пишут "PURE_JAVA ... provides best performance when connecting to the remote server" ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2015, 19:29 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
vitamin77сами разработчики пишут "PURE_JAVA ... provides best performance when connecting to the remote server" И ты им, типа, веришь на слово?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2015, 19:32 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
А кому еще верить? =) JNI proxy, по-твоему, 100% будет быстрее? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2015, 20:37 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
vitamin77JNI proxy, по-твоему, 100% будет быстрее? Локальное зеркало будет быстрее - 200%. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2015, 20:39 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
Локальное зеркало может быть не самый лучший вариант. Предполагается, что несколько серверных приложений, постоянно вносят изменения в удаленную БД с частотой по несколько запросов в секунду. Как в таких условиях зеркало будет работать? варианта 2: 1) Оптимизировать запросы по максимуму, чтобы меньше обращений к БД было от сервера + пробовать разные настройки текущего JDBC драйвера или пробовать прикрутить другой. 2) Мигрировать на другую СУБД Пока работаю над п.1. Если не получится, то буду вынужден отказаться от ФБ (хотя это подстава, конечно. Наименее желательный выход) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2015, 21:34 |
|
SELECT нескольких строк с последущим удалением
|
|||
---|---|---|---|
#18+
vitamin77Предполагается, что несколько серверных приложений, постоянно вносят изменения в удаленную БД с частотой по несколько запросов в секунду. Как в таких условиях зеркало будет работать? Ништяк будет работать. Вплоть до полного забития пропускной способности канала. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2015, 21:36 |
|
|
start [/forum/topic.php?fid=40&msg=39099650&tid=1562517]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 253ms |
total: | 382ms |
0 / 0 |