Форум - Ответы     (  К темам )
 ?  Михаил: Проблемы с BDE, или...? (14-04-2003 17:32:05)
Кто-нибудь подскажет, что это может быть:
имеется таблица paradox, при работе сней через TTable в BCB 6, во время отключения света/падения напряжения, портятся primary индекс (автоинкремент.)
 Георгий (14-04-2003 19:09:10)
ооо! знакомая история.
Решил так:
1.взял с заказчика денег и сделал свой функцианальный аналог BDE...
2.плюнул на BDE

а если серьёзно: не смог добиться надёжного хранения данных в таблицах Paradox при условии возможности внезапного отключения питания - обычно разрушается структура таблиц. причём не обязательно при отключении питиния в момент записи - можно в цикле читать из таблицы и нажать на ресет и в результате таблица разрушена. также обнаружил, что таблицы Paradox организованы по принципу хеш таблиц - когда записей > 10 000 резко (на порядок) ухудшается время доступа.
Буду признателен, если кто-нибудь покажет (докажет) обратное.
 Владимир (14-04-2003 19:48:23) http://cbuilder.ru
Знакомая история.

Надо переходить на что-то более надежное, например InterBase (FireBird)
Частичное спасение - особенно если база данных предназначена для нескольких
пользователей и лежит на сервере - купить Источник Бесперебойного Питания.

Причем индексы в таблице Paradox могут разрушаться и просто при многополь-
зовательской работе, при чтении/вставке в таблицу одновременно несколькими
пользователями.

И даже хуже того - иногда повреждаются (нарушается структура) самих
.db файлов, а это куда хуже - их уже не восстановить, в отличие от индексов,
частичное спасение - периодическое архивирование базы данных (.db файлов)
(1 раз в час или как позволяют ресурсы)

И если все-таки придется работать именно с Paradox (нет возможности 
перейти на нормальную базу типа FireBird), стоит написать программу
к вашей базе, которая:
   1. удаляет индексы у ваших .db таблиц,
   2. удаляет файл pdoxusers.net
   3. если есть - удаляет файлы .lck
   4. восстанавливает индексы у .db таблиц (индексирует таблицы)
Разумеется делать это можно, когда все пользователи отключены от таблиц (базы),
либо предватрительно выгнав их из программ, работающих с этой базой.

 Георгий (14-04-2003 21:00:41)
Владимир:
А как InterBase реагирует на reset посередине транзакции?
поддерживается она транзакции как таковые?
какой обьём могут без существенного падения производительности обрабатывать?
структура таблиц InterBase (B+ дерево или разновидности хеш таблиц)?
Какова доля полезной нагрузки в таблицах (у Paradox ~70%)?
Сколько (select * from table where time > чего то) может делать по сравнению с Paradox? (при работе на локальной машине)
Какие средства контроля и восстановления (при разрушении файла) предлагает?
 Владимир (14-04-2003 23:16:49) http://cbuilder.ru
>> А как InterBase реагирует на reset посередине транзакции?
>> поддерживается она транзакции как таковые?

Конечно, полная поддержка транзакций.
ВСЕ изменения, происходящие в рамках транзакции
или утверждаются в базе (Commit) или откатываются (Rollback)

В случае Reset посреди транзакции, ВСЕ изменения, произведенные
в рамках этой транзакции НЕ будут утверждены в базе.

>> какой обьём могут без существенного падения производительности обрабатывать?

C базой ~650-750 Мб на ~30 компьютерах -
Никаких тормозов, нормальная скорость совместной работы,
конечно достаточно серьезные требования к серверу, где установлена база
(P4 2400, 512 Мб ОЗУ, RAID, SCSI винчестеры), нормальная 100 сеть, остальные
компьютеры достаточно скромные - максимум Celeron 300-600, 32-128 Мб ОЗУ.
 
И очень серьезные требования к разработке программного обеспечения -
очень тщательная разработка структуры базы: таблиц, полей, индексов,
хранимых процедур, триггеров, связей между таблицами.
Достаточно серьезная нагрузка именно на триггеры и хранимые процедуры
(и соответственно - на мощный сервер)
А значит необходимо и приличное знание SQL и языка хранимых процедур.
Отличие от Paradox в этом значительное.

Лучшая версия сервера на сегодня:  Firebird-1.0.2.908
Компоненты прямого доступа (без BDE) к C++Builder и Delphi - FIBPlus
Визуальное средство работы с базой - IBExpert
(создание/удаление/изменение базы данных и всех ее объектов - таблиц,
процедур, триггеров и т.д.)

Структура базы данных, инструменты работы и способы ее восстановления
подробно описываются в книге:


"Мир InterBase. Архитектура, администрирование и разработка приложений баз
данных в InterBase/FireBird/Yaffil" А.Ковязин, С.Востриков 
(Изд. "Кудиц-Образ") 2002

Скоро обещают новый выпуск этой книги, уже с диском с соответсвующими
инструментами и примерами программ к книге.

 Георгий (15-04-2003 00:48:20)
Спасибо.

когда увидел издательство чуть не подавился - я в этой конторе УИР прохожу, а их ген. дир. у нас курс лекций по комп. сетям вёл...

Кстати как мелким шрифтом пишешь и в разные цвета раскрашиваешь?

и ещё - у меня закралось смутное подозрение, что я х*йнёй страдал делая замену BDE - судя по всему можно было IB взять - сколько оно стоит?
 Владимир (15-04-2003 09:48:59) http://cbuilder.ru
Что касается шрифта, то у меня включен html - у других он выключен,
во избежании проблем.

Сам сервер/клиент Firebird-1.0.2.908, как и IBExpert - бесплатные,
можно скачать из Downloads, или с "родных" сайтов
для FireBird:
http://sourceforge.net/project/showfiles.php?group_id=9028 и
для IBExpert:
http://ibexpert.com/download,
платные компоненты FIBPlus (http://devrace.com/fibplus),
при желании можно и их найти, также можно пользоваться
и другими компонентами для работы из C++Builder
(поставляются с ним - вкаладка InterBase, или другие,например, IBX,
посмотрите разные варианты на http://ibase.ru )
 Георгий (15-04-2003 10:01:11)
Т.е. нормальная Клиент / серверная СУБД, поддреживающая транзакции (хотя бы сериализуемые) ничего не стоит?
А зачем 1-2 года назад все бросились MySQL использовать?
Кстати как она себя ведёт при повреждении части файла (ну например берём HEX редактор, лезем в файл БД и что-нибудь правим)?
 Владимир (15-04-2003 10:29:30) http://cbuilder.ru
Денег хотят за InterBase 7 и Yaffil, а FireBird - пока бесплатный
(это 3 клона InterBase)

Что касается MySQL - по всей видимости для работы с Internet,
например 99% форумов в сети - на MySQL (как и этот форум)

При повреждении части файла - смотря что повреждено.
Структура базы - в книге.
 Alexander (15-04-2003 11:55:11)
Правильно ли я понял, что Interbase - единственная более-менее приличная и не слишком сложная СУБД для Windows по нормальной цене ? Просто мне казалось, что либо бесплатные использовать, вроде MySQL, либо Oracle ставить. Конечно, теперь и Interbase в виде FireBird бесплатный, однако никто гарантий надежности его не давал.
 Владимир (15-04-2003 20:49:27) http://cbuilder.ru
Нет, не единственная, и потом что значит - приличная ?
Если нужна очень мощная база, надежная, свыше 100 компов - то конечно это Oracle
но если официально ее покупать - цена намного выше, хотя у нас в стране
практически никто ничем официальным(законно купленным) не пользуется
На любом компьютерном рынке можно купить диски за 70-100 руб с кучей баз данных:
Oracle, MS SQL, Sybase, Informix и другие...
Но и ресурсов Oracle требует ого-го.., иначе будет все тормозить.

Также, насколько я знаю, из не слишком сложных СУБД
многие пользуются MS SQL

Что касается личного опыта использования InterBase и потом FireBird на
предприятии с ~30-40 компьютерами в течение нескольких последних ЛЕТ !!!,
с базой размером от 250 до 750 Mb, на сервере под Windows NT,
то выводы следующие:

1/ Глючат ранние версии InterBase 5.6 в сочетании с программами с ранними версиями Delphi 3/4, возможно дело в BDE, через которую шла связь, и
в каких-то ошибках и сервера и Delphi.

2/ FireBird в сочетании с C++Builder 5/6 и FIBPlus глюков практически не
дает, надо лишь отслеживать некоторые известные баги.

3/ За все время работы файл базы данных .gdb ни разу не повреждался.

4/ Сервер InterBase (FireBird) иногда глючит (зависает) - причина неизвестна,
происходит это приблизительно 1 раз в 1-2 месяца, при этом надо лишь
остановить InterBase (стоит под Windows NT как служба) и запустить
заново и все работает нормально, при этом потери данных не происходит
и файл базы не повреждается.

ОДНАКО с таким столкнулись и при работе с Oracle ! , что его также крайне
редко, но приходится остановить и запустить заново.

5/ Периодически надо делать backup/restore базы - также 1 раз в 1 - 2 месяца,
полезная вещь.

6/ Ну и понятно - ежедневно - точнее каждую ночь - когда никто не работает,
архивация базы данных, на всякий случай, винчестер не железный.

А гарантий надежности Вам никто не даст и с любой другой базой данных.


support@cbuilder.ru