|
|
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
Господа, скажите пожалуйста. Если dbf лежит на файл-сервере, то при чтении его на клиенте и изменении сколько данных будет физически прочитано и отправленно по сети? Рассмотрим несколько сценариев: 1) поиск записи по индексу 2) поиск записи без индекса 3) изменение записи Спасибо заранее! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 19:47:05 |
|
||
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
1) поиск записи по индексу несколько страниц B+ дерева (максимум logN RECCOUNT, где N - число узлов в странице B+ дерева) + страница содержащая искомую запись (страница - это внутренний буфер) 2) поиск записи без индекса в худшем случае вся таблица 3) поиск записи без индекса страница содержащая изменяему запись ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 19:52:46 |
|
||
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
автор(страница - это внутренний буфер) Страница = 4 Кб. Так фокс и грузит данные в память вне зависимости от располжения талицы. Постранично. В принципе, странно было бы если было бы не так. Без этого эффективное преобразование из линейных адресов процесса в физические были бы затруднительны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2005, 23:56:48 |
|
||
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
Ага, т.е., грубо говоря, будут прочитаны все страницы пока не будет найдена запись (по индексу - путь по дереву до листа, без индекса - секвенциально пока не наткнется)? Примечание: клиент не фокс, а Visual Objects и генератор отчетов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 11:52:55 |
|
||
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
По индексу - методом половинного деления, простым перебором , пока не упреться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 12:04:38 |
|
||
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
2 Flex0 авторСтраница = 4 Кб. Так фокс и грузит данные в память вне зависимости от располжения талицы. Постранично. В принципе, странно было бы если было бы не так. Без этого эффективное преобразование из линейных адресов процесса в физические были бы затруднительны. Почему именно 4 Кб? Fox не осуществляет прямое чтение, поэтому размер страницы может быть произвольным. На пути к странице фокса куча буферов: драйвера, системы файловой или сетевой. Так что, фокс физической страницей, в принципе, не оперирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 13:06:47 |
|
||
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
Попытка поиска истины была здесь http://forum.foxclub.ru/read.php?f=5&i=89572&t=89181, там рассматривался пример наложения фильтра под гридом ("тяжелая задача"), тем не менее какое-то рациональное зерно можно почерпнуть, как происходит чтение записей с файл-сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 13:49:13 |
|
||
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
Анатолий Широков, потому что так устроена OC Win32. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2005, 17:40:00 |
|
||
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
Hi Flex0! Не совсем "половинным делением". От одной страницы индексного тега может идти >2 ссылок на "нижележащие" страницы. В идеале, до 55 страниц (в компактном индексе для "промежуточных" страниц формат отводит 500 байт на информацию о самом ключе + адрес страницы + ещё 4 байта для не очень ясного "intra-index pointer") - это если размер ключа - 1 байт (логическое поле без NULL например, или CHAR(1) поле). Таким образом даже для вырожденного случая - таблицы с 1Млрд записей (каждая размером 2 байта - 1 из которых Delete Mark) в идеале потребуется всего 5 считываний индексных страниц (на уровне страницы "листа" формат позволяет хранить от 120 до 240, но обычно 160 записей - в зависимости от "разброса" номеров строк (т.е. будет отведено на Recno+BitCount 2, 3 или все 4 байта в "упакованном" формате - разбросом самих "ключевых значений" в данном случае можно пренебречь, считая что на них уходит 1 или 2 байта)). Кстати говоря это чисто теоретический пример - т.к. такой индекс создать не получится - он по размеру будет превосходить 2Гб чего фокс не допускает. Впрочем для максимального же 2Гб cdx все эти рассуждения также справедливы - в общем всё зависит от длины ключевого выражения... P.S. Естественно что огромную роль тут играет "сбалансированность" дерева и степень заполненности оконечных индексных "листов" - тут кстати есть большие различия, обусловленные использованием той или иной версии фокса. Известно что VFP7 создаёт наиболее "разряжённые" индексы (они больше по объёму - вплоть до 1.5 раз по сравнению с другими версиями фокса) - зато они более эффективны при большом числе операций вставки (и возможно замены)... P.P.S. для всех желающих понаблюдать за внутренней работой фокса с dbf можно рекомендовать утилиту FileMon от небезызвестного Марка Руссиновича (сайт раньше был sysinternals.com) Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2005, 01:22:33 |
|
||
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
Igor Korolyov, еще раз ты доказал кривую реализацию столь простого матеатического алгоритма ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2005, 06:33:16 |
|
||
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
2 Flex0 авторАнатолий Широков, потому что так устроена OC Win32. Ответ в пользу бедных. Ссылочкой брось, там где упоминается размер страницы 4 Кб - неужели вот такой "незыбленный" размер? Сомневаюсь. Код: plaintext Ничего Игорь не доказывал. Он показал. У тебя же есть возможность реализацию B дерева сделать "прямой". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2005, 12:45:14 |
|
||
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
Анатолий Широков, ссылку не дам. Но это написано в любом учебнике по системному программированию, например Зубков. . (не помню инициалов), программирование на ASM для Win32. В том числе и там подробненько расписано почему страница 4К, сейчас помню точно, что это упираеться в специфику устройства локальной таблицы дискрипторов процесса, глобальной таблицы дискрипторов системы и собсвенно самого дискриптора и целого ряда служебных регистров для защиты страниц+ алгоритм эффективного преобразования страницных адресов в физический адреса OC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2005, 16:54:04 |
|
||
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
На счет "в пользу бедных" и "ссылку не дашь" - я по ключевым словам "системное программирование" нарыл на 12 страниц ссылок :) -ищите да обрящите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2005, 17:14:23 |
|
||
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
Скорее бы 1-ое сентября... :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2005, 18:00:32 |
|
||
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
Соскучился ? ;) Или решил начать все занаво, увидев свою проф. непригодность ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2005, 18:37:38 |
|
||
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
Ага! Именно ты, о Несравненный Гнущийся_Ноль, открыл мне глаза! :-) P.S. Тс-с-с-с... О паяльниках ни слова! ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2005, 19:22:23 |
|
||
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
Ну если ты дорос до состояния реального своего самоосознания, то думаю ты понимаешь, что я сделал тебе великое одолжение ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2005, 19:30:12 |
|
||
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
Hi Flex0! Если кое-кто не в состоянии понять что данный алгоритм ЭФФЕКТИВНЕЕ простого бинарного дерева (как по скорости поиска, так и по эффективности использования дискового пространства, по минимизации операций доступа к физическому носителю), то мне искренне жаль этого человека... Тем более что он (алгоритм) даже и не называется нигде B-tree... Просто похож на каком-то уровне абстракции. Я кажется встречал термин B+ tree или что-то в этом духе, но точно не помню. Одно 100% - это НЕ бинарное дерево в чистом виде. Насчёт страницы в 4К даже не знаю что и сказать - приведенные цитаты с одной стороны справедливы - да именно так устроена память в IA32 процессорах (хотя это лишь один из уровней абстракции - сегментная адресация уже будет несколько сложнее простой страничной... Хотя в Windows не используются ВСЕ возможности процессоров данной архитектуры). С другой стороны НИЧЕГО БЛИЗКОГО к тому как ЧИТАЕТСЯ ФАЙЛ, в частности индексный в память, и как он затем используется фоксом нет. Заметь, что я не говорю о всяких косвенно влияющих факторах, типа секторов и кластеров имеющихся на большинстве типов накопителей, про размеры сетевых пакетов (при сетевом размещении файлов) и т.п. Порой одного знания голой теории недостаточно - надо ещё и думать, и экспериментировать. Повторюсь - любой желающий ознакомится с тем как именно фокс работает с файлами (абстрагируясь от тонкостей реализации драйверов как жёстких дисков, CD и прочих, так и файловой системы), может это сделать скачав и запустив утилиту FileMon. Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2005, 23:36:08 |
|
||
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
авторТем более что он (алгоритм) даже и не называется нигде B-tree... Просто похож на каком-то уровне абстракции. Я кажется встречал термин B+ tree или что-то в этом духе. Да, конечно, это все навсего структура данных являющая сбалансированным сильноветвящимся деревом. Эта структура была создана для организации внешнего поиска, когда файл не может быть целиком вмещен в оперативную память. B-деревья, а так же их улучшения (B+ и B*) подробно описаны у Д.Кнута т.3 Сортировка и поиск. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 00:00:33 |
|
||
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
авторПорой одного знания голой теории недостаточно - надо ещё и думать, и экспериментировать. Повторюсь - любой желающий ознакомится с тем как именно фокс работает с файлами (абстрагируясь от тонкостей реализации драйверов как жёстких дисков, CD и прочих, так и файловой системы), может это сделать скачав и запустив утилиту FileMon. Я тебе про слонов, ты мне про козлов. Если для тебя это голая теория и ты дальше FileMon не зашел, не нужно делать таких категорических заявлений. Или ты думаешь, что в VFP реализован свой механизм управления памятью :) Да блин, сам фокс - псего , навсего процесс. Ему 4 Гига OC выделяет, как и всем другим запущенным в Win32. Можно петь любые дифирамбы про тот как фокс работает с файлами, что он там открывает и по сколько. На уровне ОС это происходит именно так как я описал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 09:47:25 |
|
||
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
Hi Flex0! 1) ВНИМАТЕЛЬНО ЧИТАЙ ИЗНАЧАЛЬНЫЙ ВОПРОС!!!! то что за привычка - мы тут про Фому, а ты про Ерёму. 2) Процессу в Win32 системах выделяется всего 2Гига памяти (3Гига под некоторыми серверными версиями ОС) - остальные 2 Гига (или соответственно 1) резервируются для самой системы, и собственно пользовательскому коду недоступны (для фокса код рантайма это ТОЖЕ пользовательский код фокс вообще написан на C++ и НИЧЕМ не отличается от других приложений на нём написанных). 3) Фокс запрашивает себе память штатными механизмами - если ты внимательно почитаешь про Heap, а заодно про File IO (хотя-бы банальнейший ReadFile) то перестенешь говорить явные глупости - страничная организация памяти НЕ МЕШАЕТ приложению запрашивать себе блоки размером скажем в 1 байт. Если довести твои рассуждения до абсурда, и вспомнить что физически ОЗУ компа представляет собой от 4 до пары десятков микросхем, то твои высказывания аналогичны тому, что раз приложение запросило себе 1 байт памяти, то оно отхватило себе целиком всю микросхему, и следующий запрос захватит следующую микросхему :) Поверь мне, что если приложение запросит себе 100 блоков по 1 байту, то оно скорее всего получит все эти "кусочки" в рамках одной и той-же страницы, даже учитывая накладные расходы на хранение управляющих структур. > Можно петь любые дифирамбы про тот как фокс работает с файлами, что он там > открывает и по сколько. На уровне ОС это происходит именно так как я > описал. ЧТО происходит? Чтение файла с носителя??? Т.е. если у меня имеется 10000 файлов по 1 байту, то по твоей логике для их считывания мне потребуется 40 Мегабайт памяти??? Или если у меня имеется один файл размером 2Гига, то я не могу его обработать по частям, не считывая ЦЕЛИКОМ в память - т.е. не выделяя себе как минимум 2Гига памяти??? Странно, но вот прямо сейчас я могу работать ОДНОВРЕМЕННО с несколькими dbf-ами, суммарный размер которых (вместе с cdx) превышает 2Гига, на ОС которая выделяет <2Гиг памяти на процесс (учитывая что в эту-же память грузятся и все системные dll-ки, фоксовый рантайм...) Парадокс? Только не надо начинать тут рассказывать про Memory-Mapped files - для dbf/cdx/fpt фокс не использует эту технологию, он совершенно трививально считывает необходимые кусочки файла в локальные блоки памяти - размер которых НЕ кратен размеру страницы памяти ОС - да и с чего-бы это ему было необходимо. Ты можно подумать при написани C# программ тоже выравниваешь все структуры по границе 4Кб :) Особенно учитывая что в C# в принципе невозможно это сделать, т.к. там работа НЕ ведётся через указатели, и физическая организация памяти скрыта от программиста. В общем предлагаю заканчивать валять ваньку, и признать что не про то ты поешь, как минимум не тот вопрос прочитал. Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 14:44:49 |
|
||
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
Попробую высказать свое мнение: размер страницы возможно имеет смысл соотносить с размером блока на диске, таким образом можно оптимизировать операции чтения с диска. В RDMBS это называется иногда тоже блок, неделимая логическая частица при I/O-операциях. Организация памяти тут может быть и не причем... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 16:49:48 |
|
||
|
Файл читается целиком?
|
|||
|---|---|---|---|
|
#18+
2 AntonGart А сетевые устройства? Вообщем, Игорь, правильно сказал, что FOX ничем не отличается от других виндовс приложений и ему не ведом ни размер кластера ни другие низкоуровневые вещи. У фокса есть только WinAPI. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2005, 17:06:07 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33216859&tid=1593670]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
187ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
80ms |
get tp. blocked users: |
2ms |
| others: | 215ms |
| total: | 528ms |

| 0 / 0 |
