Форум — Ответы     (  К темам )
 ?  Михаил: Проблемы с 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)
Знакомая история.
Надо переходить на что-то более надежное, например 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)
>> А как 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)
Что касается шрифта, то у меня включен 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)
Денег хотят за 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)
Нет, не единственная, и потом что значит — приличная ?
Если нужна очень мощная база, надежная, свыше 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/ Ну и понятно — ежедневно — точнее каждую ночь — когда никто не работает,
архивация базы данных, на всякий случай, винчестер не железный.

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