powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Оптимальность работы с множеством справочников
25 сообщений из 32, страница 1 из 2
Оптимальность работы с множеством справочников
    #33750110
LelikBolek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу поделится подходами:
Имеется n-ое количество справочников которые могут быть использоваться как в диалоговых окнах выбора, так и в качестве занчение для lookup полей.
Сейчас я при все Датасеты с этими справоничками держу в Дата модуле и при старте программы их открываю, при этом естественно задержка т.к. справочников около 20 , среднее колв- записей в них до 100. Делаю так для того чтобы не переоткрывать эти датасеты при иницализации в формах работы со справоничками.
Правильно ли это ? или все же в каждой форме использовать датасеты те что используются в ней в сей момент.Уточнюб что справочники эти редактируются редко, и в проге иммется флаг изменения справочника и при открытии формы где используется справочник проверяется этот флаг, если он =1 то справочник в датамодуле переотыкрывается и флаг сбрасывается , если нет, то используется уже открытый. На сколько это логично ? D5, FireBird, FibPlus
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33750228
Dimkas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если задержка при открытии никого не печалит (меньше 2-3 секунд) и всё нормально работает, то и не надо ничего переделывать :)

а вообще лично я предпочитаю загружать что-либо в память при первом обращении, т.е. пока справочник не понадобился он не грузится.
выглядит это примерно так:
сама сущность "справочник" создаётся при старте, читается его наименование, взаимоотношения с другими таблицами.
а вот данные справочника загружаются при первом обращении непосредственно к ним... просто ставится расширенная обработка метода GetDataSet

с уважением,
Дмитрий Жучков
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33750760
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. В первую очередь, если имеется n-е количество справочников, для которых специфицировано общее поведение, то естественно сделать компонент "справочник", куда это поведение по возможности запихать. И где его, если захочется, можно легко переделать. Если нужны лукап-поля - никто не мешает унаследовать этот компонент от соответствующего датасета. Заодно в него можно будет класть дополнительно потребную информацию.

2. Кэширование справочников - вещь в принципе правильная. Открывать сразу все - вещь в принципе неправильная. Разгонять один и тот же справочник в кучу компонент на куче форм - вещь еще более неправильная. По идее, нужно открывать при первом обращении, как и сказал Дмитрий. Кроме того, в какой-то момент потребуется усложнить себе жизнь ради работы с большими справочниками.

3. И вообще, привыкните, как только натыкаетесь на то, что делаете задачу, которую уже решали - пора писать стандартное решение, которое сведет эту задачу к одному вызову.
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33750766
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
странно. Такой вопрос для клиента а не для БД.
Вариант:
- В дата модуле только ADOConnection (хотя говорят что MS рекомендует не открывать коннект со стартом приложения, а открывать только для запросов)
- на каждой форме с данными Data.... компоненты. Поэтому запросы и заполнение происходит только когда открываешь форуму.
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33750982
LelikBolek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer..Разгонять один и тот же справочник в кучу компонент на куче форм - вещь еще более неправильная. ...

Если имеется справочник "Категория сотрудников" (ID, NAME)
Информация о категории вывводится на половине форм, то что, в каждой из них ложить датасет со справочником категорийи там открывать его ? зачем? Джойинть в запросе для представления - можно, но не проще и не быстрее ли будет один уже окрытый к тому моменту датасет использовать для lookup поля? (при условии что это небольшие справлчник до 100 записей) ???
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33751085
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelikBolekДжойинть в запросе для представления - можно, но не проще и не быстрее ли будет один уже окрытый к тому моменту датасет использовать для lookup поля? (при условии что это небольшие справлчник до 100 записей) ???
ваши небольшие справлчник кеширует сервер БД, поэтому самое правильное делать select каждый раз когда надо -и данные будут актульными и не надо думать о количестве записей.
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33751132
LelikBolek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мод ваши небольшие справлчник кеширует сервер БД, поэтому самое правильное делать select каждый раз когда надо -и данные будут актульными и не надо думать о количестве записей.

Хм.. а если на форме табличка которая имеет датасет с ID полями в кол-ве 5 -7 штук, т.е. связь с 5-7 -ю справочниками, неужели логично каждый раз переоткрывавать эти справочнкии или джоинить в запросе?
Если это карточка сотрудника, их одновременно на экране может быть 3 -4 - разве логично столко раз открывать датасеты?

поясните логику плиз ?
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33751146
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Логика проста:
- не надо жалеть сервер (это его работа)
- если всё-таки жалко, то не Form.Free (уничтожать) а Form.Close - невидима.
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33751161
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторХм.. а если на форме табличка которая имеет датасет с ID полями в кол-ве 5 -7 штук, т.е. связь с 5-7 -ю справочниками, неужели логично каждый раз переоткрывавать эти справочнкии или джоинить в запросе?

по вашему получается, что вместо 5-ти справочников по 3NF легче одна таблица со всем подряд ненормализованная?
- грамотная структура
- грамотные view c join
- грамотные ХП c join (не динамические, чтобы статистику оптимизатору легче)
.........
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33751221
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelikBolek softwarer..Разгонять один и тот же справочник в кучу компонент на куче форм - вещь еще более неправильная. ...
Информация о категории вывводится на половине форм, то что, в каждой из них ложить датасет со справочником категорийи там открывать его ?
Наверное, я недостаточно четко сформулировал. Как раз описанное Вами и названо "еще более неправильным". Если есть "устойчиво одинаковый объект", он должен присутствовать в одном месте и использоваться - во всех остальных, это азы программирования вообще.

LelikBolekДжойинть в запросе для представления - можно,
И нужно.

LelikBolekно не проще и не быстрее ли будет один уже окрытый к тому моменту датасет использовать для lookup поля?
Не уверен насчет "проще и быстрее" - поскольку последние лет восемь рекомендую побыстрее отвыкать от использования lookup полей. Быстрее пожалуй таки join-ить, проще - наверное lookup поля.
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33751345
LelikBolek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну дабы у народа терпение не лопнуло -уточню напоследок:

в проге принцип работы с данными таков, что данные в представляются списками (DBGrid) а редактируются в карточе, так уж принято и всем вроде понятно-удобно. Так вот, следуя советам надо в списке - джонить, а в карточке открывать свои датасеты со справчниками для каждой карточки.
Теперь идем по табличке и редактируем n-ое колв-во записей.. Каждый раз при этом отпркываем таблицы справочников, а по завершению редактирования карточки ище и рефрешим датасет в списке в котором 5-7 джоинов ... ??? это правильно ? логично ?

а у меня счас один раз открываются датасеты со списками ... хотя при рефреше датасета в списке данные конечно обновляются lookup поля и на это уходит время..

что ж правильнее при таком подходе ..

PS не ругайтесь что переспрашиваю - хочу уяснить с разных позиций...
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33751404
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТеперь идем по табличке и редактируем n-ое колв-во записей..
если n-ое, то не надо в отдельной карточке. И вопрос отпадёт сам собой.
А то:
- открываем кошёлочку, достаём сумочку, открываем кошёлочку, достаём сумочку, открываем кошёлочку, достаём сумочку.....
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33751469
LelikBolek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Оптимальность редактирования в DBGrid - спорный момент, ибо при этом больше возможности ошибиться и случайно что-то как-тоизменить.. (теже теже выпадающие списки при случайном прокручивании колесом мыши меняют значения - это можно не заметить) Конечно можно колесо запретить .. но ...
в Карточке внимание не рассеивается, есть две конпки Применить / Отменить.. да и в целях унификации действий в системе , по-моему так правильнее
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33751539
linke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне вот тоже интересно.А вот если у меня справочник(для правильного заполнения адреса) реализован в
виде обной большой таблицы(порядка 1мл записей).
Таблица такого вида
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Name	Type	Nullable
CODE	VARCHAR2( 23 )	N
PARENTCODE	VARCHAR2( 23 )	Y
NAME	VARCHAR2( 60 )	N
SOCR	VARCHAR2( 10 )	Y
NEWCODE	VARCHAR2( 23 )	Y
P_INDEX	VARCHAR2( 6 )	Y
GNINMB	VARCHAR2( 4 )	Y
UNO	VARCHAR2( 4 )	Y
OCATD	VARCHAR2( 11 )	Y
STATUS	NUMBER( 1 )	Y

PK-Code  
В ней храняться несколько справочников(регионы, города, улицы...),
отличить их можно по полю code(по длинне и значению).
В принципе проблема возникает только когда надо выбрать регион(выполняеться 3,5-4 секунды)
Код: plaintext
1.
2.
--все регионы--
select * from kladr t where code like '__00000000000' order by code
Если выбран регион тогда дальнейшие запросы выполняются быстро
Код: plaintext
1.
2.
--все улицы Санкт-Петербурга--
select * from kladr t where code like '7800000000000____' order by code
Как правильней тогда будет загружать данные клиенту?
Открывать при первом обращении,
но что тогда делать с регионом(4 секунды многовато ждать) просто в отдельную таблицу его перенести?

PS:извиняюсь что вклиниваюсь со своим вопросом, но еще одну тему про справчники не хотелось создавать.
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33751714
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, справочник в котором > 1000 записей требует уже другого подхода.
Тут пэйджинг с кэшированием нужен. Моя любимая тема на DB2)))...
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33751729
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelikBolekКаждый раз при этом отпркываем таблицы справочников, а по завершению редактирования карточки ище и рефрешим датасет в списке в котором 5-7 джоинов ... ??? это правильно ? логично ?
ИМХО да, логично получить свежее состояние из базы на момент завершения редактирования карточки. Cистема ж наверняка не однопользовательская? Нелогично считать, что достаточно обработать мои изменения и данные в списке станут актуальными:).
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33751744
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Загружать миллион записей клиенту - не факт, что правильно. Тут уже надо смотреть по логике работы пользователя, что ему в итоге дешевле обойдется. В идеале должна быть некая внутренняя логика кэширования, наподобие идеи SoftReference в Java.

В любом случае, если запрос при определенной структуре базы выполняется 4 секунды - надо либо менять базу, либо хоть раз, но тратить 4 секунды.

Как дорабатывать базу - вопрос к конкретной СУБД. Например:

Код: plaintext
1.
create index kladr_region_i on kladr (case when code like '__00000000000' then  1  else null end)

и регионы можно будет найти весьма быстро.
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33751787
linke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Загружать миллион записей клиенту - не факт, что правильно.

Да я и не спрорю что клиенту грузить такое количесвто зиписей это бред,но выбирать то надо из этого миллиона, пока остановился на том что один раз трачу эти четыре секунды.
PS: СУБД Oracle
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33751906
Alexandr Kochmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L> Если имеется справочник "Категория сотрудников" (ID, NAME)
L> Информация о категории вывводится на половине форм, то что, в каждой из
L> них ложить датасет со справочником категорийи там открывать его ? зачем?
L> Джойинть в запросе для представления - можно, но не проще и не быстрее
L> ли будет один уже окрытый к тому моменту датасет использовать для lookup
L> поля? (при условии что это небольшие справлчник до 100 записей) ???

лукап, как он реализован у датасета, фтопку.

--
С уважением
Кочмин Александр

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33751924
Alexandr Kochmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
l> Автор: linke
l> softwarer

l> Загружать миллион записей клиенту - не факт, что правильно.

l> Да я и не спрорю что клиенту грузить такое количесвто зиписей это
l> бред,но выбирать то надо из этого миллиона, пока остановился на том что
l> один раз трачу эти четыре секунды. PS: СУБД Oracle

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


--
С уважением
Кочмин Александр

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33751934
Один
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer3. И вообще, привыкните, как только натыкаетесь на то, что делаете задачу, которую уже решали - пора писать стандартное решение, которое сведет эту задачу к одному вызову. По сути согласен, но у меня эмпирическое правило 4-х раз. Т.е. если 3 раза мне пришлось делать одно и тоже, то на 4-й пишу стандартное решение. В дальнейшем, возможно, перевожу на него предыдущие 3 случая.

Просто я очень не люблю писать универсально-стандартные решения. Они отвлекают время, ресурсы, мало приблежают к конечному результату и зачастую являются программированием ради программирования. Впрочем все это уже не раз обсуждалось
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33751948
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
linkeДа я и не спрорю что клиенту грузить такое количесвто зиписей это бред
Я бы как раз с этим поспорил. Иногда нужно, и лучше других вариантов. Понятно, что нужно подсасывать порциями - то есть не ждать чтения всего миллиона записей чтобы показать первые десять.

Но есть еще один интересный вопрос. Допустим, Вы засосали этот миллион записей (или полмиллиона из миллиона). Отработали и пошли дальше. Вопрос: оправдано ли тратить память на этот справочник? Когда он в следующий раз понадобится?
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33751951
LelikBolek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexandr Kochmin

лукап, как он реализован у датасета, фтопку.



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

С неменьшим уважением, Андрей
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33752037
linke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Но есть еще один интересный вопрос. Допустим, Вы засосали этот миллион записей (или полмиллиона из миллиона). Отработали и пошли дальше. Вопрос: оправдано ли тратить память на этот справочник? Когда он в следующий раз понадобится?

В моем случае я думаю что оправдано, так как расчитано что этим справочником будут пользоваться постоянно. А если брать в расчет тот случай что где-то что- заполнили и забыли, то наверное не разумно. Но тогда у меня встречный вопрос, разумно ли тратить время пользователя на загрузку такого справочника?
...
Рейтинг: 0 / 0
Оптимальность работы с множеством справочников
    #33752251
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОдинПо сути согласен, но у меня эмпирическое правило 4-х раз.
Разумеется, вопрос о точном расположении границы каждый решает для себя.

ОдинПросто я очень не люблю писать универсально-стандартные решения.
С моей точки зрения, правилен следующий критерий: не нужно ставить задачу писать универсальное решение. Оно должно вырастать из практики, из нежелания повторять некоторую работу (и видимого пути автоматизировать это решение раз и надолго). В то же время, разрабатывая прикладной код, нужно иметь нацеленность на поиск кандидатов, на отсутствие тупого повторения.
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Оптимальность работы с множеством справочников
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]