Russian Qt Forum
Ноябрь 24, 2024, 02:50
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Model-View (MV)
>
Модель и куча данных
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Модель и куча данных (Прочитано 5678 раз)
Jo
Гость
Модель и куча данных
«
:
Декабрь 28, 2010, 18:10 »
Кратко излагаю суть проблемы.
Имеется источник данных, который дает 100 000 строк в день.
Строки непрерывно сохраняются в базу SQLite.
Задача — дать пользователю возможность просмотра как истории данных, так и изменений данных в реальном времени.
Все это хочется реализовать в рамках концепции модель–представление средствами QT на С++.
Для работы с SQLite используется собственная обёртка.
Как это лучше сделать?
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Модель и куча данных
«
Ответ #1 :
Декабрь 28, 2010, 18:17 »
Читай про QAbstractItemModel в ассистенте.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Jo
Гость
Re: Модель и куча данных
«
Ответ #2 :
Декабрь 28, 2010, 18:41 »
Мне просто не совсем понятна общая концепция для работы с базой.
А конкретнее реализация метода data модели.
Вьюха как я понимаю дергает этот метод модели каждый раз и (для каждой ячейки?) когда ей надо отобразить данные.
Т.е. надо каждый раз делать запрос к базе?
«
Последнее редактирование: Декабрь 28, 2010, 18:43 от Jo
»
Записан
UVV
Гость
Re: Модель и куча данных
«
Ответ #3 :
Декабрь 28, 2010, 19:51 »
Цитата: Jo от Декабрь 28, 2010, 18:41
Т.е. надо каждый раз делать запрос к базе?
Кэшировать можешь, я думаю
Записан
crossly
Гость
Re: Модель и куча данных
«
Ответ #4 :
Декабрь 28, 2010, 20:51 »
по сути модель это связующее звено между источником данных и представлением... источником данных может быть что угодно(массив, sql запрос, просто текстовый файл и т.д.)... к примеру если у вас в качестве источника данных используется массив. представление спрашивает у модели данных для определенного индекса посредством вызова метода data... модель берет данные из массива по этому индексу и возвращает представлению... в случае с sql-запросом примерно то же самое, в простейшем случае
Код:
query.seek(index.row());
return query.value(index.column());
В вашем случае есть несколько вариантов ... к примеру писать данные в базу... затем оповещать модель от том что данные в базе изменились и ей надо повторно выполнить селект (либо делать селект просто по таймеру с определенным интервалом)... но я бы наверное пошел другим путем... отдавать данные непосредственно в модель... там их кэшировать и с определенным интервалом сбрасывать кэш на диск... в данном случае модель всегда будет знать о том что появились данные и не надо будет ее об этом информировать.... и + не нужно будет делать 100500 запросов к базе...
Записан
Jo
Гость
Re: Модель и куча данных
«
Ответ #5 :
Декабрь 28, 2010, 22:24 »
Так и думал сделать, но не понял вот чего: очищать ли кэш, после сброса данных в базу? Ведь если я его почищу то модель уже не будет знать о данных. Я правильно понял?
Вообще думал как то сделать постраничный вывод, юзеру все ровно все данные целиком не нужны. Вот думаю как это реализовать наилучшим образом.
Хотелось бы так: есть 5000 000 строк + все время сыпятся новые.
Если пользователь находится на самой первой странице (условно она будет содержать самые новые данные), то данные должны как бы убегать от него переползая на следующие страницы. Но если пользователь отмотал несколько страниц назад, то на данной странице данные уже не должны смещаться..
Простой пример: Есть табла, в которой много записей и скрол рядом, если пользователь установил скрол на последний элемент, то вьюха должна автоскролить, но если юзер отмотал скрол вверх там уже автоскроллинг отключается.
Как то так...
Праильно вообще мыслю или нет?
Записан
alexman
Гость
Re: Модель и куча данных
«
Ответ #6 :
Декабрь 28, 2010, 23:33 »
Цитата: crossly от Декабрь 28, 2010, 20:51
но я бы наверное пошел другим путем... отдавать данные непосредственно в модель... там их кэшировать и с определенным интервалом сбрасывать кэш на диск... в данном случае модель всегда будет знать о том что появились данные и не надо будет ее об этом информировать.... и + не нужно будет делать 100500 запросов к базе...
Также вскоре надо будет реализовывать что-то подобное. Понятно, что если данных много и загружать их в оперативку, то это плохо кончится. Способ с загрузкой только тех данных, что нужны в данный момент времени хорош, но что делать если требуется еще и сортировать данные по каким либо критериям. Можно конечно строить индексы... Может кто-нить уже делал что-то подобное в связке с БД? Поделитесь опытом?
Записан
crossly
Гость
Re: Модель и куча данных
«
Ответ #7 :
Декабрь 29, 2010, 00:47 »
Цитировать
Ведь если я его почищу то модель уже не будет знать о данных. Я правильно понял?
после сброса кэш чистить и делать селект
Цитировать
но что делать если требуется еще и сортировать данные по каким либо критериям.
сортировать лучше средствами СУБД...
Записан
alexman
Гость
Re: Модель и куча данных
«
Ответ #8 :
Декабрь 29, 2010, 07:35 »
Цитата: crossly от Декабрь 29, 2010, 00:47
сортировать лучше средствами СУБД...
есть один недостаток: если сортировка займет много времени, то нет возможности показать никакого прогресса. или можно как-то выкрутится?
Записан
Jo
Гость
Re: Модель и куча данных
«
Ответ #9 :
Декабрь 29, 2010, 11:01 »
Вообще как я вижу, путей тут не сильно много. Рисовать либо из базы либо из кэша.
Тут в догонку у меня вопрос по QTableView правильно ли я понимаю, что Вьюха вызывает метод data модели только для тех ячеек которые надо перерисовать?
И еще, хранит ли въюха полученные значения от модели, или только рисует?
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 5876
Жаждущий знаний
Re: Модель и куча данных
«
Ответ #10 :
Декабрь 29, 2010, 11:05 »
Цитата: Jo от Декабрь 29, 2010, 11:01
Вообще как я вижу, путей тут не сильно много. Рисовать либо из базы либо из кэша.
Лучше все таки немного кешировать. Но ограничить кэш - хранить только n записей.
Цитата: Jo от Декабрь 29, 2010, 11:01
Тут в догонку у меня вопрос по QTableView правильно ли я понимаю, что Вьюха вызывает метод data модели только для тех ячеек которые надо перерисовать?
Да
Цитата: Jo от Декабрь 29, 2010, 11:01
И еще, хранит ли въюха полученные значения от модели, или только рисует?
Вьюха ничего не хранит.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...