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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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


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