Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
Доброго дня! Приложение работает с БД, в базе имеется довольно много справочных данных. Для того что бы повторно не загружать их и уменьшить трафик, при старте загружаю все справиочники в QHash<int, QString> в одном единственном классе. Доступ получаю к ним через ф-ю QString valueById(int id), ну вместо value название справочника. Так вот вопрос, правельный ли это подход, или лучше копировать QHash в новый объект? Вопрос в скорости работы и обращения к данным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 09:29 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
WulffДля того что бы повторно не загружать их и уменьшить трафик, при старте загружаю все справиочники в QHash<int, QString>справочники у вас не изменяются во времени, штоле? очень странно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 11:19 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
WulffДоброго дня! Приложение работает с БД, в базе имеется довольно много справочных данных. Для того что бы повторно не загружать их и уменьшить трафик, при старте загружаю все справиочники в QHash<int, QString> в одном единственном классе. Доступ получаю к ним через ф-ю QString valueById(int id), ну вместо value название справочника. Так вот вопрос, правельный ли это подход, или лучше копировать QHash в новый объект? Вопрос в скорости работы и обращения к данным. Я ничего неправильного не вижу, за исключением необходимости нумеровать справочники. Гораздо естественнее было бы идентифицировать справочники их именем, а не номером. Скорость будет та же, а удобства в программировании гораздо больше. Ну и не понятно, как у вас все справочники грузятся в один QHash и почему у них в значении только одно поле и только строка. Полей-то много бывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 11:31 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
egorychWulffДля того что бы повторно не загружать их и уменьшить трафик, при старте загружаю все справиочники в QHash<int, QString>справочники у вас не изменяются во времени, штоле? очень странно Надо просто иметь возможность их всегда перечитать. В любой момент. Пользователю. Ну или самому инвалидировать эти кэши, рассылая сообщения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 11:31 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
Если у них справочники - append-only то можно их обновлять по факту "промаха". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 13:04 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
maytonЕсли у них справочники - append-only то можно их обновлять по факту "промаха". Если у них из справочников заполняются списки выбора, то вместо промахов скорее будут конфликты их пополнения. PS: По моему опыту, такое кэширование для экономии траффика - бесперспективняк. Проще сервер БД поместить в локалку. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 14:31 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
MasterZivНу и не понятно, как у вас все справочники грузятся в один QHash и почему у них в значении только одно поле и только строка. Полей-то много бывает. Спарвочники конечно же именование, и каждый я гружу в отдельй хеш, может я плохо объянил. В базе храню последнее обновление каждого справочника, и проверяю по таймеру, и соотв. обновляю при необходимости. Все эти справочники нужны только лишь в моделя представления, больше нигде. Т.е. в sql запросе я делаю минимальную выборку без join'ов и т.п. а в модели( наследую от QAbstractItemModel) использую как вывод текстовой инфы. maytonЕсли у них справочники - append-only то можно их обновлять по факту "промаха". Это как? Можете пояснить что такой "промах"? Dimitry SibiryakovPS: По моему опыту, такое кэширование для экономии траффика - бесперспективняк. Проще сервер БД поместить в локалку. Это хорошо когда это можно сделать, но увы. А почему бесперспективно? Можно более развернутое пояснения вашей точки зрения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 14:59 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
WulffЭто хорошо когда это можно сделать, но увы Мне не встречались случаи, когда это было сделать невозможно. Только те, когда не хотели. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 15:15 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
MasterZivegorychпропущено... справочники у вас не изменяются во времени, штоле? очень странно Надо просто иметь возможность их всегда перечитать. В любой момент. Пользователю. Ну или самому инвалидировать эти кэши, рассылая сообщения.два вопроса: 1. откуда пользователю знать, что справочник изменился? 2. это реально даёт выигрыш? с учётом сложностей с программированием и поддержкой? моё имхо совпадает тут с Дмитрием, бесперспективняк. Кажется, что мы видим попытку оптимизации не в том месте, где тормозит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 15:18 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
egorychMasterZivпропущено... Надо просто иметь возможность их всегда перечитать. В любой момент. Пользователю. Ну или самому инвалидировать эти кэши, рассылая сообщения.два вопроса: 1. откуда пользователю знать, что справочник изменился? 2. это реально даёт выигрыш? с учётом сложностей с программированием и поддержкой? моё имхо совпадает тут с Дмитрием, бесперспективняк. Кажется, что мы видим попытку оптимизации не в том месте, где тормозит. 1. Пользоваьтелю незачем это знать, я писал выше, обновляется по таймеру, т.е. в базе храниться время последнего обновления справочника(любого) и если необходимо, перечитываем нужный нам справочник, соотв. сложностей здесь особых нет. 2. выигрыш в том, что хеш хранится в одном месте, мне нет необходимости загружать данные по нескорльку раз. Ну вот для примера. Есть два объекта, которым нужны один и тот же справочник. По вашему каждый объект должен загрузить себе этот справочник, и тоже как то его проверять на изменения, верно? Я же, создал объект, всегда предоставляющий актуальные данные по справочникам, и оба объекта обращаются к одному актуальному справочнику. При чем я взял в пример хеш со строковым значением, но в место этого у меня применяются и объекты (контактные данные фирм и т.д.). Т.е. убиваем двух зайцев, сокращаем в разы трафик, а так же довольно удобный интерфейс, в случае большого приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 15:30 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
WulffЭто как? Можете пояснить что такой "промах"? Ну это похоже на работу DNS. Ты полез в свой локальный кеш. Не нашёл записи. Полез в DNS следующего уровня. e.t.c. до самого верхнего. Но это полезно когда ты лезешь точно зная новый ключик или знаешь что записи имеют time-to-leave. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 15:42 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
maytonWulffЭто как? Можете пояснить что такой "промах"? Ну это похоже на работу DNS. Ты полез в свой локальный кеш. Не нашёл записи. Полез в DNS следующего уровня. e.t.c. до самого верхнего. Но это полезно когда ты лезешь точно зная новый ключик или знаешь что записи имеют time-to-leave. Спасибо, догадывался что это именно так. Т.е. если вдруг в спарвочнике не нахожу нужную запись, то перегружаю справочник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 15:51 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
Wulffmaytonпропущено... Ну это похоже на работу DNS. Ты полез в свой локальный кеш. Не нашёл записи. Полез в DNS следующего уровня. e.t.c. до самого верхнего. Но это полезно когда ты лезешь точно зная новый ключик или знаешь что записи имеют time-to-leave. Спасибо, догадывался что это именно так. Т.е. если вдруг в спарвочнике не нахожу нужную запись, то перегружаю справочник. Да но для ComboBox например такой вариант непрокатит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 15:59 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovmaytonЕсли у них справочники - append-only то можно их обновлять по факту "промаха". Если у них из справочников заполняются списки выбора, то вместо промахов скорее будут конфликты их пополнения. PS: По моему опыту, такое кэширование для экономии траффика - бесперспективняк. Проще сервер БД поместить в локалку. У меня ровно обратный опыт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 16:06 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
maytonWulffпропущено... Спасибо, догадывался что это именно так. Т.е. если вдруг в спарвочнике не нахожу нужную запись, то перегружаю справочник. Да но для ComboBox например такой вариант непрокатит Мы делали так: если пользователь не видет нужной записи в справочнике, у него есть специальная кнопка, нажимая которую он обновляет все справочники этой формы. В общем, вполне адекватно и работает. Да, кэши у нас без ограничения по размеру -- что достаточно странно, но так уж получилось. Но всё равно после определённого времени работы пользователь набивает в кэш всё, что нужно в его предметной области, и больше сверх того кэш не растёт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 16:08 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
maytonДа но для ComboBox например такой вариант непрокатит Ну это решается довольно просто с QAbstractItemModel, ооочень просто. Я сейчас все данные только через нее делаю, очень удобно и довольно гибко получается. MasterZiv У меня ровно обратный опыт. То есть? Поясните пожалуйста. Мне очень важен опыт использования такого подхода, да и вообще как работать со справочниками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 16:12 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
WulffMasterZiv У меня ровно обратный опыт. То есть? Поясните пожалуйста. Мне очень важен опыт использования такого подхода, да и вообще как работать со справочниками Ну, что тут пояснять? Справочник один раз загружается на локальную машину и там живёт. Это выгодно. Позволяет не загружать каждый раз этот справочник при откритии каждой формы. Позволяет также экономить ресурсы сервера БД для выдачи каждому пользователю всех нужных ему справочников. Особенно это хорошо, когда справочники достаточно большые, что на самом деле не редкость. Я не знаю, что ещё рассказывать, если что-то надо -- спрашивай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 16:18 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
MasterZivМы делали так: если пользователь не видет нужной записи в справочнике, у него есть специальная кнопка, нажимая которую он обновляет все справочники этой формы. В общем, вполне адекватно и работает. Да, кэши у нас без ограничения по размеру -- что достаточно странно, но так уж получилось. Но всё равно после определённого времени работы пользователь набивает в кэш всё, что нужно в его предметной области, и больше сверх того кэш не растёт. От предметной области зависит. Я-бы сказал. Если мы работаем с курсами валют и точно знаем что обновление происходит 2 раза в сутки то и клиента можно подстроить под такой график. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 16:23 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
WulffНу вот для примера. Есть два объекта, которым нужны один и тот же справочник. По вашему каждый объект должен загрузить себе этот справочник, и тоже как то его проверять на изменения, верно? что такое объект в данном случае? класс, представляющий бизнес-сущность? Если да, то не верно. Я считаю, что таких объектов вообще быть не должно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 17:07 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
Wulffобновляется по таймеру, т.е. в базе храниться время последнего обновления справочника(любого) и если необходимо, перечитываем нужный нам справочник, соотв. сложностей здесь особых нета если в течении данной сессии работы с программой пользователю вообще ни разу не потребовался этот справочник? но мы ему его аккуратно обновляем каждый раз, и по крайней мере один раз при старте загружаем. Как часто срабатывает таймер, кстати? гипотетический пример- Вася, заведи мне в справочник нового клиента - Да я завёл его уже 40 минут назад! - Пичалька, ещё 20 минут придётся подождать ;)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 17:14 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
maytonОт предметной области зависит. ЧТО зависит ? Как раз мой опыт говорит, что от предметной области в этом вопросе ничего НЕ зависит. Курсы валют -- это не показательный пример, это не справочник. Валюты -- да. Котировки курсов валют -- да. А сами курсы -- не справочник. Потом, для работы в первичке они особенно и не нужны. В том смысле, что пользователь явно нигде в форме особенно их выбирать не должен (кроме самой формы корректировки курсов, разумеется). Да, понять, что является справочником, а что -- нет, порой нетривиально. Это да, такое есть. Это решает постановщик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 18:00 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
egorychWulffНу вот для примера. Есть два объекта, которым нужны один и тот же справочник. По вашему каждый объект должен загрузить себе этот справочник, и тоже как то его проверять на изменения, верно? что такое объект в данном случае? класс, представляющий бизнес-сущность? Если да, то не верно. Я считаю, что таких объектов вообще быть не должно. Вообще говоря, у нас кэш работает на уровне соединения с БД, на уровне сессии. И естественно, для всех форм он общий. И естественно, он не просто так тупой, а результат вызовов запросов со всеми параметрами. И естественно это всё прозрачно для приложения, оно говорит только, надо ли использовать кэш для данного запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2013, 18:02 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
egorychWulffНу вот для примера. Есть два объекта, которым нужны один и тот же справочник. По вашему каждый объект должен загрузить себе этот справочник, и тоже как то его проверять на изменения, верно? что такое объект в данном случае? класс, представляющий бизнес-сущность? Если да, то не верно. Я считаю, что таких объектов вообще быть не должно. Ну почему же? Допустим справочник адресов. Как можно в хеше хранить? Только в виде экземпляров класса, который содержит все поля. 1.Это удобно 2.Быстро, в плане доступа к информации egorychКак часто срабатывает таймер, кстати? Зависит от клиента, и от того что за справочник и вероятность обновления его. На практике это от 10 сек. Запрос делаю в отдельном потоке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2013, 09:05 |
|
||
|
Справочные данные, QHash, и доступ к ним
|
|||
|---|---|---|---|
|
#18+
Wulffegorychпропущено... что такое объект в данном случае? класс, представляющий бизнес-сущность? Если да, то не верно. Я считаю, что таких объектов вообще быть не должно. Ну почему же? Допустим справочник адресов. Как можно в хеше хранить? Только в виде экземпляров классаа зачем его хранить? С хранением отлично справляется база данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2013, 09:42 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38463131&tid=2019851]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
167ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 284ms |

| 0 / 0 |
