artzub
@artzub
Программист

Индексирование, как правильно реализовать в Firebird delphi?

Привет!


Дано:

1. БД firebird, с двумя таблицами:

— table1 (ID, NAME, IDCOUNT)

— table2 (ID, HASHCOUNT) hashcount — строка, зашифрованное число.

2. программа на delphi, которая умеет загружать эти данные и отображать расшифровывая.


Задача:
При выводе в таблицу нужно отсортировать данные по значению колва, то есть по числу.


Пришел к выводу что нужно сделать индексирование данных и хранить индексы.

Но создание индексов очень накладным получилось. Может у кого есть идеи по этому поводу.

Индексы создаю вот так:

1. Получаю все значения из table2

2. Дешифрую и помещаю в массив, при этом создается и массив индексов.

3. Сортирую индексы по методу сортировки Хоара.

4. Выгружаю получившиеся индексы в бд.


При выборке данных из бд выбираю и индексы и сортирую по ним.

Вроде как все надо. но создание индексов очень медленное получилось.

Данные обновляются часто и по этому часто надо индексировать это очень замедляет работу.


Если есть у кого-то мысли по другому варианту решения то буду очень благодарен.
  • Вопрос задан
  • 4724 просмотра
Решения вопроса 1
iswitch
@iswitch
Geek, Programmer, ????
плохо понятно, что зачем- но Firebird соответственно отсортировать при выдаче результата не сможет, т.к. индекс должен быть построен по истинному значению поля а не по hash.
есть 3 решения:
1. в вычисляемое полк дешифруем ваше значение и сортируем в программе (на клиенте): DataTable.Filter:='FIELDNAME',DataTable.Filered:=true;
2. незамарачиваемся на шифрование (ибо ваш шифратор влегкую будет вскрыт сколько нибудь вдумчивым профи) и храним все в открытом виде
3. будет работать почти так же как и у тебя медленно, ток на сервере (написать UDF для дешифровки на сервере)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@luis
есть еще 4-й вариант: написать свою внешнюю функцию для FB, дешифрующую значение и работать с ним прямо в БД.
Есть и пятый вариант. Дешифруйте во временную таблицу и работайте с ней. После завершения работы таблицу убить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы