![]() |
|
|
![]()
|
|
| Knuckles |
|
|||
![]() Новичок Профиль Группа: Awaiting Authorisation Сообщений: 33 Регистрация: 8.3.2006 Репутация: 1 Всего: 2 |
Подскажите, опытные разработчики, как лучше поступить.
Сейчас выполняю свой первый серьезный проект. Программа, помимо прочего, берет с сервера файл с данными (очень простой бинарник). Эти данные нужно сложить в локальную базу данных, отсортировать, выбрать нужный диапазон (по дате) и выдать юзеру в виде таблицы. Все это я уже сделал, но работает медленно. 1. В виде базы данных использую TClientDataSet, потому что прикручивать настоящую СУБД к программе накладно в смысле размера (да и устанавливать ее надо). 2. Из базы данные отдаются в виде xml файла и далее отображаются браузером - так что тут все ок. 3. Чтобы добавить в локальную базу данные из скаченного файла делаю DB{TClientDataSet}.AppendRecord(...); И вот тут самое узкое место - скажем тысячу записей добавляет шустро, а вот 100 тысяч уже очень медленно (а их может быть и больше). Как быстро добавлять записи? Что можно поменять в проекте? Может стоит отказаться от обычного датасета? В общем выслушаю все предложения по рационализации. Заранее спасибо. |
|||
|
||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: нет Всего: 78 |
Я думаю, что лучше будет использовать SQL. Тобишь используешь не TTable, а TQuery. Всё получится гораздо быстрее.
-------------------- Ll 2 |
|||
|
||||
| Knuckles |
|
|||
![]() Новичок Профиль Группа: Awaiting Authorisation Сообщений: 33 Регистрация: 8.3.2006 Репутация: 1 Всего: 2 |
А TTable и не используется TQuery помог бы при выборке данных (верно?), а у меня трабла с добавлением. |
|||
|
||||
| Guedda |
|
|||
![]() Подрывник ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3137 Регистрация: 27.12.2005 Где: Ростов-на-Дону Репутация: нет Всего: 78 |
да и с добавлением намного быстрее всё проходит. INSERT INTO...
-------------------- Ll 2 |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
||||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 1 Всего: 22 |
Knuckles, чтобы было быстро - надо брать нормальную СУБД. тот же Firebird. если отказаться от датасетов и их потомков, сделав всё на TIbSql (или его аналоге из Fib+), сотни тысяч записей будут вставлятся достаточно быстро. у меня на тестовой базе десять миллионов записей вставляются за несколько минут. там всё будет зависеть от объёма записей и от бизнес-логики на сервере (наличия триггеров на вставку, индексации и т.д.)
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| Knuckles |
|
|||
![]() Новичок Профиль Группа: Awaiting Authorisation Сообщений: 33 Регистрация: 8.3.2006 Репутация: 1 Всего: 2 |
x77, Спасибо за совет. Подумаю.
Репутацию не даю, ибо не дорос |
|||
|
||||
![]()
|
| Правила форума "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. |