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

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

Автор: druff
Дата сообщения: 24.08.2011 09:44
delover
в firebird.conf есть несколько настроек, влияющих на размер памяти используемой сервером. Можно даже базу хранить не на диске, а в RAM
Автор: delover
Дата сообщения: 24.08.2011 10:33
Тогда порабы дефолты конфига тож поправить...

pps
И опять же речь не идёт о снятии ограничений, а о лишь пересмотре их размеров. Не надо ломать математику, а только проследить как оптимально повысить допустимые размеры. Речь не идёт о телефонах которые не потдерживают IB компоненты и у которых памяти меньше 256мб. Такие телефоны ещё можно купить, но до IB они вряд ли доживут. Речь о средних серверах которых много и реальный промышленный эффект в основном от них 2Gb-4Gb, клиенты 1Gb-4Gb. Большое количество таких клиентов, где 1 или более Гигобайт оперативки, и имеется основная для их фирмы программа, которая не в состоянии справляться со 180мб. Это не критика, а сожаление по поводу очень достойного матаппарата и констатация того, что популярность этого аппарата по очевидным (хотя и глупым) причинам будет сильно уменьшатся. Желательно бы без этого (извините меня ламера даже не знаю какие настройки в конфиге влияют на выпадание OutOfMemory).

Добавлено:
по поводу айдишников - есть простая хранимка (хранимая процедура SplitIDs) которая парсит строку айдишников переданную параметром 64кб и возвращает таблицу для джойна, но такая штука тоже далкео не у всех есть.
Автор: druff
Дата сообщения: 24.08.2011 13:11
delover
Я считаю, что классические OLTP СУБД не предназначены для таких задач (вытягивание клиентом такого большого количества данных в одной транзакции). У меня, например, ни разу ещё не возникала проблема с нехваткой памяти, хотя базы у заказчиков доходят до 20гиг при 50и клиентах. Все большие обработки данных обычно проходят на стороне сервера (кстати в сторону UDF не копали? может они помогут)
Автор: delover
Дата сообщения: 25.08.2011 21:26
druff
Копал. К примеру вы имеете на одну модель изделия справочник толщиной с энциклопедию. Таких моделей на изделие несколько десятков, таких изделий у фирмы несколько десятков, таких фирм несколько десятков. Естественно это несколько баз с одинаковой структурой. И вы заполнив эти базы - тоесть потратив огромное количество человекочасов собираетесь их продать потребителью. 1 потребитель купил и раздал эти справочники бесплатно, Вас это наверно чемто не устроит? Подумаете зашифровать базу и защитить прогу чемто типо СтарФорс? Хорошее решение, правдо защита на каждую версию программы оплачивается Вами крупненькой суммой. И тут находится гениальный программист который предлагает расшифровывать данные в UDFках и использовать фильтрацию селекта по like на расшифрованный текст. Это веть быстрее? Круто! Тут же потребитель номер 2 легонько вскрывает UDF и все справочники и так же раздаёт их бесплатно. Себестоимость СтарФорс и заполнения вдруг оказалась намного больше выручки. А подобное случалось?
Автор: delover
Дата сообщения: 26.08.2011 04:42
То что касается моей текущей задачи, так и надо сделать - всё засунуть в UDF. Спасибо, мне пришлось преодолеть свой комплекс и свои тормоза, но это здоровское решение. В задаче ничё секретного вопервых, вовторых для Линукса саппорт пока не планировался. ))) Да и почти удалось реанимировать функции автоматического обновления любых файлов.
Автор: druff
Дата сообщения: 26.08.2011 09:20
delover
UDF точно так же будут работать под nix, если писать их на Lazarus.

насчёт защиты данных я пока что не особо беспокоился.. Т.к. в моём случае все данные в базе принадлежат заказчику и не в моём праве закрывать к ним доступ. Меня больше заботит защита собственных алгоритмов, и, по возможности, структуры самой базы.
Автор: TuMOXA123
Дата сообщения: 26.08.2011 14:19

Цитата:
Меня больше заботит защита собственных алгоритмов, и, по возможности, структуры самой базы.


Можно стереть исходный код процедур и триггеров.

Update RDB$TRIGGERS set RDB$TRIGGER_SOURCE = '';
Update RDB$PROCEDURES set RDB$PROCEDURE_SOURCE = '';

А структуру таблиц по-любому увидят
Автор: druff
Дата сообщения: 26.08.2011 15:24
TuMOXA123
Текст ХП можно не только стереть, но и изменить

А структуру сделать нечитаемой. Т.е. названий всех объектов.. Перед сборкой релиза для клиентов - провести обфускацию названий, выбранных разработчиком таблиц, полей, ХП и т.д. Попробуй потом разберись в таких данных
Автор: delover
Дата сообщения: 26.08.2011 18:56
druff

Цитата:
Т.к. в моём случае все данные в базе принадлежат заказчику и не в моём праве закрывать к ним доступ.

Это не совсем верно если рассматривать для примера D2010. Данные заказчика в целости - они не зашифрованы. Однако без Вашего вмешательства их получить бывает достаточно трудно. На гриде они видны а вот чтобы их сохранить надо например иметь ввиду, что компоненты сами умеют создавать филды, как это делается:


Код: DefaultFieldClasses: array[no][TFieldType][/no] of TFieldClass = (
DB.pas
TMemoField, { ftMemo }
IBCustomDataSet.pas
TWideMemoField, { ftMemo }
function ADOTypeToFieldType(const ADOType: DataTypeEnum;
ADODB.pas
adLongVarChar: Result := ftMemo;
adLongVarWChar: Result := ftWideMemo;
Автор: 1959pma
Дата сообщения: 28.08.2011 14:37
Удалено
Автор: pzaytsev
Дата сообщения: 01.09.2011 22:30
Кто может рассказать что-то познавательного о технологии MDT от DevRace?
Автор: Tantos
Дата сообщения: 02.09.2011 05:49
MDT - это технология Firebird 2+, а не Devrace.
По вашей же ссылке 2 статьи по MDT. В чем вопрос-то?
Автор: druff
Дата сообщения: 02.09.2011 10:10

Цитата:
MDT - это технология Firebird 2+, а не Devrace.


В каком смысле? Насколько я помню, это технология при которой часть базы кэшируется на клиенте.
Автор: pzaytsev
Дата сообщения: 02.09.2011 11:54
Tantos

Вопрос был, собственно, к практикам. Есть ли смысл копать в сторону MDT? Какие подводные камни? Есть ли реальный прирост производительности? Насколько разгрузился основной сервер БД?

Или кто видел ссылки на статьи по данному поводу? Кроме деврэйсовских.

Добавлено:

Цитата:
В каком смысле? Насколько я помню, это технология при которой часть базы кэшируется на клиенте.


Не просто кэшируется на клиенте, а кэшируется на ОДНОМ ИЗ КЛИЕНТОВ.
Автор: druff
Дата сообщения: 02.09.2011 15:59
pzaytsev

Цитата:
а кэшируется на ОДНОМ ИЗ КЛИЕНТОВ.

т.е.? какой смысл на одном клиенте кэшировать базу, а на другом - нет?
Автор: pzaytsev
Дата сообщения: 03.09.2011 09:34
druff

Кэширование данных и метаданных происходит по любому на каждом клиенте. Но я так понял, что технология MDT вводит еще свой кэш на одном из локальных компов. Или нет?

более подробное обсуждение нашел здесь

Цитата:
С учетом всего сказанного, применение mdt возможно имеет смысл, только если вы:
1. используете fib
2. готовы переписать полностью свое приложение
3. все локальные машины имеют достаточно свободного места и пользователь за этим следит
4. у вас нет огромных таблиц
5. вы готовы лично разбираться с багами




Автор: druff
Дата сообщения: 04.09.2011 14:31
pzaytsev
да, не очень оптимистично но это применимо ко всем новым/мало известным технологиям. Мне MDT видится альтернативой многозвенным приложениям. Особенно в части экономии трафика.
Автор: delover
Дата сообщения: 04.09.2011 19:08
А насколько оптимистично это:

Код:
function TIBCustomDataSet.Lookup(const KeyFields: string; const KeyValues: Variant;
const ResultFields: string): Variant;
var
fl: TList;
CurBookmark: TBytes;
begin
DisableControls;
fl := TList.Create;
CurBookmark := Bookmark;
try
... //without local variable fl
finally
Bookmark := CurBookmark;
fl.Free;
EnableControls;
end;
end;
Автор: druff
Дата сообщения: 05.09.2011 10:27
delover

жёстко это из какой версии?
Автор: delover
Дата сообщения: 06.09.2011 19:32
druff
Примеры к приложению "О безопасности".

Код: procedure ...DrawGrid1DrawCell(Se...
var
P: ^TGridDrawState;
begin
P := @P; Inc(Longint(P), $A3);
if P^ = State then
P^ := State-[gdSelected,gdFocused];
Автор: delover
Дата сообщения: 08.09.2011 05:19
В продолжении темы о наведении уникальности в базе. Код сравнения строк обновил. Однако оказалось - задача приведения данных к уникальности будь то справочник видов растений или ещё чего очень сродни задаче сравнения двух фотографий. Тут нам кепка помешала увидеть что это один и тот же человек, а тут мы не заметили что оправа одна и та же но лица совершенно разные. При сравнении выделяется что сравниваться не должно, а что должно и при первой сотне сравнений мы не можем гарантировать что учитываем все факторы. Распознавание образов лучше выполнять постепенно, по ходу автоматизируя очевидное. Очень хорошо что у меня не получилось сделать такой джойн.


Цитата:
А если загнать эти айдишники во временную таблицу (GTT) и выполнять джойн с ней ?


Вынесение в клиентский датасет решает одну важную задачу. Даёт возможность постепенной работы как в случае с автоматизацией распознавания образов.
Автор: EugeneBoss3
Дата сообщения: 19.09.2011 02:22
Знатоки, подскажите, возможно ли совместное использование FireBird-embed и FireBird server (если сервер не запущен использовать embed)?
Автор: YuriyRR
Дата сообщения: 19.09.2011 04:22
EugeneBoss3

Цитата:
Знатоки, подскажите, возможно ли совместное использование FireBird-embed и FireBird server (если сервер не запущен использовать embed)?

Да за ради бога. Заменяешь только fbclient.dll и в путь.
Автор: EugeneBoss3
Дата сообщения: 20.09.2011 23:56
YuriyRR

Цитата:
Заменяешь только fbclient.dll и в путь.

Заменять fbclient.dll чем? Если можно подробнее.
Автор: exteris
Дата сообщения: 21.09.2011 08:05
fblient-ом от embedded версии.
Автор: druff
Дата сообщения: 21.09.2011 09:45
EugeneBoss3
или на соответствующий gds32.dll если пользуешься именно им.
Автор: rrromano
Дата сообщения: 21.09.2011 11:33

Цитата:
В продолжении темы о наведении уникальности в базе.


Я бы использовал нечёткое сравнение строк с дальнейшим ручным принятием решений.
Автор: YuriyRR
Дата сообщения: 21.09.2011 15:33
EugeneBoss3

Цитата:
Заменять fbclient.dll чем? Если можно подробнее

В поставке embedded весь сервер находится в fbembed.dll
Переименовываешь ее в fbclient.dll и соединение будет через emb.
Через нее вроде можно будет коннектится и к удаленному серверу.
Автор: TuMOXA123
Дата сообщения: 21.09.2011 19:49

Цитата:
Через нее вроде можно будет коннектится и к удаленному серверу.

Если в строке пути к базе есть имя машины или адрес, то она работает также как обычный fbclient.dll

Автор: delover
Дата сообщения: 22.09.2011 18:35
rrromano
Да я пока так и делаю, долго грузится табличка, а потом узнаю что неправильно сделал. Поле базы ограничил, после этого парсил запятые, которые обрезались, данные уехали в другую колонку, которая с плавающей точкой, а там наименование. Незнаю как ускорить. )))

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465

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


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