|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
На официальном сайте в технической спецификации ( https://firebirdsql.org/en/firebird-technical-specifications ) сказано, что максимальный размер BLOB'а - 32 ГБ. При этом в pdf-документации и для 2.5 и для 3 написано, что максимальный размер - 4 ГБ. Скорее всего, ограничение 32 - это имеется в виду ограничение самого типа данных , а не конкретной реализации этого типа в СУБД. По хорошему надо хотя бы в комментарии сказать и не вводить людей в заблуждение. Программисту сказать - сам дурак, документацию не читал - можно, а вот, например, коммерсанту, выбирающему продукт - нельзя. А вообще, это замечание навеяно тем, что я не могу скачать с помощью FireDAC даже файл 2.78 GB. Топик в соседнем форуме. P.S. А вот успешно загружаю и 7 ГБ и даже больше. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2020, 22:26 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
nicholaos P.S. А вот успешно загружаю и 7 ГБ и даже больше. Как ты узнал, что "успешно"? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2020, 23:20 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
размер да 32 Гб. Но при таком размере не все функции работают. Там какие проблемы были с определением размера блоба, и с потоковыми блобами есть проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2020, 23:24 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
Симонов Денис, Так, может, настало время таки разобраться, и даже, не побоюсь смелости этого предложения, полечить?)) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2020, 23:28 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
ъъъъъ, Сделал бэкап-рестор, выполнил валидацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2020, 23:40 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
nicholaos ъъъъъ, Сделал бэкап-рестор, выполнил валидацию. И таким образом ты понял, что данные (блобы > 7 Гб) оказались в базе? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 00:16 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
ъъъъъ, По размеру файла базы. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 00:34 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
nicholaos, вообще, размер блоба ограничен размером страницы БД. В доке написано, что для размера страницы 4к лимит это 2 гиг блоба (524к страниц по 4к). Ссылки на блоб, насколько я в курсе, 64битные (4 байта) https://www.firebirdsql.org/pdfmanual/html/fbint-page-5.html https://www.firebirdsql.org/pdfmanual/html/fbint-page-8.html При этом, если на страницу данных блоб не влазит, туда ставятся ссылки на страницы блобов. По идее, на страницу 16к влазит чуть меньше чем 256 ссылок. Ссылки могут быть на страницы блобов уровня 1, где либо данные либо опять ссылки, которые ссылаются на уровень 2, где уже сами блобы. Простым подсчетом у меня как-то не очень получается, типа 256 ссылок * 256 ссылок * 16384 = 1 гиг. Что-то я не то считаю... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 01:28 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
nicholaos ъъъъъ, По размеру файла базы. Оставь на время FireDAC, проведи опыт по выкачиванию, якобы закачанного, на IBX. Сравним результаты. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 10:55 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
kdvСсылки на блоб, насколько я в курсе, 64битные (4 байта) 64 бита - это 8 байт ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 10:58 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
Vlad F, Ответил в исходной теме. Результаты интересные, похоже использование ISC API напрямую мне не поможет. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 12:09 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
nicholaos похоже использование ISC API напрямую мне не поможет ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 12:20 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
Симонов Денис, упс. тогда 512*512*16384 = 4 гиг. для 8к - 256*256*8192 = 0,5 гиг для 4к - 128*128*4096 = 67мб. что-то не сходится. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 12:31 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
hvlad, Так его используют компоненты доступа IBX. При вызове напрямую можно попробовать читать до упора. Есть пример использования ISC API на Delphi? Понятно, что таким примером является сам IBX.IBIntf.pas или FireDAC.Phys.IBWrapper.pas/FireDAC.Phys.IBCli.pas, но из них сложно сделать минимальный пример. Я нашел только на C++ и они требуют зависимость от C:\Program Files (x86)\Firebird\Firebird_2_5\include и C:\Program Files (x86)\Firebird\Firebird_2_5\lib. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 12:36 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
nicholaos Есть пример использования ISC API на Delphi? Понятно, что таким примером является сам IBX.IBIntf.pas или FireDAC.Phys.IBWrapper.pas/FireDAC.Phys.IBCli.pas, но из них сложно сделать минимальный пример. Я нашел только на C++ и они требуют зависимость от C:\Program Files (x86)\Firebird\Firebird_2_5\include и C:\Program Files (x86)\Firebird\Firebird_2_5\lib. Неужели так сложно пример на C перевести на Pascal ? Тем более, что примеров на Pascal - вагон (тот же IBX) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 12:46 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
kdv, я вообще не понимаю что ты считаешь. Ну рассказывали же уже 100500 раз как хранятся блобы, какие у них есть уровни и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 12:47 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
hvlad, давай тогда начнем с конца, причем сразу оговорим, что у нас здоровенный блоб, для которого есть страницы уровня 1 и 2. Уровень 2 - это "конечная" страница блоба, где хранятся данные. Так? Уровень 1 - страница со ссылками на эти самые страницы. На страницу 16к влазит 512 32битных ссылок. Значит, одна страница 1 уровня может адресовать 8 мегабайт блоба (512*16384) на страницах 2 уровня. Теперь, ссылки в записи на 1 уровень страниц блоба. Вот я не знаю, сколько их может быть. Если 1 страница, то это опять 512 ссылок (максимум), но запись же может быть фрагментирована? Если только одна страница 16к, значит 512*8мб = 4 гиг. А если 64к фрагментированых на 4 страницы по 16к, тогда уже 16 гиг. Но это всё равно не стыкуется с "тех данными" которые в доке. Значит, чего-то я не учитываю (или считаю неправильно, что одно и то же). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 13:17 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
kdv Уровень 2 - это "конечная" страница блоба, где хранятся данные. Так? kdv На страницу 16к влазит 512 32битных ссылок Любой блоб любого уровня начинается с записи о блобе. Запись таблицы содержит номер эаписи о блобе (blob_id) - он 8-ми битный. В этой записи о блобе находится его заголовок, длина, кол-во сегментов и прочая мета инф-ция, а также данные блоба. Для блоба 0 уровня все его данные находятся в записи о блобе. Для блоба 1 уровня в записи о блобе находится массив номеров страниц в которых находятся данные блоба. Для блоба 2 уровня в записи о блобе находится массив номеров страниц в которых находится массив номеров страниц в которых находятся данные блоба. По аналогии можно придумать и 3-ий уровень и т.д., но это не нужно на практике. Дальше сам посчитаешь ? PS Напомню, что 16КБ содержит 4096 4-х байтных (32-битных) эл-тов, никак не 512 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 13:55 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
Ну, кто-нибудь скажет, каков максимальный размер блоба на самом деле? Не в ODS, а доступный через кондовые библиотеки доступа. А потом мы на это сообщение ссылаться будем, раз в документации до сих пор противоречия. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 14:09 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
ъъъъъдоступный через кондовые библиотеки доступа. А это, видишь ли, зависит от степени кривизны рук кондового автора конкретной библиотеки. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 14:28 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
nicholaos Vlad F, Ответил в исходной теме. Результаты интересные, похоже использование ISC API напрямую мне не поможет. Понятно. Древние разработчики в таких случаях говорили, - Видит око, да зуб не ймёт.)) P.S. А приведи здесь полностью тот метод FireDAC из первого поста, в котором поднимается AV при вызове API. Не исключено, что его помогут подправить в нужном направлении ("чтения до упора")) раз уж тяжёлая артиллерия подключилась.)) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 14:29 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
hvladДля блоба 2 уровня в записи о блобе находится массив номеров страниц я думал что 2 - это конечная страница данных блоба. hvladНапомню, что 16КБ содержит 4096 4-х байтных тьфу, блин, я байты на биты делил... :-) Так-то да, получается для страницы 4к = 1024*1024*4096 = 4 гиг. А для страницы 16к - 274 гиг. Для 8к - 34 гиг. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 14:30 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
Vlad F, function TIBBlob.Read (FireDAC.Phys.IBWrapper.pas) Код: 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.
AV на Lib.Fisc_get_segment. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 14:44 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
nicholaosAV на Lib.Fisc_get_segment. Такое может быть только если вызывающий код скармливает кривой указатель. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 15:27 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Вызывающий код (из основной темы ) BLOBToFile Код: 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.
Падает на CreateBlobStream, только для больших файлов (>2ГБ). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 15:48 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
nicholaos, приложение 32битное? Чего бы ему уметь аллокировать больше 2 гиг??? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 15:54 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
kdv, Я не хочу аллоцировать столько памяти. Почему загрузка файла через ParamByName('FILE_').AsStream.CopyFrom умеет работать без аллокации, а выгрузка - нет? В том же 32-х битном приложении. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 16:06 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
nicholaos, я не знаю, просто предполагаю. разумеется, что при загрузке, что при выгрузке, нет необходимости закачивать весь объект в память (из базы или из файла). Но как в коде компонент написано - х.з. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 16:09 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
nicholaosВызывающий код Я один не вижу в нём никакого вызова TIBBlob.Read?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 16:32 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 16:39 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
Получилось скачать блоб 7.5 ГБ с помощью ISC API. Так что он в базе действительно лежит. Итого, остались проблемы: 1. В документации Firebird нет четкого указания какие функции с каким максимальным размером блоба работают. 2. octet_length возвращает неправильное значение для блобов больше 2 ГБ. 3. Проблема FireDAC - TIBBlob.Read не может получить первый сегмент большого блоба (Fisc_get_segment) и падает с AV. 4. Проблема FireDAC и IBX - CreateBlobStream пытается аллоцировать всю память сразу и падает с ООМ. Возможно в п.3 и п.4 ситуация сложнее, но здесь нужно разбираться детально самим разработчикам компонентов. Единственный способ безопасно выгрузить большой файл в приложении, которое уже съело много памяти - использовать ISC API. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 17:58 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
nicholaos1. В документации Firebird нет четкого указания какие функции с каким максимальным размером блоба работают. А посмотреть на типы их параметров и сделать выводы - задача непосильная для рядового дельфина?.. Так же как и скопировать (никому ненужный) стек в виде текста вместо картинки. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 18:04 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
nicholaos, Молодец, конечно (я без иронии). А патч для FireDAC, по наработанным материалам можешь сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 18:20 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
nicholaos, я же говорил есть проблемы с блобами > 2Gb есть проблемы в 2.5 и > 4G в 3.0. Чтобы понять почему достаточно просто посмотреть на типы в API. Да на уровне ODS блобы могут хранить существенно больше, но при работе через некоторые методы API есть проблемы, поэтому в документации по SQL и ограничили размеры допустимых BLOB которые хотя бы не вызывают проблем. И да FireDAC не образец. Попробуй поработать с чистым API. Это не сложно ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 22:55 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
Из оффтопных тем выпилил про размеры блобов. Просьба обсуждать означенную проблему в одном месте. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 22:57 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
nicholaos, 1. для поточных блобов есть проблема с isc_seek_blob или IBlob::seek для очень больших блоб. Ибо не хватает вместимости типа параметра offset 2. isc_blob_info или IBlob::getInfo возвращает неверный размер для больших блоб ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 23:16 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
Симонов Денис, В трекере про все это, считаю, безобразие есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 23:23 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
Симонов Денисдля поточных блобов есть проблема с isc_seek_blob или IBlob::seek для очень больших блоб. Во-первых, сами поточные блобы поддерживаются примерно как массивы, то есть никак. Во-вторых, проблема там ЕМНИП только с абсолютным позиционированием, относительное в пределах двухгигабайтных смещений работает на любом диапазоне. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 23:28 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Во-первых, сами поточные блобы поддерживаются примерно как массивы, то есть никак. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2020, 23:49 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
hvladЧто тебе не так с поточными блобами ? Документация уровня "они существуют, для остального читайте исходники". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2020, 01:56 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
Vlad F, про длину блобов вроде есть. Про смещение в потоковых блобов не знаю. Я понятие не имею насколько эта проблема глубока, очевидно что там дело не только в сигнатуре API ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2020, 10:00 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
Симонов Денис, Ссылки можешь дать? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2020, 11:18 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov hvladЧто тебе не так с поточными блобами ? Документация уровня "они существуют, для остального читайте исходники".Поддержка - это не только документация. Хотя документация, конечно, необходима. Но. У тебя что-то не работает с поточными блобами ? Пиши трекеру. Хочется что-то документировать ? Займись или найди того, кто займётся. Я много раз объяснял, как их использовать, ничего военного там нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2020, 12:18 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
hvladЯ много раз объяснял, как их использовать, ничего военного там нет. Теперь для разнообразия попробуй объяснить "зачем". Какие у них преимущества по сравнению с обычными? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2020, 13:47 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, ну ты же сам натыкался на LIST, когда сегменты мелкими порциями записаны. Как понравилось? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2020, 13:51 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov hvladЯ много раз объяснял, как их использовать, ничего военного там нет. Теперь для разнообразия попробуй объяснить "зачем". Какие у них преимущества по сравнению с обычными?Нет оверхеда на хранение размеров сегментов. Работает seek. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2020, 13:52 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
hvladНет оверхеда на хранение размеров сегментов. А они до сих пор реально хранятся? Вроде как ты же говорил, что сегменты сливаются в один большой буфер при передаче. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2020, 14:02 |
|
Техническая спецификация на официальном сайте и максимальный размер BLOB'а
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov hvladНет оверхеда на хранение размеров сегментов. А они до сих пор реально хранятся? Вроде как ты же говорил, что сегменты сливаются в один большой буфер при передаче.Не путай буферизацию с содержимым блоба. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2020, 14:11 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1560409]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
80ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
3ms |
others: | 489ms |
total: | 679ms |
0 / 0 |