powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Справочные данные, QHash, и доступ к ним
25 сообщений из 43, страница 1 из 2
Справочные данные, QHash, и доступ к ним
    #38462992
Wulff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня!
Приложение работает с БД, в базе имеется довольно много справочных данных. Для того что бы повторно не загружать их и уменьшить трафик, при старте загружаю все справиочники в QHash<int, QString> в одном единственном классе. Доступ получаю к ним через ф-ю QString valueById(int id), ну вместо value название справочника.
Так вот вопрос, правельный ли это подход, или лучше копировать QHash в новый объект? Вопрос в скорости работы и обращения к данным.
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38463131
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WulffДля того что бы повторно не загружать их и уменьшить трафик, при старте загружаю все справиочники в QHash<int, QString>справочники у вас не изменяются во времени, штоле? очень странно
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38463159
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WulffДоброго дня!
Приложение работает с БД, в базе имеется довольно много справочных данных. Для того что бы повторно не загружать их и уменьшить трафик, при старте загружаю все справиочники в QHash<int, QString> в одном единственном классе. Доступ получаю к ним через ф-ю QString valueById(int id), ну вместо value название справочника.
Так вот вопрос, правельный ли это подход, или лучше копировать QHash в новый объект? Вопрос в скорости работы и обращения к данным.

Я ничего неправильного не вижу, за исключением необходимости нумеровать справочники.
Гораздо естественнее было бы идентифицировать справочники их именем, а не номером.
Скорость будет та же, а удобства в программировании гораздо больше.

Ну и не понятно, как у вас все справочники грузятся в один QHash и почему у них в значении только одно поле и только строка.
Полей-то много бывает.
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38463163
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychWulffДля того что бы повторно не загружать их и уменьшить трафик, при старте загружаю все справиочники в QHash<int, QString>справочники у вас не изменяются во времени, штоле? очень странно

Надо просто иметь возможность их всегда перечитать. В любой момент. Пользователю.
Ну или самому инвалидировать эти кэши, рассылая сообщения.
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38463319
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у них справочники - append-only то можно их обновлять по факту "промаха".
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38463425
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЕсли у них справочники - append-only то можно их обновлять по факту
"промаха".
Если у них из справочников заполняются списки выбора, то вместо промахов скорее будут
конфликты их пополнения.

PS: По моему опыту, такое кэширование для экономии траффика - бесперспективняк. Проще
сервер БД поместить в локалку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38463480
Wulff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivНу и не понятно, как у вас все справочники грузятся в один QHash и почему у них в значении только одно поле и только строка.
Полей-то много бывает.
Спарвочники конечно же именование, и каждый я гружу в отдельй хеш, может я плохо объянил.
В базе храню последнее обновление каждого справочника, и проверяю по таймеру, и соотв. обновляю при необходимости.
Все эти справочники нужны только лишь в моделя представления, больше нигде. Т.е. в sql запросе я делаю минимальную выборку без join'ов и т.п. а в модели( наследую от QAbstractItemModel) использую как вывод текстовой инфы.
maytonЕсли у них справочники - append-only то можно их обновлять по факту "промаха".
Это как? Можете пояснить что такой "промах"?

Dimitry SibiryakovPS: По моему опыту, такое кэширование для экономии траффика - бесперспективняк. Проще
сервер БД поместить в локалку.
Это хорошо когда это можно сделать, но увы. А почему бесперспективно? Можно более развернутое пояснения вашей точки зрения?
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38463509
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WulffЭто хорошо когда это можно сделать, но увы
Мне не встречались случаи, когда это было сделать невозможно. Только те, когда не хотели.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38463513
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivegorychпропущено...
справочники у вас не изменяются во времени, штоле? очень странно

Надо просто иметь возможность их всегда перечитать. В любой момент. Пользователю.
Ну или самому инвалидировать эти кэши, рассылая сообщения.два вопроса:
1. откуда пользователю знать, что справочник изменился?
2. это реально даёт выигрыш? с учётом сложностей с программированием и поддержкой?

моё имхо совпадает тут с Дмитрием, бесперспективняк. Кажется, что мы видим попытку оптимизации не в том месте, где тормозит.
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38463542
Wulff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
egorychMasterZivпропущено...


Надо просто иметь возможность их всегда перечитать. В любой момент. Пользователю.
Ну или самому инвалидировать эти кэши, рассылая сообщения.два вопроса:
1. откуда пользователю знать, что справочник изменился?
2. это реально даёт выигрыш? с учётом сложностей с программированием и поддержкой?

моё имхо совпадает тут с Дмитрием, бесперспективняк. Кажется, что мы видим попытку оптимизации не в том месте, где тормозит.

1. Пользоваьтелю незачем это знать, я писал выше, обновляется по таймеру, т.е. в базе храниться время последнего обновления справочника(любого) и если необходимо, перечитываем нужный нам справочник, соотв. сложностей здесь особых нет.
2. выигрыш в том, что хеш хранится в одном месте, мне нет необходимости загружать данные по нескорльку раз. Ну вот для примера. Есть два объекта, которым нужны один и тот же справочник. По вашему каждый объект должен загрузить себе этот справочник, и тоже как то его проверять на изменения, верно? Я же, создал объект, всегда предоставляющий актуальные данные по справочникам, и оба объекта обращаются к одному актуальному справочнику. При чем я взял в пример хеш со строковым значением, но в место этого у меня применяются и объекты (контактные данные фирм и т.д.). Т.е. убиваем двух зайцев, сокращаем в разы трафик, а так же довольно удобный интерфейс, в случае большого приложения.
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38463578
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WulffЭто как? Можете пояснить что такой "промах"?

Ну это похоже на работу DNS. Ты полез в свой локальный кеш. Не нашёл записи. Полез в DNS
следующего уровня. e.t.c. до самого верхнего. Но это полезно когда ты лезешь точно зная
новый ключик или знаешь что записи имеют time-to-leave.
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38463610
Wulff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonWulffЭто как? Можете пояснить что такой "промах"?

Ну это похоже на работу DNS. Ты полез в свой локальный кеш. Не нашёл записи. Полез в DNS
следующего уровня. e.t.c. до самого верхнего. Но это полезно когда ты лезешь точно зная
новый ключик или знаешь что записи имеют time-to-leave.
Спасибо, догадывался что это именно так. Т.е. если вдруг в спарвочнике не нахожу нужную запись, то перегружаю справочник.
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38463628
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wulffmaytonпропущено...

Ну это похоже на работу DNS. Ты полез в свой локальный кеш. Не нашёл записи. Полез в DNS
следующего уровня. e.t.c. до самого верхнего. Но это полезно когда ты лезешь точно зная
новый ключик или знаешь что записи имеют time-to-leave.
Спасибо, догадывался что это именно так. Т.е. если вдруг в спарвочнике не нахожу нужную запись, то перегружаю справочник.
Да но для ComboBox например такой вариант непрокатит
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38463641
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovmaytonЕсли у них справочники - append-only то можно их обновлять по факту
"промаха".
Если у них из справочников заполняются списки выбора, то вместо промахов скорее будут
конфликты их пополнения.

PS: По моему опыту, такое кэширование для экономии траффика - бесперспективняк. Проще
сервер БД поместить в локалку.


У меня ровно обратный опыт.
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38463651
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonWulffпропущено...

Спасибо, догадывался что это именно так. Т.е. если вдруг в спарвочнике не нахожу нужную запись, то перегружаю справочник.
Да но для ComboBox например такой вариант непрокатит

Мы делали так: если пользователь не видет нужной записи в справочнике, у него есть специальная кнопка, нажимая которую он обновляет все справочники этой формы.
В общем, вполне адекватно и работает.
Да, кэши у нас без ограничения по размеру -- что достаточно странно, но так уж получилось. Но всё равно после определённого времени работы пользователь набивает в кэш всё, что нужно в его предметной области, и больше сверх того кэш не растёт.
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38463661
Wulff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonДа но для ComboBox например такой вариант непрокатит
Ну это решается довольно просто с QAbstractItemModel, ооочень просто. Я сейчас все данные только через нее делаю, очень удобно и довольно гибко получается.

MasterZiv У меня ровно обратный опыт.
То есть? Поясните пожалуйста. Мне очень важен опыт использования такого подхода, да и вообще как работать со справочниками
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38463671
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WulffMasterZiv У меня ровно обратный опыт.
То есть? Поясните пожалуйста. Мне очень важен опыт использования такого подхода, да и вообще как работать со справочниками

Ну, что тут пояснять? Справочник один раз загружается на локальную машину и там живёт.
Это выгодно. Позволяет не загружать каждый раз этот справочник при откритии каждой формы.
Позволяет также экономить ресурсы сервера БД для выдачи каждому пользователю всех нужных
ему справочников.
Особенно это хорошо, когда справочники достаточно большые, что на самом деле не редкость.

Я не знаю, что ещё рассказывать, если что-то надо -- спрашивай.
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38463679
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivМы делали так: если пользователь не видет нужной записи в справочнике, у него есть специальная кнопка, нажимая которую он обновляет все справочники этой формы.
В общем, вполне адекватно и работает.
Да, кэши у нас без ограничения по размеру -- что достаточно странно, но так уж получилось. Но всё равно после определённого времени работы пользователь набивает в кэш всё, что нужно в его предметной области, и больше сверх того кэш не растёт.
От предметной области зависит. Я-бы сказал. Если мы работаем с курсами валют и точно
знаем что обновление происходит 2 раза в сутки то и клиента можно подстроить под такой
график.
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38463751
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WulffНу вот для примера. Есть два объекта, которым нужны один и тот же справочник. По вашему каждый объект должен загрузить себе этот справочник, и тоже как то его проверять на изменения, верно? что такое объект в данном случае? класс, представляющий бизнес-сущность? Если да, то не верно. Я считаю, что таких объектов вообще быть не должно.
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38463766
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wulffобновляется по таймеру, т.е. в базе храниться время последнего обновления справочника(любого) и если необходимо, перечитываем нужный нам справочник, соотв. сложностей здесь особых нета если в течении данной сессии работы с программой пользователю вообще ни разу не потребовался этот справочник? но мы ему его аккуратно обновляем каждый раз, и по крайней мере один раз при старте загружаем.

Как часто срабатывает таймер, кстати?
гипотетический пример- Вася, заведи мне в справочник нового клиента
- Да я завёл его уже 40 минут назад!
- Пичалька, ещё 20 минут придётся подождать ;))
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38463854
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonОт предметной области зависит.

ЧТО зависит ?
Как раз мой опыт говорит, что от предметной области в этом вопросе ничего НЕ зависит.

Курсы валют -- это не показательный пример, это не справочник.
Валюты -- да. Котировки курсов валют -- да. А сами курсы -- не справочник.
Потом, для работы в первичке они особенно и не нужны. В том смысле, что пользователь явно нигде в форме особенно их выбирать не должен (кроме самой формы корректировки курсов, разумеется).

Да, понять, что является справочником, а что -- нет, порой нетривиально. Это да, такое есть.
Это решает постановщик.
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38463859
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychWulffНу вот для примера. Есть два объекта, которым нужны один и тот же справочник. По вашему каждый объект должен загрузить себе этот справочник, и тоже как то его проверять на изменения, верно? что такое объект в данном случае? класс, представляющий бизнес-сущность? Если да, то не верно. Я считаю, что таких объектов вообще быть не должно.

Вообще говоря, у нас кэш работает на уровне соединения с БД, на уровне сессии. И естественно, для всех форм он общий.
И естественно, он не просто так тупой, а результат вызовов запросов со всеми параметрами. И естественно это всё прозрачно для приложения, оно говорит только, надо ли использовать кэш для данного запроса.
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38464467
Wulff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
egorychWulffНу вот для примера. Есть два объекта, которым нужны один и тот же справочник. По вашему каждый объект должен загрузить себе этот справочник, и тоже как то его проверять на изменения, верно? что такое объект в данном случае? класс, представляющий бизнес-сущность? Если да, то не верно. Я считаю, что таких объектов вообще быть не должно.
Ну почему же? Допустим справочник адресов. Как можно в хеше хранить? Только в виде экземпляров класса, который содержит все поля. 1.Это удобно 2.Быстро, в плане доступа к информации

egorychКак часто срабатывает таймер, кстати?
Зависит от клиента, и от того что за справочник и вероятность обновления его. На практике это от 10 сек. Запрос делаю в отдельном потоке.
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38464494
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wulffegorychпропущено...
что такое объект в данном случае? класс, представляющий бизнес-сущность? Если да, то не верно. Я считаю, что таких объектов вообще быть не должно.
Ну почему же? Допустим справочник адресов. Как можно в хеше хранить? Только в виде экземпляров классаа зачем его хранить? С хранением отлично справляется база данных
...
Рейтинг: 0 / 0
Справочные данные, QHash, и доступ к ним
    #38464505
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WulffНа практике это от 10 сек.
а что тогда экономим?
...
Рейтинг: 0 / 0
25 сообщений из 43, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Справочные данные, QHash, и доступ к ним
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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