|
Медленная выборка блобов
|
|||
---|---|---|---|
#18+
Есть такой запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
и такой перебор Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
запрос возвращает 52 записи. Общее время чтения 2.2 секунды (сеть не очень) Теперь меняем запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
общее время чтения 77 миллисекунды. Выигрыш в 30 раз. Да, я знаю, про BlobID и про isc_get_segment, но 30 раз! Может можно пошаманить с конфигами? Где-то мне здесь попадался алгоритм передачи блобов, но сейчас найти не могу. FB 3.0.7 С уважением, Vasilisk ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 13:37 |
|
Медленная выборка блобов
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3.
Полный текст: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Включается, понятное дело, на клиенте. Для внешних подключений (EDS) сервер тоже будет клиентом. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 13:52 |
|
Медленная выборка блобов
|
|||
---|---|---|---|
#18+
_Vasilisk_ Может можно пошаманить с конфигами? это ничего не даст. Если при выборке обычных типов записи буфферизируются и префетчатся - можно поиграться с размером пакета. С блобами это практически бесполезно. Ты же не супердлинные блобы передаёшь. То есть весь блоб скорее всего одним сегментом читается. Значит дело только в количестве сетевых пакетов, а с ними ничего не поделаешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 13:53 |
|
Медленная выборка блобов
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, ты думаешь он в DESCRIPTION сочинение пишет? Я думаю это довольно короткие описания. Так что тут дело не в размере, а просто в раунд-трипах ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 13:57 |
|
Медленная выборка блобов
|
|||
---|---|---|---|
#18+
Теоретически можно отхакать компоненты доступа, если они по глупости вызывают isc_blob_info(). Это сэкономит один раундтрип. Можно было бы пошаманить с размером буфера, но он обычно достаточно большой. И самое главное - посмотреть а сколько в этих блобах, собственно, сегментов. Какой-нибудь баг способен их записывать с умолчательным сегментом 80 символов. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 14:02 |
|
Медленная выборка блобов
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov они по глупости вызывают isc_blob_info(). Код: 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.
Dimitry Sibiryakov Какой-нибудь баг способен их записывать с умолчательным сегментом 80 символов. Ладно, все я понял. Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 14:13 |
|
Медленная выборка блобов
|
|||
---|---|---|---|
#18+
Firebird-у не хватает флага типа "возвращать blob вместе с данными", чтобы получение содержимого blob не делало запросов к серверу. Непонятно, почему хранение blob-ов на странице с данными - хорошо, а передача их клиенту вместе с данными - плохо? Где тут логика? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 16:26 |
|
Медленная выборка блобов
|
|||
---|---|---|---|
#18+
ggreggory, потому что, остальные типы данных имеют фиксированный размер и под них можно заранее выделить буфер нужного размера. А с блобами не понятно, сколько надо ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 16:53 |
|
Медленная выборка блобов
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov И самое главное - посмотреть а сколько в этих блобах, собственно, сегментов. Какой-нибудь баг способен их записывать с умолчательным сегментом 80 символов. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 18:59 |
|
Медленная выборка блобов
|
|||
---|---|---|---|
#18+
ggreggory Firebird-у не хватает флага типа "возвращать blob вместе с данными", чтобы получение содержимого blob не делало запросов к серверу. PS Это есть в планах, но с невысоким приоритетом ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 19:00 |
|
Медленная выборка блобов
|
|||
---|---|---|---|
#18+
_Vasilisk_ Да, я знаю, про BlobID и про isc_get_segment, но 30 раз! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 19:01 |
|
Медленная выборка блобов
|
|||
---|---|---|---|
#18+
hvlad ggreggory Firebird-у не хватает флага типа "возвращать blob вместе с данными", чтобы получение содержимого blob не делало запросов к серверу. PS Это есть в планах, но с невысоким приоритетом Но если оно ТАК жмёт, то можно и постараться для себя :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 19:03 |
|
Медленная выборка блобов
|
|||
---|---|---|---|
#18+
hvlad Это не играет роли, при чтении блоба сетевой слой запрашивает у сервера 32 64 КБ и выдаёт приложению сегменты из этого буфера. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 19:10 |
|
Медленная выборка блобов
|
|||
---|---|---|---|
#18+
hvlad Сделаешь ? PS Это есть в планах, но с невысоким приоритетом На ум приходит в SELECT-запросе запрашивать вместе с блобом еще и преобразованное в строку начало блоба, типа Код: plsql 1. 2. 3. 4.
И в таблицах показывать это начало. Тогда при фетче не будет кучи запросов. А уже при детальном просмотре обращаться к основному полю. В правильном ключе рассуждения? hvlad Но если оно ТАК жмёт, то можно и постараться для себя :) "Исходники открыты, если нужна фича - бери и делай". Эту мысль я понял :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 19:33 |
|
Медленная выборка блобов
|
|||
---|---|---|---|
#18+
ggreggory, ключ - правильный, но не понятно - весь блоб попал в строку или нет. Я бы делал как-то так: Код: sql 1. 2.
Какое поле не NULL, то и брать на клиенте. Есс-но, возможны разные варианты, этот не панацея. PS OCTET_LENGTH(BLOB) берёт длину в байтах из заголовка блоба, CHAR_LENGTH(BLOB) читает весь блоб для мультибайтовых кодировок. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2021, 20:00 |
|
|
start [/forum/topic.php?fid=40&fpage=8&tid=1560095]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
81ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 204ms |
0 / 0 |