|
|
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
Прошу поделится подходами: Имеется n-ое количество справочников которые могут быть использоваться как в диалоговых окнах выбора, так и в качестве занчение для lookup полей. Сейчас я при все Датасеты с этими справоничками держу в Дата модуле и при старте программы их открываю, при этом естественно задержка т.к. справочников около 20 , среднее колв- записей в них до 100. Делаю так для того чтобы не переоткрывать эти датасеты при иницализации в формах работы со справоничками. Правильно ли это ? или все же в каждой форме использовать датасеты те что используются в ней в сей момент.Уточнюб что справочники эти редактируются редко, и в проге иммется флаг изменения справочника и при открытии формы где используется справочник проверяется этот флаг, если он =1 то справочник в датамодуле переотыкрывается и флаг сбрасывается , если нет, то используется уже открытый. На сколько это логично ? D5, FireBird, FibPlus ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 07:14 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
если задержка при открытии никого не печалит (меньше 2-3 секунд) и всё нормально работает, то и не надо ничего переделывать :) а вообще лично я предпочитаю загружать что-либо в память при первом обращении, т.е. пока справочник не понадобился он не грузится. выглядит это примерно так: сама сущность "справочник" создаётся при старте, читается его наименование, взаимоотношения с другими таблицами. а вот данные справочника загружаются при первом обращении непосредственно к ним... просто ставится расширенная обработка метода GetDataSet с уважением, Дмитрий Жучков ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 09:12 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
1. В первую очередь, если имеется n-е количество справочников, для которых специфицировано общее поведение, то естественно сделать компонент "справочник", куда это поведение по возможности запихать. И где его, если захочется, можно легко переделать. Если нужны лукап-поля - никто не мешает унаследовать этот компонент от соответствующего датасета. Заодно в него можно будет класть дополнительно потребную информацию. 2. Кэширование справочников - вещь в принципе правильная. Открывать сразу все - вещь в принципе неправильная. Разгонять один и тот же справочник в кучу компонент на куче форм - вещь еще более неправильная. По идее, нужно открывать при первом обращении, как и сказал Дмитрий. Кроме того, в какой-то момент потребуется усложнить себе жизнь ради работы с большими справочниками. 3. И вообще, привыкните, как только натыкаетесь на то, что делаете задачу, которую уже решали - пора писать стандартное решение, которое сведет эту задачу к одному вызову. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 11:38 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
странно. Такой вопрос для клиента а не для БД. Вариант: - В дата модуле только ADOConnection (хотя говорят что MS рекомендует не открывать коннект со стартом приложения, а открывать только для запросов) - на каждой форме с данными Data.... компоненты. Поэтому запросы и заполнение происходит только когда открываешь форуму. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 11:40 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
softwarer..Разгонять один и тот же справочник в кучу компонент на куче форм - вещь еще более неправильная. ... Если имеется справочник "Категория сотрудников" (ID, NAME) Информация о категории вывводится на половине форм, то что, в каждой из них ложить датасет со справочником категорийи там открывать его ? зачем? Джойинть в запросе для представления - можно, но не проще и не быстрее ли будет один уже окрытый к тому моменту датасет использовать для lookup поля? (при условии что это небольшие справлчник до 100 записей) ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 12:22 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
LelikBolekДжойинть в запросе для представления - можно, но не проще и не быстрее ли будет один уже окрытый к тому моменту датасет использовать для lookup поля? (при условии что это небольшие справлчник до 100 записей) ??? ваши небольшие справлчник кеширует сервер БД, поэтому самое правильное делать select каждый раз когда надо -и данные будут актульными и не надо думать о количестве записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 12:46 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
мод ваши небольшие справлчник кеширует сервер БД, поэтому самое правильное делать select каждый раз когда надо -и данные будут актульными и не надо думать о количестве записей. Хм.. а если на форме табличка которая имеет датасет с ID полями в кол-ве 5 -7 штук, т.е. связь с 5-7 -ю справочниками, неужели логично каждый раз переоткрывавать эти справочнкии или джоинить в запросе? Если это карточка сотрудника, их одновременно на экране может быть 3 -4 - разве логично столко раз открывать датасеты? поясните логику плиз ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 13:03 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
Логика проста: - не надо жалеть сервер (это его работа) - если всё-таки жалко, то не Form.Free (уничтожать) а Form.Close - невидима. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 13:06 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
авторХм.. а если на форме табличка которая имеет датасет с ID полями в кол-ве 5 -7 штук, т.е. связь с 5-7 -ю справочниками, неужели логично каждый раз переоткрывавать эти справочнкии или джоинить в запросе? по вашему получается, что вместо 5-ти справочников по 3NF легче одна таблица со всем подряд ненормализованная? - грамотная структура - грамотные view c join - грамотные ХП c join (не динамические, чтобы статистику оптимизатору легче) ......... ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 13:09 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
LelikBolek softwarer..Разгонять один и тот же справочник в кучу компонент на куче форм - вещь еще более неправильная. ... Информация о категории вывводится на половине форм, то что, в каждой из них ложить датасет со справочником категорийи там открывать его ? Наверное, я недостаточно четко сформулировал. Как раз описанное Вами и названо "еще более неправильным". Если есть "устойчиво одинаковый объект", он должен присутствовать в одном месте и использоваться - во всех остальных, это азы программирования вообще. LelikBolekДжойинть в запросе для представления - можно, И нужно. LelikBolekно не проще и не быстрее ли будет один уже окрытый к тому моменту датасет использовать для lookup поля? Не уверен насчет "проще и быстрее" - поскольку последние лет восемь рекомендую побыстрее отвыкать от использования lookup полей. Быстрее пожалуй таки join-ить, проще - наверное lookup поля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 13:25 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
ну дабы у народа терпение не лопнуло -уточню напоследок: в проге принцип работы с данными таков, что данные в представляются списками (DBGrid) а редактируются в карточе, так уж принято и всем вроде понятно-удобно. Так вот, следуя советам надо в списке - джонить, а в карточке открывать свои датасеты со справчниками для каждой карточки. Теперь идем по табличке и редактируем n-ое колв-во записей.. Каждый раз при этом отпркываем таблицы справочников, а по завершению редактирования карточки ище и рефрешим датасет в списке в котором 5-7 джоинов ... ??? это правильно ? логично ? а у меня счас один раз открываются датасеты со списками ... хотя при рефреше датасета в списке данные конечно обновляются lookup поля и на это уходит время.. что ж правильнее при таком подходе .. PS не ругайтесь что переспрашиваю - хочу уяснить с разных позиций... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 13:51 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
авторТеперь идем по табличке и редактируем n-ое колв-во записей.. если n-ое, то не надо в отдельной карточке. И вопрос отпадёт сам собой. А то: - открываем кошёлочку, достаём сумочку, открываем кошёлочку, достаём сумочку, открываем кошёлочку, достаём сумочку..... ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 14:02 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
Оптимальность редактирования в DBGrid - спорный момент, ибо при этом больше возможности ошибиться и случайно что-то как-тоизменить.. (теже теже выпадающие списки при случайном прокручивании колесом мыши меняют значения - это можно не заметить) Конечно можно колесо запретить .. но ... в Карточке внимание не рассеивается, есть две конпки Применить / Отменить.. да и в целях унификации действий в системе , по-моему так правильнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 14:13 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
Мне вот тоже интересно.А вот если у меня справочник(для правильного заполнения адреса) реализован в виде обной большой таблицы(порядка 1мл записей). Таблица такого вида Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. отличить их можно по полю code(по длинне и значению). В принципе проблема возникает только когда надо выбрать регион(выполняеться 3,5-4 секунды) Код: plaintext 1. 2. Код: plaintext 1. 2. Открывать при первом обращении, но что тогда делать с регионом(4 секунды многовато ждать) просто в отдельную таблицу его перенести? PS:извиняюсь что вклиниваюсь со своим вопросом, но еще одну тему про справчники не хотелось создавать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 14:26 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
Ну, справочник в котором > 1000 записей требует уже другого подхода. Тут пэйджинг с кэшированием нужен. Моя любимая тема на DB2)))... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 15:04 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
LelikBolekКаждый раз при этом отпркываем таблицы справочников, а по завершению редактирования карточки ище и рефрешим датасет в списке в котором 5-7 джоинов ... ??? это правильно ? логично ? ИМХО да, логично получить свежее состояние из базы на момент завершения редактирования карточки. Cистема ж наверняка не однопользовательская? Нелогично считать, что достаточно обработать мои изменения и данные в списке станут актуальными:). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 15:06 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
Загружать миллион записей клиенту - не факт, что правильно. Тут уже надо смотреть по логике работы пользователя, что ему в итоге дешевле обойдется. В идеале должна быть некая внутренняя логика кэширования, наподобие идеи SoftReference в Java. В любом случае, если запрос при определенной структуре базы выполняется 4 секунды - надо либо менять базу, либо хоть раз, но тратить 4 секунды. Как дорабатывать базу - вопрос к конкретной СУБД. Например: Код: plaintext 1. и регионы можно будет найти весьма быстро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 15:12 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
softwarer Загружать миллион записей клиенту - не факт, что правильно. Да я и не спрорю что клиенту грузить такое количесвто зиписей это бред,но выбирать то надо из этого миллиона, пока остановился на том что один раз трачу эти четыре секунды. PS: СУБД Oracle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 15:21 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
L> Если имеется справочник "Категория сотрудников" (ID, NAME) L> Информация о категории вывводится на половине форм, то что, в каждой из L> них ложить датасет со справочником категорийи там открывать его ? зачем? L> Джойинть в запросе для представления - можно, но не проще и не быстрее L> ли будет один уже окрытый к тому моменту датасет использовать для lookup L> поля? (при условии что это небольшие справлчник до 100 записей) ??? лукап, как он реализован у датасета, фтопку. -- С уважением Кочмин Александр Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 15:53 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
l> Автор: linke l> softwarer l> Загружать миллион записей клиенту - не факт, что правильно. l> Да я и не спрорю что клиенту грузить такое количесвто зиписей это l> бред,но выбирать то надо из этого миллиона, пока остановился на том что l> один раз трачу эти четыре секунды. PS: СУБД Oracle зачем юзеру миллион записей, он их что, всю жизнь смотреть будет. пусть фильтром пользуется, фильтр пошлет select запрос на сервер, сервер вернет несколько записей, удовлетворяющих критерию, (используя индексы это будет быстро) и юзер выберет и заполнит. Усе. И никаких 4 секунд на это ненадо. -- С уважением Кочмин Александр Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 15:58 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
softwarer3. И вообще, привыкните, как только натыкаетесь на то, что делаете задачу, которую уже решали - пора писать стандартное решение, которое сведет эту задачу к одному вызову. По сути согласен, но у меня эмпирическое правило 4-х раз. Т.е. если 3 раза мне пришлось делать одно и тоже, то на 4-й пишу стандартное решение. В дальнейшем, возможно, перевожу на него предыдущие 3 случая. Просто я очень не люблю писать универсально-стандартные решения. Они отвлекают время, ресурсы, мало приблежают к конечному результату и зачастую являются программированием ради программирования. Впрочем все это уже не раз обсуждалось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 16:00 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
linkeДа я и не спрорю что клиенту грузить такое количесвто зиписей это бред Я бы как раз с этим поспорил. Иногда нужно, и лучше других вариантов. Понятно, что нужно подсасывать порциями - то есть не ждать чтения всего миллиона записей чтобы показать первые десять. Но есть еще один интересный вопрос. Допустим, Вы засосали этот миллион записей (или полмиллиона из миллиона). Отработали и пошли дальше. Вопрос: оправдано ли тратить память на этот справочник? Когда он в следующий раз понадобится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 16:03 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
Alexandr Kochmin лукап, как он реализован у датасета, фтопку. вот вы там все такие умные, кинули фразу и думаете что настолько круты, что вас все сразу поймут. Уж если отвечаете на вопрос -уж будьте так любезны оринетрироваться на разный уровень подготовки. Если в топку то почему? к чему приведет, какие другие пути ... а иначе уж лучше молчите С неменьшим уважением, Андрей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 16:05 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
softwarer Но есть еще один интересный вопрос. Допустим, Вы засосали этот миллион записей (или полмиллиона из миллиона). Отработали и пошли дальше. Вопрос: оправдано ли тратить память на этот справочник? Когда он в следующий раз понадобится? В моем случае я думаю что оправдано, так как расчитано что этим справочником будут пользоваться постоянно. А если брать в расчет тот случай что где-то что- заполнили и забыли, то наверное не разумно. Но тогда у меня встречный вопрос, разумно ли тратить время пользователя на загрузку такого справочника? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 16:33 |
|
||
|
Оптимальность работы с множеством справочников
|
|||
|---|---|---|---|
|
#18+
ОдинПо сути согласен, но у меня эмпирическое правило 4-х раз. Разумеется, вопрос о точном расположении границы каждый решает для себя. ОдинПросто я очень не люблю писать универсально-стандартные решения. С моей точки зрения, правилен следующий критерий: не нужно ставить задачу писать универсальное решение. Оно должно вырастать из практики, из нежелания повторять некоторую работу (и видимого пути автоматизировать это решение раз и надолго). В то же время, разрабатывая прикладной код, нужно иметь нацеленность на поиск кандидатов, на отсутствие тупого повторения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2006, 17:18 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=33751924&tid=1545235]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
177ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 249ms |
| total: | 536ms |

| 0 / 0 |
