Текущий архив: 2013.09.08;
Скачать: CL | DM;
Вниз
выборка Найти похожие ветки
← →
Ega23 © (2012-12-20 12:47) [40]
> не не не Девид Блейн у тебя неправильная уличная магия .
> .. блоб без "индексного" поля?
Согласен, это я с IBSQL попутал. Я ADO уже лет 5 не касался.
← →
stas © (2012-12-20 12:48) [41]Заменил MS SQL на Jet 4.0, то-же.
Так что ваши (sniknik ©) убеждения мне не понятны.
Единственное, за что я читал в книге, так это IBDataSet, подгружает не содержимое блоб поля а его идентификатор.
По поводу оракла видел обсуждения на форуме.
← →
Ega23 © (2012-12-20 12:52) [42]
> Заменил MS SQL на Jet 4.0, то-же.
В настройках надо поковыряться.
А в целом - всё зависит от API доступа. Стандарта нет. Посему утверждения, что "BLOBы всегда грузится целиком в рекордсет", а равно как и "BLOBы всегда грузятся в рекордсет по факту обращения к ним" являются неверными.
← →
sniknik © (2012-12-20 13:15) [43]> В настройках надо поковыряться.
не надо. ковыряться нужно в методах определения.
к примеру (раз уж оппонент такой упертый, и от него не дождаться), взял старую таблицу с полем типа image (mssql) делаю запрос
SELECT * FROM Table1
время доставки 20 записей - 2 сек.
после делаю сохранение рекордсета (для сохранение локально должно докачать) время 30 сек.
вопрос почему? если все уже в памяти.
второй пример, делаем "отрывание" рекордсета от коннекта закрываем коннект, пытаемся сохранить рекордсет. ошибка. необходим доступ.
вопрос зачем? если все уже в памяти. и почему он не необходим если в выборке отсутствуют блобы.
???
← →
sniknik © (2012-12-20 13:20) [44]> время доставки 20 записей - 2 сек. ... время 30 сек.
уточнение, всего файл типа ADTG получился 250 мегабайт. размер выделенной памяти в диспетчере задач не вылез за 75мег.
вопрос почему? ... ну понятно.
← →
stas © (2012-12-20 14:36) [45]
> размер выделенной памяти в диспетчере задач не вылез за
> 75мег.
По Вашим словам он должен увеличится на несколько байт.
← →
Ega23 © (2012-12-20 14:53) [46]
> По Вашим словам он должен увеличится на несколько байт.
Не факт.
Во-первых, не было сказано, одинаков ли размер у каждой записи.
Во-вторых, всё зависит от того, как эта память не столько в Delphi-компонентах выделяется, сколько в самом OLEDB. И как и когда освобождается.
← →
stas © (2012-12-20 14:56) [47]sniknik © (20.12.12 13:20) [44]
Я ведь в [2] и не писал что будут закачаны блобы на 100%. Хотя скорее всего это так и есть, нет времени ни разбираться в этом, ни спорить.
Можете не искать оправдания, они мне не нужны, просто признайте что были не правы, это не так страшно.
И не правы не в том что не думая напечатали пару строк, а в том что имея значек мастера, который по идеи должен указывать, что к носителю этого значка нужно прислушаться, вводите людей в заблуждение, решив что наличие значка переделает все законы и правила под Вас. И если уж решили кого поправить, то делайте это с умом и уважением.
Считаю все таки мастер должен привести основательные доводы, не для меня, для остальных читателей данной ветки.
← →
sniknik © (2012-12-20 15:01) [48]> По Вашим словам он должен увеличится на несколько байт.
по моим словам, я не помню на сколько байт... в ответе был смысл, а не конкретные данные. это раз, а два ты вообще читаешь? - после сохранения т.е. когда уже последовательно было обращение и соответственно скачка для локального сохранения.
p.s. это такая "политика"? не сообщать ничего своего только "тянуть" и "опошлять не пониманием" от собеседника... вот из-за такого как то "зарекся" сообщать что-то "до того как первые не начнут"... видимо не зря.
p.p.s. завязываю полемику "как со взрослыми" перехожу обратно к "выкрика с места".
← →
stas © (2012-12-20 15:09) [49]> По Вашим словам он должен увеличится на несколько байт.
вот это имеется ввиду
> любой размер будет представлен "ссылкой" в пару тройку байт
> (хз. на конкретное значение).
А тут уже 75 мб...
что подтверждает мои слова сказанные в [2], имя блоб поля в таблице и делая выборку в 10 млн. записей можно забить ОЗУ.
← →
sniknik © (2012-12-20 15:10) [50]> Считаю все таки мастер должен привести основательные доводы
никто вам ничего не должен. + доводы приведены (против принципа... потому не сразу), "убийственные" доводы..., для тех кто способен понять.
← →
Ega23 © (2012-12-20 15:14) [51]
> Я ведь в [2] и не писал что будут закачаны блобы на 100%.
> Хотя скорее всего это так и есть, нет времени ни разбираться
> в этом, ни спорить.
В [2] - нет, в [6] - да.
> stas © (19.12.12 13:09) [6]
>
> sniknik © (19.12.12 13:02) [4]
> 1. Блоб закачивается на клиента полностью
> Считаю все таки мастер должен привести основательные доводы,
> не для меня, для остальных читателей данной ветки.
Тебе привели основательные доводы. Тебе сказали, что ты в своём безапелляционном утверждении неправ. Тебе указали конкретные случаи, когда ты неправ.
Ещё и извиниться надо. И животноводство.
← →
sniknik © (2012-12-20 15:16) [52]> что подтверждает мои слова сказанные
что непонятно в словах "после сохранения"?
т.е. уже когда было обращение и докачка (и так не доходит!? ).
"до", сразу после запроса, там было, не помню и не буду больше проверять что-то около 9 мегабайт (т.е. практически "чистая" прога как после запуска).
в понимании пары слов путаешься а тагие глобальные заявления делаешь.
← →
stas © (2012-12-20 15:18) [53]sniknik © (20.12.12 15:10) [50]
А я и не писал что мне, поддержать имидж сайта, так сказать.
А я тут раз в пол года.
Поместил в MS ACCESS в 7 записей, ole объект (rar архив) размером 800 кб, ну добавим еще 100 для служебной инф. 900x7 = 6,3 мб. Прирост после открытия 12 мб...
← →
sniknik © (2012-12-20 15:26) [54]> размером 800 кб,
что так скромно? давай по 100 мег как говорил.
> 900x7 = 6,3 мб
знаешь что такое оле обьект в акцесс? префикс постфикс самой структуры, сколько занимает знаешь? как хранится и представляется инфа в рекордсете?
"чистое" арифметическое говорит реально НИ О ЧЕМ.
к примеру строки в акцессе хранятся в юникоде (по дефаулту, если ничего не менять), а по твоему ты будешь именно то что записал в ansi?
← →
stas © (2012-12-20 15:30) [55]Ega23 © (20.12.12 15:14) [51]
1. Я написал что не мне
2. Я только увидел что мне пытаются доказать что я не прав, не признавая своей не правоты см. [49] где приведен не оспоримый факт, того что человек не прав.
Я понимаю что я здесь редко, а sniknik © постоялец так же как и ты, и пиво с вами не пью. И доказывать будете всей толпой долго и нудно лишь бы не запятнать честную репутацию друга.
Но признать свои ошибки нужно!
← →
Ega23 © (2012-12-20 16:14) [56]
> 2. Я только увидел что мне пытаются доказать что я не прав,
> не признавая своей не правоты см. [49] где приведен не
> оспоримый факт, того что человек не прав.
Я нихрена не понял.
Могу сказать только одно: в gds32 BLOB подгружается по факту обращения к нему.
Точка.
З.Ы. FireBird 2.1 База ~ 30Гб.
Общий размер документов в базе - 21.086.972.740 байт
Код:
tc := GetTickCount;
try
ds := FDB.OpenDataSet("select id, doc from docs where doc is not null", []);
try
while not ds.Eof do ds.Next;
finally
ds.Free;
end;
finally
ShowMessage(IntToStr(GetTickCount - tc));
end;
Время выполнения - 8672 мс.
Если просто сохранять каждый стрим в файлы - работает ~ 10 минут.
Вопросы?
← →
Ega23 © (2012-12-20 16:18) [57]Забыл дописать: всего документов с doc is not null - 15185
← →
Inovet © (2012-12-20 16:26) [58]> [55] stas © (20.12.12 15:30)
Я вот читаю и не пойму: ты уже понял свою неправоту и теперь выкручиваешься или таки не понял. Вот почему ты взял 800 кБ а не 20 ГБ, как предлагалось? Так что похоже на первое предположение - выкручиваешься.
Ну и по БЛОБам. Как-то было бы глупо со стороны разработчиков тащить по-умолчанию (может и можно настроить иначе) БЛОБы на клиента. А загружать их по мере необходимомсти - неглупо, если необходимость не возникла, то и не загрузятся ненужные. Вот с такой логикой без конкретной реализации ты согласен? Если согласен, то вопрос: зачем разработчикам конкретного сервера может понадобиться поступать иначе, какие такие могут быть веские причины?
← →
Jeer © (2012-12-20 16:28) [59]В DBISAM (f/s) данные из блобов подгружаются только при запросе их содержимого в те или иные контейнеры.
// Вот так не загружается ни один
SELECT * FROM TEST;
SELECT MEM FROM TEST;
А, к примеру, после селекта и последующем
memo.lines.text := qu.FieldByName("MEM").AsString;
идет очевидная подгрузка.
P.S.
Собственно, аналогично и с блобами. Многократно проверено.
← →
stas © (2012-12-20 16:54) [60]Inovet © (20.12.12 16:26) [58]
т.е. ты предлагаешь мне засунуть 20ГБ в блоб поле?
с таким размером экспериментируй сам.
И где я или кто-то предлагал такую глупость?
Даже при размере блоба в 800 кб. видем, то что не 2-3 байта грузится, а полный объем.
Ну, видимо не предусмотрели...
Jeer ©
Не знаю и спорить не буду.
Ega23 © (20.12.12 16:14) [56]
Согласен. Это даже указано в документации.
← →
Ega23 © (2012-12-20 17:00) [61]
> т.е. ты предлагаешь мне засунуть 20ГБ в блоб поле?
> с таким размером экспериментируй сам.
> И где я или кто-то предлагал такую глупость?
Засунь 20 Мб в 1000 записей, в чём проблема?
← →
Ega23 © (2012-12-20 17:02) [62]
> Согласен. Это даже указано в документации.
Ну а раз согласен, то зачем тогда этот спор
> stas © (19.12.12 13:09) [6]
>
> sniknik © (19.12.12 13:02) [4]
> 1. Блоб закачивается на клиента полностью
?
← →
stas © (2012-12-20 21:33) [63]Ega23 © (20.12.12 17:00) [61]
Зачем? о 20Гб и речи не было.
Ega23 © (20.12.12 17:02) [62]
Спор о том что человек назвав чушью, то что блоб поля забьют ОЗУ при открытии таблицы в 10 млн. записей. Сказал еще большую чушь и не хочет этого признать.
Если бы сказал что зависит от компонентов доступа, я бы и слова ему не сказал.
← →
Игорь Шевченко © (2012-12-20 22:02) [64]
> Спор о том что человек назвав чушью, то что блоб поля забьют
> ОЗУ при открытии таблицы в 10 млн. записей
При открытии никто ничего не забьет.
Написать пример ?
← →
sniknik © (2012-12-21 01:20) [65]> Спор о том что человек назвав чушью, то что блоб поля забьют ОЗУ при открытии таблицы в 10 млн. записей.
чушь она и есть чушь, сказана безапелляционно в общем (т.е обо всем), что усложняет "диагноз".
сказал бы, что это на некоторых (тобой писанных например) компонентах доступа, и я бы не стал возражать...
ты кстати открытие таблицы и запрос на данные не путаешь? разные вещи однако. ... на файл серверных/(аналогах открытия на сервере, курсорах к примеру) открытие не то что блоб, даже обычных данных в озу не "забьет".
← →
Ega23 © (2012-12-21 08:50) [66]
> Спор о том что человек назвав чушью, то что блоб поля забьют
> ОЗУ при открытии таблицы в 10 млн. записей.
Я же выше привёл пример. 21 Гиг. 15.000 записей. 8 секунд. Никакого забития памяти.
Тебе для MSSQL аналогичное написать?
← →
stas © (2012-12-21 15:57) [67]Написал приложение для теста.
Используется база акцесса, состоящая и 1-й таблицы, в ней 2 поля, первое счетчик, второе memo
1. Загружаем в него список файлов, общим размером 223 мб
http://piccy.info/view3/3880841/37f0b9edc922795de500e923aa68efd0/orig/
2. Для чистоты эксперемента, закрываем приложение, и открываем по новой, смотрим размер занимаемой ОЗУ приложением
http://piccy.info/view3/3880863/d215a6efd932408f2fdfdb7cad2e82a1/orig/
3. Открываем базу без блоб поля, (в запросе выборка только 1-го поля - счетчика)
http://piccy.info/view3/3880871/70381f130abb10fd5ef9cd44434079cb/orig/
как видим, размер приложения особо не изменился
4. Открываем базу с блоб полем в запросе
http://piccy.info/view3/3880876/04c776576d019111a1fb6b5b42ffd5a0/orig/
и наблюдаем сколько занимает места программа в ОЗУ - 248 мб.
Кому интересно или сомневается, качаем программу с исходниками и проверяем.
http://narod.ru/disk/64673449001.95e00ed1c23e4990fc07505a255b198b/prog.rar.html
← →
stas © (2012-12-21 15:58) [68]*в архиве база пустая
← →
Игорь Шевченко © (2012-12-21 16:00) [69]stas © (21.12.12 15:57) [67]
Успокойся уже
← →
stas © (2012-12-21 16:25) [70]Игорь Шевченко © (21.12.12 16:00) [69]
Ну, так пора бы признать, что ваш "мастер" в [4] сказал бред и всячески пытается выкрутится.
← →
Jeer © (2012-12-22 02:38) [71]Удалено модератором
← →
sniknik © (2012-12-24 08:11) [72]> и всячески пытается выкрутится.
я даже не пытался проверить, так как у тебя, с акцесс... т.к. методы определения тобой не были раскрыты до..., фактичеси вот этого поста.
могу предположить, на скорую руку, без опять проверок, что 1 - аксесс не подходящая для этого дела база... т.к. локальная (локальными методами поведение должно исправится) . 2 - тип OLE у него нестандартный блоб, контейнер под ActivX обработка отличается от стандартной. 3 - возможно, опять из-за типа, дельфя не определяет его как блоб (т.к. старая, тип могли позже ввести) а например как длинную строку с соответствующей обработкой. 4 - ADO пытается включить поле в идентификатор записи (опять возможно из-за типа), с тем же результатом.
проверить могу позже, на работе (если работы не будет).
Страницы: 1 2 вся ветка
Текущий архив: 2013.09.08;
Скачать: CL | DM;
Память: 0.63 MB
Время: 0.009 c