Topic: большая база, лагает

Добрый день. В базе около 300 записей, к каждой прикреплено изображение (разный размер, в среднем 300-400 кб), база весит сейчас около 200 мб, и при работе (особенно поиск) уже конкретно притормаживает. Вопрос этот решается уменьшением размера картинок или есть другой вариант?

Re: большая база, лагает

Приветствую,


не должно тормозить, вы случайно не выводите в результате поиска поле с типом Изображение?
Работа с базой по локальной сети?

Dmitry.

3 (edited by zc13569 2014-09-29 07:31:34)

Re: большая база, лагает

DriveSoft wrote:

Приветствую,


не должно тормозить, вы случайно не выводите в результате поиска поле с типом Изображение?
Работа с базой по локальной сети?

изображения не выводятся, тормозит даже на локальном компе...
У меня настроен мгновенный поиск через sql запрос, так вот если быстро ввести несколько символов в поле поиска, они будут появляться там с задержкой, ну и соответственно результаты обновляются раз в несколько секунд.

Re: большая база, лагает

отправьте пожалуйста ваш проект на support@drive-software.com постараюсь выяснить причину.
пока без файла базы, а то он слишком большой.

Dmitry.

Re: большая база, лагает

DriveSoft wrote:

отправьте пожалуйста ваш проект на support@drive-software.com постараюсь выяснить причину.
пока без файла базы, а то он слишком большой.

Сори выслал сразу все, сейчас вышлю отдельно

6 (edited by zc13569 2014-09-29 11:31:47)

Re: большая база, лагает

zc13569 wrote:
DriveSoft wrote:

отправьте пожалуйста ваш проект на support@drive-software.com постараюсь выяснить причину.
пока без файла базы, а то он слишком большой.

Сори выслал сразу все, сейчас вышлю отдельно

вторым письмом ушло без базы. Кстати у меня не "Изображение", а "Файл", ввиду специфики.

Re: большая база, лагает

Расскажите в чем была проблема с базой...у меня например всего 50 записей с прикрепленными файлами видео и аудио общим обьемом около 1 ГБ....и тоже ужасно тормозит... Минуты по 3-4 ждешь чтобы  добавить новую запись ...Сети нет

8 (edited by motorolla 2014-12-29 17:09:08)

Re: большая база, лагает

Возможно что проблема не с базой а с ресурсами машины. В моей базе около 4000 записей. Локально не тормозит, а вот в сети зависит от машины как я понял, бывает по несколько минут ждешь. Закидывал  по сети на другие машины - где по 5 секунд, где по три минуты ждешь бывает. Можно озвучить оптимальную конфигурацию машины - сервера? И что с сетью? при обращении к базе, например новая запись - загрузка сети поднимется с пратически нуля до 12-13% и так пока не закончаться тормоза. Размер базы 13 Мбайт всего лишь.

Re: большая база, лагает

motorolla wrote:

Возможно что проблема не с базой а с ресурсами машины. В моей базе около 4000 записей. Локально не тормозит, а вот в сети зависит от машины как я понял, бывает по несколько минут ждешь. Закидывал  по сети на другие машины - где по 5 секунд, где по три минуты ждешь бывает. Можно озвучить оптимальную конфигурацию машины - сервера? И что с сетью? при обращении к базе, например новая запись - загрузка сети поднимется с пратически нуля до 12-13% и так пока не закончаться тормоза. Размер базы 13 Мбайт всего лишь.

Нет проблемы с машиной я исключаю...пробовал и на более мощной ...тот же результат...какие причины могут быть? Что на это влияет размер файла...или обновления грида...получается начинает виснуть уже при открытии  экзешника... когда записей не много и файлов прикрученных к БД тогда работает шустро!

Re: большая база, лагает

видимо тормоза базы SQLite есть... а как это решено в MVDB?
http://www.charnad.com/blog/if-sqlite-is-slow/

Re: большая база, лагает

Augsberger wrote:

Расскажите в чем была проблема с базой...у меня например всего 50 записей с прикрепленными файлами видео и аудио общим обьемом около 1 ГБ....и тоже ужасно тормозит... Минуты по 3-4 ждешь чтобы  добавить новую запись ...Сети нет


Настоятельно не рекомендую хранить файлы непосредственно в базе данных, как показала практика, это приводит к медленной работе, поэтому у компонентов DBFile и DBImage было добавлено свойство Type=LinkFile для хранения файлов в указанной папке (свойство CopyTo)

Dmitry.

Re: большая база, лагает

Augsberger wrote:

видимо тормоза базы SQLite есть... а как это решено в MVDB?
http://www.charnad.com/blog/if-sqlite-is-slow/

данная ссылка описывает другую проблему, не связанную с вашей.


Описана проблема, связанная со вставкой в БД одновременно большого количества записей, которую часто делают неправильно (без применения транзакции), что приводит к медленной работе.

Dmitry.

13 (edited by Augsberger 2015-01-12 19:29:32)

Re: большая база, лагает

Augsberger wrote:

Расскажите в чем была проблема с базой...у меня например всего 50 записей с прикрепленными файлами видео и аудио общим обьемом около 1 ГБ....и тоже ужасно тормозит... Минуты по 3-4 ждешь чтобы  добавить новую запись ...Сети нет

Переделал..файлы теперь сохраняю в папке Files....если раньше подвисал при 50 записях вместе с файлами в SQLite.db, то теперь подвисает при сохранении или изменении записи около 25 секунд (даже без прикрепления файла по ссылке) сейчас около 300 записей

в гриде 11 столбцов (а всего в проекте 25 полей из них 8 Id_name - как словари)

Размер sqlite.db всего 53 кБ

Такая особенность: когда нажимаешь сохранить...в табле грид нацинается дергаться вертикальная и горизонтальная прокрутка...такое ощущение что перед тем как сохранить всю базу перепотрашили...и нашли куда вставить новую запись...значит база открывается кодом  перед каждым сохранением....может бытьс  этим связано......Комп не тормоз (двуядерный 3 ГГц 4ГБ)
Подскажите пожалуйста....это мизер по сравнению с заявленными возможностями  SQLite....посмотрите пожалуйста ваш код может там чего найдете, чтобы ускорить быстродействие?  поле с типом Изображение не вывожу...и в сети программа не работает...
Вот здесь http://myvisualdatabase.com/forum/viewtopic.php?id=923  описывается по сети и у меня похожие симптомы в плане сохр. или изменения -  виснет....что даже отображение текущего времени  зависает на главной форме

Re: большая база, лагает

Augsberger
Скорей всего у вас тормозит из за скриптов, попробуйте их отключить временно.
Дайте знать результат.



Также можете скачать тестовый проект, в котором загружено 100000 записей, у меня они все выводятся примерно за 5 сек.
Добавление и удаление записей происходит моментально.

Post's attachments

Attachment icon SpeedTest100000.zip 3.28 mb, 548 downloads since 2015-01-12 

Dmitry.

15 (edited by Augsberger 2015-01-12 19:41:28)

Re: большая база, лагает

DriveSoft wrote:

Augsberger
Скорей всего у вас тормозит из за скриптов, попробуйте их отключить временно.
Дайте знать результат.



Также можете скачать тестовый проект, в котором загружено 100000 записей, у меня они все выводятся примерно за 5 сек.
Добавление и удаление записей происходит моментально.

Проверил ваш пример у меня 15 секунд.. это на нетбуке Celeron 1.2 ГГц 2ГБ ОЗУ
Отключил скрипт в программе и все заработало намного быстрей!!!1-2 сек сохранение или удаление записи....
Как быть? Ведь без скриптов программа не будет работать как надо!!! Как ускорить обработку скриптов?

Re: большая база, лагает

Augsberger
Скорей всего где то ошибка в скриптах, которая загружает базу или интерфейс, можете прислать мне файл скрипта на support@drive-software.com

посмотрю, где может быть причина.

Dmitry.

Re: большая база, лагает

Сделал изменения в скрипте....и добавил записей теперь их 100 тыс.... Но сохранение все равно не мгновенное как у вас в примере.... А 40 сек. И это без сохранения файла по ссылке...а так ещё дольше (+время на копирование файла)

Re: большая база, лагает

Augsberger
попробуйте частями комментировать код в скрипте в событии Form1_TableGrid1_OnChange
чтобы выяснить, какой именно скрипт так тормозит базу.



также после сохранения записи, происходит обновление записей в компоненте TableGrid1, который заново выводит все 100тыс записей, как решение, можно заменить действие кнопки "Поиск" на "SQL запрос", где можно выводить скажем 1000 записей (LIMIT), ведь в принципе нет никакой необходимости выводить 100 тыс. записей

Dmitry.

Re: большая база, лагает

Я весь скрипт закомментировал и улучшил время сохр. Записи лишь на 1-2 сек из 40....Приведите пожалуйста пример SQL запроса с возможностью выбора  на форме выбора количества выводимых записей в гриле поставил 1000 будет выводить 1000 ...а если потребуется поиск по всей базе выбрал все записи

Re: большая база, лагает

SELECT

lastname,
firstname

FROM employees

LIMIT CASE WHEN '{edLimit}'='' then 999999 else '{edLimit}' end;

где edLimit компонент TextBox на форме, если его оставить пустым, то будут выведены все записи (а именно не более 999999)

Dmitry.

Re: большая база, лагает

DriveSoft wrote:
SELECT

lastname,
firstname

FROM employees

LIMIT CASE WHEN '{edLimit}'='' then 999999 else '{edLimit}' end;

где edLimit компонент TextBox на форме, если его оставить пустым, то будут выведены все записи (а именно не более 999999)

А как быть с написанием запроса где есть главная таблица: Zapisi, а в ней поля id_Person...есть таблица словарь Person где есть поле FIO...и как правильно указать запрос с типом поля в главной таблице Дата/Время и Время, чтобы выводилось 14.01.2015 12:14:23 и  12:14:23 (это два разных поля в главной таблице таблице) и как в запросе подсчет сыммы в футере как было с кнопкой поиск? Спасибо..

Re: большая база, лагает

Augsberger
Это уже будет не так просто сделать SQL запросом, но возможно.


Я добавил свойство dbLimit для компонента TableGrid в бета версию 1.48, таким образом можно обойтись без SQL запроса.
https://www.dropbox.com/s/6rz92s72djtmv … 8.zip?dl=0


В скрипте между последними begin и end. напишите следующее

Form1.TableGrid1.dbLimit := 1000;

dbLimit
Позволяет задать максимальное количество записей, которое будет выведено в компонент.
Данное свойство работает только в том случае, когда в компонент выводится информация с помощью кнопки с действием "Поиск" или если используется опция компонента "Включить автовыполнение запроса"

Dmitry.

Re: большая база, лагает

DriveSoft wrote:

Augsberger
Это уже будет не так просто сделать SQL запросом, но возможно.


Я добавил свойство dbLimit для компонента TableGrid в бета версию 1.48, таким образом можно обойтись без SQL запроса.
https://www.dropbox.com/s/6rz92s72djtmv … 8.zip?dl=0


В скрипте между последними begin и end. напишите следующее

Form1.TableGrid1.dbLimit := 1000;

dbLimit
Позволяет задать максимальное количество записей, которое будет выведено в компонент.
Данное свойство работает только в том случае, когда в компонент выводится информация с помощью кнопки с действием "Поиск" или если используется опция компонента "Включить автовыполнение запроса"

А есть возможность это ограничение указывать также на форме перед нажатием кнопки поиск в Edit1

Re: большая база, лагает

да, просто создайте событие OnClick у кнопки поиска, пример

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
        if ValidInt(Form1.Edit1.Text) then 
           Form1.TableGrid1.dbLimit := StrToInt(Form1.Edit1.Text) 
           else Form1.TableGrid1.dbLimit := 0;
end;

также проверяет корректность ввода числа, если ничего не введено или введено некорректное число, ограничение на количество записей снимается.

Dmitry.

Re: большая база, лагает

DriveSoft wrote:

да, просто создайте событие OnClick у кнопки поиска, пример

procedure Form1_Button1_OnClick (Sender: string; var Cancel: boolean);
begin
        if ValidInt(Form1.Edit1.Text) then 
           Form1.TableGrid1.dbLimit := StrToInt(Form1.Edit1.Text) 
           else Form1.TableGrid1.dbLimit := 0;
end;

также проверяет корректность ввода числа, если ничего не введено или введено некорректное число, ограничение на количество записей снимается.

Сделал и воч что выдало

Post's attachments

Attachment icon 111.png 41.91 kb, 365 downloads since 2015-01-15