Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2010, 11:35   #1
George2010
Пользователь
 
Регистрация: 31.08.2010
Сообщений: 11
По умолчанию Нужен компонент для работы с большой БД

Я работал с MySQL с помощью компонентов Zeos.
Все было нормально на 20000 записей(работал быстро).
В поле Body (Type Long Text) я записывал не большую
информация 5-6 строчек.
Через MySQL WorkBench все индексы я проставил.

Я закачал еще 10000 записей. Причем в
поле Body не 5-6 строчек, а информацию из Word документов
размером около 30 листов. После этого таблица по началу
стала открываться очень медлено (до 20 сек.), а потом и вовсе
стала подвисать. Появилось сообщение, что не хватает
виртуальной памяти.

Выходит Zeos плохо переваривает записи, в которых записаны большие
текстовые документы.

Подскажите какой компонент лучше всего использовать
в этой ситуации.
George2010 вне форума Ответить с цитированием
Старый 05.10.2010, 15:19   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Тут дело, похоже, не в Zeos-е. Не нужно сразу в таблицу грузить все поля memo, blob и т.п. Делай, как сайты в интернете делают. Т.е. загружаем только заголовки, id-номер и прочее. А уже потом вытаскиваем blob-данные только для текущей записи.
А так, 30 листов текста умножить на 30000 записей - никакая система не выдержит.
_SERGEYX_ вне форума Ответить с цитированием
Старый 05.10.2010, 16:06   #3
George2010
Пользователь
 
Регистрация: 31.08.2010
Сообщений: 11
По умолчанию

Так я так и делаю. Делаю запрос с перечислением полей
в котором нет поля куда записывается большой текст
(Select Field1, Field2 ...). В компоненте ClientDataSet
в свойство FieldDefs прописываю эти же поля.
Свойство IndexDefs у меня пустое.
Т.е. и в запросе и в компонентах поле с большим текстом
никак не фигурирует. Однако когда в базе появляется
много таких документов программа начинает сильно
тормозить.
George2010 вне форума Ответить с цитированием
Старый 05.10.2010, 16:16   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы не поняли. _SERGEYX_ предлагает Вам не хранить эти большие данные в самой БД. Храните их в виде файлов. А в базе храните имя и путь. При необходимости - вытаскиваете содержимое файла, а не блоб-поля...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.10.2010, 17:01   #5
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Serge_Bliznykov, неа, я думал хранить данные как раз в БД. Странно, сейчас посмотрел... у меня в самой большой таблице 23 тысячи записей (полей штук 30, строковых и числовых, blob-полей нет). Таблица полностью открывается максимум пол секунды даже по локальной сети (100 Mbit). Использую MyDAC.
А зачем ClientDataSet? Там, вроде, есть компонент ZeosQuery (не помню точное название).
И если в нем написать select <name> from <table> долго работает на 30000 записей?
_SERGEYX_ вне форума Ответить с цитированием
Старый 05.10.2010, 17:26   #6
George2010
Пользователь
 
Регистрация: 31.08.2010
Сообщений: 11
По умолчанию

Компонент ClientDataSet нужен для сортировки.
Хотя на 30000 записях открывается долго, но
сортируется очень быстро. Программно создается индекс.
Через компонент Provider ClientDataSet связывается с
ZeosQuery.
Если использовать только ZeosQuery, то он открывается
примерно столько же сколько и ClientDataSet.
George2010 вне форума Ответить с цитированием
Старый 06.10.2010, 10:10   #7
Karabash
Форумчанин
 
Регистрация: 26.07.2009
Сообщений: 216
По умолчанию

Все правильно, ClientDataSet сортирует данные в памяти на клиенте и очень быстро, спору нет. Но готова ли принять память клиента такую прорву данных? Вот в чем вопрос. Старая как мир дилема. Либо сортировать быстро, но ограниченное количество данных на клиенте, либо отдать сортировку серверу и получать уже отсортированные данные.
В некоторых случаях, если, конечно, позволяет бизнез-логика проекта и при необходимости предоставить пользователю быструю сортировку, классифицирую данные по разделам и с сервера запрашиваются только данные того раздела, который требуется в данный момент. И волки сыты и овцы целы. Но это уже как карта ляжет.
Karabash вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен компонент для чата Wicing Компоненты Delphi 3 24.03.2008 23:33
Нужен компонент для чата K@$K@ Компоненты Delphi 2 09.01.2008 15:23
Нужен компонент для работы с шрифтом и с БД Gauss Компоненты Delphi 1 07.01.2008 13:41
Компонент для работы с GIF Slash Компоненты Delphi 5 03.05.2007 11:14