![]() |
|
|
![]()
|
|
| Lunatikus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 29.6.2007 Репутация: 1 Всего: 6 |
Понимаю,что проверить самому несложно.Но надо время,чтобы сделать код для проверки.Кто-нибудь может сказать навскидку,на соклько будет отличаться скорость полного перебора по запросу с помощью метода next при разных кол-вах записей?и будет ли отличаться.
-------------------- TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games). сайт гильдии |
|||
|
||||
| Rodman |
|
|||
|
CIO ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 6144 Регистрация: 7.5.2006 Где: Ukraine ⇛ Kyiv ci ty Репутация: 22 Всего: 122 |
Lunatikus, ответ зависит еще и от СУБД...
|
|||
|
||||
| Lunatikus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 29.6.2007 Репутация: 1 Всего: 6 |
ой,прошу прощения...MS SQL 2000
-------------------- TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games). сайт гильдии |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 9 Всего: 51 |
Думаю, что ответ зависит от: 1) количества оперативки на машине(чем её больше - тем меньше разница) 2) пропускной способности сети(чем она меньше, тем больше разница) Немного фантазий: Педположим что одна запись занимает 1 килобайт. Тогда при выборке 1000 записей сервер должен будет передать клиенту 1000 * 1к=1000к данных. На клиент Датасет должны выделить 1000к(в зависимости от настроек выделения памяти Датасета). Предположим что в Датасете настроено выделять память порциями по 100 записей. Тогда, для каждых 100 записей полученных с сервера, Датасет будет выделять блоки по 100к. Надоело фантазировать, извините. |
|||
|
||||
| Lunatikus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 29.6.2007 Репутация: 1 Всего: 6 |
я спросил то и потому,что не знаю механизма работы next.что он делает?то ли делает вбыорку заново,тогда само собой чем больше записей,тем больше время на выполнение next.А если по уже отобранному датасету как то скаче,то не думаю,что велика разница.И давайте не будем говорить о передаче по сети.Предположим,что все на сервере и сервер сам получает результаты.И я не хотел услышать цифры,во сколько раз конкретно будет отличаться производительность.Мне достаточно понять.Что правильнее-разделять датасет на части и некстить каждую часть последовательно или можно оставить огромный набор данных. и по нему некстом ползти.
-------------------- TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games). сайт гильдии |
|||
|
||||
| Rodman |
|
|||
|
CIO ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 6144 Регистрация: 7.5.2006 Где: Ukraine ⇛ Kyiv ci ty Репутация: 22 Всего: 122 |
Next не выбирает по новой данные из базы, а просто делает текущей следующую по списку запись... Proir - обратное Next'у
|
|||
|
||||
| Lunatikus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 29.6.2007 Репутация: 1 Всего: 6 |
и скорость этого процесса не зависит от кол-ва записей всего,я так понимаю?
Это сообщение отредактировал(а) Lunatikus - 9.10.2007, 16:04 -------------------- TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games). сайт гильдии |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1458 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 9 Всего: 51 |
Датасет загружает данные(запрашивает их с сервера и загружает в память) по мере надобности. Т.е. если датасет подключен к DBGridу, то Датасет загружает только то количество записей которое отображается в ДБгриде(точнее, это ДБгрид запрашивает столько записей их датасета, сколько ему нужно). Что-то похожее происходит и при работе с Датасетом напрямую. Когда в программе выполняется: Dataset.Open Датасет загружает одну запись из базы данных. Когда мы делаем Dataset.Next, датасет подгружает вторую. Когда мы делаем ещё раз Dataset.Next, датасет подгружает третью. и т.д. Когда мы делаем Dataset.Last, - датасет выбирает по одной записи, пока не дойдёт до последней. Ранее выбранные записи обычно кешируются в памяти. Новую память датасет обычно выделяет порциями, для нескольких записей сразу. В компонентах IBX размер буфера памяти можно настраивать, в других компонентах - не знаю. Т.е. соответственно, при выборке 100 000 записей потребуется выделить в 100 раз больше памяти чем при выборке 1000. В какой-то момент свободная оперативка может закончится и винда начнёт скидывать данные в своп. И тут программа может начать ощутимо тормозить. То что я описал выше - в первую очередь относится к компонентам Interbase Express. В других реализациях принципы работы компонент могут отличаться, но думаю, что не сильно. Существуют ещё, так называемые однонаправленные датасеты(Unidirectional Dataset). Они, если мне не изменяет память, не кешируют полученные данные, и соответственно используют только то количество памяти необходимое для хранения одной(текущей) записи. По ним можно перемещаться только вперёд(Next). Прошу пардону, если сильно наврал |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |