Поиск:

Ответ в темуСоздание новой темы Создание опроса
> насколько будет быстрее выполняться Next, при выборке 1000,100000,1000000 записей 
:(
    Опции темы
Lunatikus
Дата 9.10.2007, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



Понимаю,что проверить самому несложно.Но надо время,чтобы сделать код для проверки.Кто-нибудь может сказать навскидку,на соклько будет отличаться скорость полного перебора по запросу с помощью метода next при разных кол-вах записей?и будет ли отличаться.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Rodman
Дата 9.10.2007, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Lunatikus, ответ зависит еще и от СУБД...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Lunatikus
Дата 9.10.2007, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



ой,прошу прощения...MS SQL 2000


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Bose
  Дата 9.10.2007, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 9
Всего: 51



Цитата(Rodman @  9.10.2007,  12:12 Найти цитируемый пост)
ответ зависит еще и от СУБД...

Думаю, что ответ зависит от:
1) количества оперативки на машине(чем её больше - тем меньше разница)
2) пропускной способности сети(чем она меньше, тем больше разница)

Немного фантазий:
Педположим что одна запись занимает 1 килобайт. Тогда при выборке 1000 записей сервер должен будет передать клиенту 1000 * 1к=1000к данных. На клиент Датасет должны выделить 1000к(в зависимости от настроек выделения памяти Датасета). 
Предположим что в Датасете настроено выделять память порциями по 100 записей. Тогда, для каждых 100 записей полученных с сервера, Датасет будет выделять блоки по 100к. 
Надоело фантазировать, извините.  smile 


PM MAIL WWW Skype   Вверх
Lunatikus
Дата 9.10.2007, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



я спросил то и потому,что не знаю механизма работы next.что он делает?то ли делает вбыорку заново,тогда само собой чем больше записей,тем больше время на выполнение next.А если по уже отобранному датасету как то скаче,то не думаю,что велика разница.И давайте не будем говорить о передаче по сети.Предположим,что все на сервере и сервер сам получает результаты.И я не хотел услышать цифры,во сколько раз конкретно будет отличаться производительность.Мне достаточно понять.Что правильнее-разделять датасет на части и некстить каждую часть последовательно или можно оставить огромный набор данных. и по нему некстом ползти.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Rodman
Дата 9.10.2007, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Next не выбирает по новой данные из базы, а просто делает текущей следующую по списку запись... Proir - обратное Next'у
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Lunatikus
Дата 9.10.2007, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



и скорость этого процесса не зависит от кол-ва записей всего,я так понимаю?

Это сообщение отредактировал(а) Lunatikus - 9.10.2007, 16:04


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Bose
Дата 9.10.2007, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 9
Всего: 51



Цитата(Lunatikus @  9.10.2007,  15:27 Найти цитируемый пост)
я спросил то и потому,что не знаю механизма работы next.что он делает?то ли делает вбыорку заново,тогда само собой чем больше записей,тем больше время на выполнение next.А если по уже отобранному датасету как то скаче,то не думаю,что велика разница.И давайте не будем говорить о передаче по сети.Предположим,что все на сервере и сервер сам получает результаты.И я не хотел услышать цифры,во сколько раз конкретно будет отличаться производительность.Мне достаточно понять.Что правильнее-разделять датасет на части и некстить каждую часть последовательно или можно оставить огромный набор данных. и по нему некстом ползти.


Цитата(Rodman @  9.10.2007,  15:42 Найти цитируемый пост)
Next не выбирает по новой данные из базы, а просто делает текущей следующую по списку запись...



Датасет загружает данные(запрашивает их с сервера и загружает в память) по мере надобности. Т.е. если датасет подключен к DBGridу, то Датасет загружает только то количество записей которое отображается в ДБгриде(точнее, это ДБгрид запрашивает столько записей их датасета, сколько ему нужно). Что-то похожее происходит и при работе с Датасетом напрямую.

Когда в программе выполняется:
Dataset.Open

Датасет загружает одну запись из базы данных.
Когда мы делаем Dataset.Next, датасет подгружает вторую. 
Когда мы делаем ещё раз Dataset.Next, датасет подгружает третью. и т.д.

Когда мы делаем Dataset.Last, - датасет выбирает по одной записи, пока не дойдёт до последней.

Ранее выбранные записи обычно кешируются в памяти. Новую память датасет обычно выделяет порциями, для нескольких записей сразу. В компонентах IBX размер буфера памяти можно настраивать, в других компонентах - не знаю. 

Т.е. соответственно, при выборке 100 000 записей потребуется выделить в 100 раз больше памяти чем при выборке 1000. 
В какой-то момент свободная оперативка может закончится и винда начнёт скидывать данные в своп. И тут программа может начать ощутимо тормозить. 

То что я описал выше - в первую очередь относится к компонентам Interbase Express. В других реализациях принципы работы компонент могут отличаться, но думаю, что не сильно.


Существуют ещё, так называемые однонаправленные датасеты(Unidirectional Dataset). Они, если мне не изменяет память, не кешируют полученные данные, и соответственно используют только то количество памяти необходимое для хранения одной(текущей) записи. По ним можно перемещаться только вперёд(Next). 

Прошу пардону, если сильно наврал  smile 
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.5745 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.