powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / SELECT нескольких строк с последущим удалением
25 сообщений из 33, страница 1 из 2
SELECT нескольких строк с последущим удалением
    #39099588
vitamin77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Необходимо вычитать несколько строк из таблицы и сразу их удалить.
Использование запроса типа:

DELETE FROM USERS WHERE USERS_BASE = ? returning USERID, CLIENTID, PWD

работает только если в таблице одна строка.

Как быть?
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39099602
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сначала выбирай, потом удаляй. В чём проблема-то?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39099604
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitamin77,

Код: plsql
1.
FOR SELECT  .. INTO :ID DO DELETE ... WHERE ID=:ID
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39099622
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitamin77,

использовать GTT ?
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39099648
vitamin77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Одним запросом нужно, чтобы лишний раз по TCP к удаленной БД запросы не отправлять.
Процедуру не хотелось бы делать, т.к. возможно придется на другую СУБД мигрировать.
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39099650
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitamin77Одним запросом нужно, чтобы лишний раз по TCP к удаленной БД запросы не
отправлять.
Не экономь на спичках. Затраты на отправку одного запроса DELETE утонут на фоне всего
остального.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39099660
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitamin77,

ты бы сначала узнал про другие СУБД. В каких из них RETURNING вообще поддерживается? В каких он может возвращать более одной удалённой строки?
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39099785
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitamin77Одним запросом нужно, чтобы лишний раз по TCP к удаленной БД запросы не отправлять.

http://firebirdsql.su/doku.php?id=execute_block

1. в одному запросе - копируешь нужные данные в per-transction GTT
2. удаляешь из основной таблицы ID из GTT
3. читаешь свои данные из GTT

..потом закрываешь транзакцию с автоматической очисткой GTT

Это в предположении что в этом зпросе на самом деле данных фиг да ни фига.
Если запрос "большой", то GTT опухнет, но тогда и огорчаться из-за "лишний раз по TCP" не стоит - ты все равно читать данные будешь десятком запросов, а то и сотней.
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39099790
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitamin77Одним запросом нужно, чтобы лишний раз по TCP к удаленной БД запросы не отправлять.
Процедуру не хотелось бы делать, т.к. возможно придется на другую СУБД мигрировать.

Тогда тебе сначала этот вопрос нужно задать в форуме про ту БД, куда мигрировать собрался, а только потом уже здесь.
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39100596
vitamin77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Arioch и всем остальны за помощь, попробую

Dimitry Sibiryakov, дело в том, что серверное приложение и БД находятся на разных континентах. Пинг ~100-130 млс.
Локально запросы выполняются очень быстро, но если отправлять их на удаленную БД по TCP, даже самый легкий запрос типа "Delete from tableName where Key = ?" выполняется не менее 0,6-0,8 сек. При том, что записей на удаление не больше 10-20.

Поэтому как сказать, "спички". Приходится сокращать кол-во запросов насколько это возможно.

Я пробовал настраивать firebird.conf:
TcpRemoteBufferSize = 3072
TcpNoNagle = 1

Но никаких изменений в скорости практически не замечено.

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

обычно если делается массовое удаление то результаты уже не возвращаются. Ну даже если хочешь сделать так без ХП пиши EXECUTE BLOCK, вот только он как и ХП будет непереносим на другую СУБД
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39100613
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39100632
vitamin77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Используется Jaybird 2.2.9 на Firebird SS 2.5
Уменьшение TcpRemoteBufferSize до 3072 дал небольшой прирост скорости. Я тестировал разные значения, от минимального 1448 до максимального 32767. 3072 показало лучший результат.

Локальное зеркало не самый лучший вариант в моем случае.

Куда еще можно посмотреть?
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39100656
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitamin77Используется Jaybird 2.2.9 на Firebird SS 2.5
И подикося ещё в direct mode. Это бесперпективняк.

vitamin77Локальное зеркало не самый лучший вариант в моем случае.

Куда еще можно посмотреть?
Никуда. Локальное зеркало это единственный оставшийся работоспособный вариант.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39100676
vitamin77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Dimitry Sibiryakov]
vitamin77Используется Jaybird 2.2.9 на Firebird SS 2.5
И подикося ещё в direct mode. Это бесперпективняк.

Этого я не знаю.
Но специально JDBC не настраивал.

direct mode к чему относится?
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39100685
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitamin77direct mode к чему относится?
К тому использует ли Джейбирд клиентскую библиотеку или собственную (неоптимальную)
реализацию сетевого протокола.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39100705
vitamin77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovvitamin77direct mode к чему относится?
К тому использует ли Джейбирд клиентскую библиотеку или собственную (неоптимальную)
реализацию сетевого протокола.


Дмитрий, где про это можно почитать?
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39100723
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitamin77где про это можно почитать?
У Джи-бирда нет документации?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39100841
Фотография Tonal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А execute block разве не катит?
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39101112
vitamin77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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"
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39101115
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitamin77сами разработчики пишут "PURE_JAVA ... provides best performance when
connecting to the remote server"
И ты им, типа, веришь на слово?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39101150
vitamin77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А кому еще верить? =)
JNI proxy, по-твоему, 100% будет быстрее?
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39101153
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitamin77JNI proxy, по-твоему, 100% будет быстрее?
Локальное зеркало будет быстрее - 200%.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39101186
vitamin77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Локальное зеркало может быть не самый лучший вариант.
Предполагается, что несколько серверных приложений, постоянно вносят изменения в удаленную БД с частотой по несколько запросов в секунду. Как в таких условиях зеркало будет работать?

варианта 2:
1) Оптимизировать запросы по максимуму, чтобы меньше обращений к БД было от сервера + пробовать разные настройки текущего JDBC драйвера или пробовать прикрутить другой.
2) Мигрировать на другую СУБД

Пока работаю над п.1. Если не получится, то буду вынужден отказаться от ФБ (хотя это подстава, конечно. Наименее желательный выход)
...
Рейтинг: 0 / 0
SELECT нескольких строк с последущим удалением
    #39101189
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitamin77Предполагается, что несколько серверных приложений, постоянно вносят
изменения в удаленную БД с частотой по несколько запросов в секунду. Как в таких условиях
зеркало будет работать?
Ништяк будет работать. Вплоть до полного забития пропускной способности канала.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / SELECT нескольких строк с последущим удалением
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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