Страница 1 из 1
Interbase, как закачать всю базу в память
Добавлено: 29 июн 2006, 09:51
Dimka
Использую interbase 5.5 или Intebase 6.0. Компонент TIBQuery.
Запрос типа select * from Database
Открываю базу. Активной становится первая запись.
Выполняю команду Database.Last.
Результат: переход к последней записи не всегда происходит, иногда (непонятно почему) зависает. Вопрос: почему?
Как можно по другому загрузить всю базу в память?
Добавлено: 29 июн 2006, 10:39
kdv
interbase 5.5
устал я уже комментировать 5.5...
http://www.sql.ru/forum/actualthread.as ... =1#2822824
или Intebase 6.0.
а это вообще. 6 лет этому серверу. ШЕСТЬ ЛЕТ. Нельзя на таком старье работать.
Результат: переход к последней записи не всегда происходит, иногда (непонятно почему) зависает. Вопрос: почему?
судя по всему, никакого зависания нет. Просто в это время с сервера тащатся данные, а клиент пытается их "пережевать".
Ты посмотри на объем памяти, занимаемый твоим приложением. У тебя с определенного момента небось все в своп уходит, отсюда и зависание.
Как можно по другому загрузить всю базу в память?
а это надо?
Добавлено: 29 июн 2006, 11:26
Dimka
Размер памяти диспетчер задач показывает:
1. Когда выполняется команда last, то размер (по ходу выполнения команды) возрастает и в конечном итоге при переходе к последней записи размер становится около 150 Мб.
2. А когда значит зависает, то происходит следующее:
размер памяти доходит (например) до 70 Мб, потом становится 60 Мб, потом 70 и т.д.
Всю базу я хочу загрузить в память для того, чтобы можно было быстро найти необходимую запись (поиск идет по трем полям командой Locate).
Если я буду использовать server Interbase 7, поможет?
Добавлено: 29 июн 2006, 11:31
CyberMax
А если отбор сделать через where в запросе?
Добавлено: 29 июн 2006, 11:41
Ivan_Pisarevsky
Оказывается в лесах до сих пор живут партизаны... и поезда под откос пускают...

Добавлено: 29 июн 2006, 11:54
kdv
Если я буду использовать server Interbase 7, поможет?
тебе с таким подходом, взятым из фокса или чего-ниьбудь вроде, и на Оракле не поможет. В клиент-сервере обычно принято ограничивать выборку, считываемую на клиента. На то он и сервер, чтобы не копировать все данные для клиента. Конечно, случаи, когда всю таблицу надо закачать локально бывают, но в этом случае разработчик четко должен понимать, зачем он это делает и к чему это приведет.
Например. Если у тебя полный набор после скачивания на клиенте в памяти занимает 150 мегабайт, значит ты должен ориентироваться на компы с 512мб RAM, минимум. И сервер тут ни при чем, абсолютно.
Зависание же на уровне 60-70 мегабайт может зависеть от двух факторов:
1. операционная система
2. клиентские компоненты (IBX, FIBPlus, BDE...), используемые в приложении.
Судя по вопросу, у тебя IBX, значит тебе надо поставить его самую последнюю версию.
Почитай статьи
http://www.interbase-world.com/ru/artic ... _id=207737
http://www.ibase.ru/devinfo/clientrefresh.htm
и еще скачай
www.ibase.ru/download/gbdatasets.zip
прочитай readme.rus. Однако, gbdatasets тебе можно будет использовать только когда ты прочитаешь первые две упомянутые статьи.
Добавлено: 29 июн 2006, 15:51
Dimka
Спасибо за информацию и ссылки!