Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» InterBase и FireBird: вопросы по работе и их решение

Автор: tanaseduard
Дата сообщения: 10.03.2015 09:45
miwa
AlexCoRu
Все верно, но в этой версии с момента ввода ежемесячного лицензирования пропали некоторые функции, и теперь только на $$$.
Например анализатор плана, Code Formatter.
Автор: miwa
Дата сообщения: 10.03.2015 10:01
tanaseduard
Только что скачал свежий експерт. Все на месте, все работает.
Автор: tanaseduard
Дата сообщения: 10.03.2015 10:03
miwa
Хм... Спс. Щас попробую. Хотя на днях обновился.
Автор: mrUlugbek
Дата сообщения: 06.04.2015 09:54
Кто в курсе когда выйдет финал 3 версии? Там демо примерами с новыми фичам пакеты итд..
Бету версию нет демо пример employee нету пакеты итд
Автор: TuMOXA123
Дата сообщения: 06.04.2015 21:31
Релиз кандидат во втором квартале. Значит окончательный релиз в третьем
Автор: Maximus777
Дата сообщения: 07.04.2015 07:40
Уважаемые знатоки! Помогите определиться с концепцией. Суть такая, имеется база действующих клиентов, оформленная в екселевском файле. Что тянет за собой соответствующие проблемы. Файл со временем пухнет. На запись работает только один пользователь и т.д. Желание трансформировать это в полноценную БД всё сильнее. Но, пока не взялся, есть вопросы. Хочется безграбельную БД сделать. У каждого клиента есть масса атрибутов, номер договора, название, сроки, суммы, продукты и ещё вагон инфы. Из неизменяемых данных по клиентам только банковский идентификационный код. Остальное всё не так незыблемо и может изменяться радикально. Мож у кого есть примеры? Мне хотя бы саму структуру БД пока осознать.
И второе, при многопользовательском доступе может возникнуть проблема, когда данные по одному и тому же клиенту могут, одновременно, меняться несколькими пользователями. Каким макаром реализовать уведомление остальным желающим, когда первый пользователь собрался менять данные по клиенту? Что-то типа такого фокуса, Таня открыла карточку клиента "ТОО "Рога и Ботога" и жмакнула кнопку "Изменить данные", после этого Катя делает тоже самое, но ей демонстрируется окошко, что Таня её опередила и надо ждать, пока Таня сохранит изменения
Автор: ant0ni02004
Дата сообщения: 07.04.2015 15:15
Maximus777
блокировка записи в БД: select .... for update
Автор: OXDBA
Дата сообщения: 07.04.2015 16:17

Цитата:
Таня открыла карточку клиента "ТОО "Рога и Ботога" и жмакнула кнопку "Изменить данные"

... и резко ушла в декрет, что делать Кате?
Автор: Maximus777
Дата сообщения: 07.04.2015 20:26
ant0ni02004

Цитата:
блокировка записи в БД: select .... for update

Спасибо.

OXDBA

Цитата:
... и резко ушла в декрет,  что делать Кате?

Радоваться. Теперь ей никто мешать не будет.
Автор: OXDBA
Дата сообщения: 07.04.2015 21:29

Цитата:
Радоваться. Теперь ей никто мешать не будет.

Замечательно, вторая попытка. Блокировку кто снимет? И когда?
Автор: Maximus777
Дата сообщения: 08.04.2015 10:07
OXDBA
Цитата:
Замечательно, вторая попытка. Блокировку кто снимет? И когда?

А! Так у Тани начались схватки и она не нажала кнопочку "Сохранить изменения"? Вот тут бы помог какой-нибудь таймер, который бы через минут несколько сам сохранил изменения.

Кстати, кнопка "Изменить данные" может и не блокировать ничего, а просто куда-нить засовывать инфу о том, что такой-то ползатель собирается что-то изменить в данных такого-то клиента. И если следующий желающий полезет в базу с такими же намерениями, то ему напомнить о возможных граблях. Как Вам такой вариант?
Автор: Shaman2
Дата сообщения: 08.04.2015 10:48

Цитата:
А! Так у Тани начались схватки и она не нажала кнопочку "Сохранить изменения"? Вот тут бы помог какой-нибудь таймер, который бы через минут несколько сам сохранил изменения.


Не сохранил, а отменил изменения. Человек не подтвердил свои данные, кроме того он мог не заполнить обязательные поля и сохранение не пройдет по ошибке с дальнейшей блокировкой записи.


Цитата:
Кстати, кнопка "Изменить данные" может и не блокировать ничего, а просто куда-нить засовывать инфу о том, что такой-то ползатель собирается что-то изменить в данных такого-то клиента. И если следующий желающий полезет в базу с такими же намерениями, то ему напомнить о возможных граблях. Как Вам такой вариант?


а потом зависла программа и в базе осталась информация о заблокированной записи. И приехали, без ручного лазания по базе блокировку не снимешь.

В общем схватки у Тани и кто-то должен просто выключить компьютер в ее кабинете.
Автор: OXDBA
Дата сообщения: 08.04.2015 11:05

Цитата:
В общем схватки у Тани и кто-то должен просто выключить компьютер в ее кабинете.

В 99% случаев, пользователи вообще не должны блокировать работу друг друга.
Maximus777
Для начала есть очень хорошая, хотя и очень старая статья Как заблокировать запись в InterBase/Firebird
Правда потом возникнут другие вопросы
Автор: chAlx
Дата сообщения: 08.04.2015 11:09
Для разрешения конфликтов записи самое простое -- запоминать на клиенте время последнего изменения записи, открытой на редактирование. А при попытке сохранения проверять, что текущее время изменений в базе то же, что и было. Если нет -- выводить предупреждение, показывать разницу, звонить начальнику и всё такое, на что фантазии хватит. Если хочется совсем надёжности (обработать одновременные попытки сохранения), то проверку можно сделать внутри транзакции.

ПС: Это топик про Interbase или про варианты реализации распределённых клиентов?
Автор: OXDBA
Дата сообщения: 08.04.2015 11:22

Цитата:
ПС: Это топик про Interbase или про варианты реализации распределённых клиентов?

Мы пытаемся подвести Maximus777 к мысли о том, что Firebird имеет свои особенности реализации клиентских приложений, ибо он версионник.
Автор: Maximus777
Дата сообщения: 08.04.2015 12:21
Shaman2
Цитата:
а потом зависла программа и в базе осталась информация о заблокированной записи. И приехали, без ручного лазания по базе блокировку не снимешь.  

Так не обязательно же там такой лютый ахтунг прописывать.

chAlx
Цитата:
Для разрешения конфликтов записи самое простое -- запоминать на клиенте время последнего изменения записи, открытой на редактирование. А при попытке сохранения проверять, что текущее время изменений в базе то же, что и было. Если нет -- выводить предупреждение, показывать разницу, звонить начальнику и всё такое, на что фантазии хватит. Если хочется совсем надёжности (обработать одновременные попытки сохранения), то проверку можно сделать внутри транзакции.

Вот! Особенно последнее предложение, прям в самую суть.

OXDBA
Цитата:
Для начала есть очень хорошая, хотя и очень старая статья Как заблокировать запись в InterBase/Firebird

Я уже осознал, что блокировка это зло. Не надо ничего блокировать, надо жить дружно
Автор: gonkon
Дата сообщения: 08.04.2015 13:30
В базе Fireberd 2.5 файл очень вырос. Как бы его уменьшить becap/reestore/
Автор: tanaseduard
Дата сообщения: 08.04.2015 13:50
gonkon
Однозначно только так.
Мусор сам не собирается в FB
Автор: OXDBA
Дата сообщения: 08.04.2015 14:02

Цитата:
Мусор сам не собирается в FB

Да неужели? А если sweep interval > 0?
Автор: tanaseduard
Дата сообщения: 08.04.2015 14:14
OXDBA
И отработает когда происходят массовые update/delete/insert?
Там вроде всегда в конец страницы записывается.
Автор: OXDBA
Дата сообщения: 08.04.2015 15:02

Цитата:
И отработает когда происходят массовые update/delete/insert?

При OST - OIT > sweep interval естественно.

Цитата:
Там вроде всегда в конец страницы записывается.

В смысле? Если ты про фрагментацию страниц, то я этот слух встречал, но видел только фрагментацию BLOB'ами.


Автор: tanaseduard
Дата сообщения: 08.04.2015 15:04
OXDBA

Подскажи тогда. Если выставлять параметры то размер не будет так расти?
А селективность индексов?
Автор: OXDBA
Дата сообщения: 08.04.2015 16:59

Цитата:
Подскажи тогда. Если выставлять параметры то размер не будет так расти?
А селективность индексов?

Ох... ну и ну...
Если наблюдается резкий рост размера файла БД, при незначительном объеме добавляемых данных, то прежде всего надо смотреть статистику!!! В большинстве случаев Вы увидите резкий разрыв между Next Transaction и Oldest Active, что сопровождается потерей производительности по причине роста TIP, а не ухудшения селективности индексов. И это никак не связано со сборкой мусорных версий записей т.к. убирать нечего. Далее ищите вредителя, вероятнее всего длительную пишущую транзакцию, в последних версиях FB это элементарно делается через mon$transactions


Добавлено:
Затем через mon$attachments.mon$remote_process находите приложение, выпрямляете руки разработчику и наслаждаетесь работой FB.
Автор: chAlx
Дата сообщения: 08.04.2015 19:24
gonkon

Цитата:
В базе Fireberd 2.5 файл очень вырос.

Насколько я знаю, уменьшаться он не умеет, так что тут только бэкап-рестор. Хотя если размер файла сам по себе не мешает, можно очистить страницы внутри него, чтобы они могли заполняться новыми данными.

Примерный сценарий такой:

удалить лишние данные;
отключить лишних клиентов (shutdown) -- если возможно, лучше сделать это пораньше (первым шагом);
переподключиться к базе (чтобы старая транзакция, в которой проводилось удаление, не имела шансов числиться активной);
пересоздать индексы (какие особенно пухлые, видно в статистике);
переподключиться;
запустить sweep (я бы его запускал и перед чисткой индексов, но в FB2.5 должно нормально работать и без этого);
подключить лишних клиентов (online).

Кстати, всё это, кроме удаления собственно данных (а также многое другое) произойдёт и при бэкапе-ресторе.

ПС: пример костыля из жизни: для профилактики на частоизменяемой базе (с кучей временных данных) ежедневно выполняется обход всех таблиц (select count(*) from *). Это приводит к очистке практически всех неактуальных страниц, т.к. проводится во время наименьшей активности. Не помню, почему, но этот способ на IB7.5 показал себя более эффективным, чем просто запуск sweep.

ППС: Роста размера файла БД из-за роста TIP не встречал.
Автор: OXDBA
Дата сообщения: 08.04.2015 21:02

Цитата:
Роста размера файла БД из-за роста TIP не встречал.


Цитата:
что сопровождается потерей производительности по причине роста TIP.


Цитата:
При включенном автосвипе это приводит к очистке...

Хм, странно, кооперативная сборка мусора не должна зависить от значения sweep interval, но за IB ничего не скажу, со времен IB 5.6 с ним не работал.
Кстати, а чем был обоснован выбор IB, а не FB?
Автор: chAlx
Дата сообщения: 09.04.2015 22:40
OXDBA:

Насчёт производительности я не против. Но gonkon спрашивал только про размер файла базы.

Цитата:
кооперативная сборка мусора не должна зависить от значения sweep interval

И не зависит. Но свип дополняет её своими перепроверками неактуальных транзакций, что позволяет в итоге вычистить больше.
Формулировка и правда сомнительная, уберу про автосвип. (Тем более, что тема нетривиальная: чтобы его включать, база должна быть готова с запасом укладываться в лимиты при штатной работе.)

Цитата:
чем был обоснован выбор IB, а не FB?

Очень просто: IB6 появился в опенсорсе, а Firebird был известен только как выдранный из Mozilla Suite почтовый клиент браузер (ныне Firefox). Ну а дальше апгрейды того, что было.

Теперь на FB переехать не так-то просто: и формат бэкапа этого не предполагает, и ряд ограничений FB мешает (начиная с унылого лимита в 31 символ на имена метаданных, который торжественно перетащили в FB3).


Addon:
Подправил про название. Давно дело было...

Addon2:
Похоже, некоторые сюда ходят только чтобы похвастаться своим невежеством...
Автор: exteris
Дата сообщения: 10.04.2015 09:11

Цитата:
а Firebird существовал только как выдранный из Mozilla Suite почтовый клиент (ныне Thunderbird).

Шта?
Автор: pzaytsev
Дата сообщения: 11.04.2015 18:04
chAlx

Firebird и Firefox совсем разные вещи
Более того, насколько я помню, Mozilla в своих продуктах использует БД sqlite. Как в Firefox, так и в Thunderbird.
Автор: Ded0k
Дата сообщения: 12.04.2015 04:51
exteris, pzaytsev
Я тоже сначала не понял, о чем-это chAlx ляпнул, потом сообразил - он видимо имел в виду, что во время появления IB6 под словом Firebird широко было известно лишь о браузере под таким именем (кто не знает, нынешний FireFox 2 раза менял название: Phoenix -> FireBird -> FireFox). Только он как-то не корректно сделал, с такой фантазией еще можно было Pontiac Firebird наплести
Автор: obtim
Дата сообщения: 14.04.2015 22:25
А куда копать, если в логах вижу периодически эту ошибку:
INET/inet_error: read errno = 104 ?
База на серваке с CentOs
Само ПО на терминальном сервере с Win2008R2

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465

Предыдущая тема: Сравнение двух строк


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.