Russian Qt Forum

Qt => Общие вопросы => Тема начата: Karl-Philipp от Июль 24, 2008, 16:38



Название: Хранение иерархических даных в моделях-наследниках QAbstractItemModel
Отправлено: Karl-Philipp от Июль 24, 2008, 16:38
Всем привет!

В примере Simple Tree Model данные хранятся в списках, а в Simple Dom Model cчитываются через QDomDocument. Есть ли еще какие-то варианты хранения иерархических данных в моделях, наследующих QAbstractItemModel?

Как по-Вашему, какой вариант лучше использовать для хранения иерархических данных в моделях наследниках QAbstractItemModel, считываемых из xml документов с количеством строк от 1000 до 1000000?


Название: Re: Хранение иерархических даных в моделях-наследниках QAbstractItemModel
Отправлено: EhTemka от Июль 24, 2008, 18:47
Я использую QStandardItemModel (для отобрвдения QTreeView). Можно использовать QTreeWidget и для хранения и для отображения.
НЕ знаю как насчет 1000000... Можно реализовать подгрузку данных "по надобности". При работе з базой например я реализую такой механизм (для ускорения): Подгружаю данные(делаю запрос и формироване) нижнего уровня иерархии только если пользователь их запросил, то биш нажал на плюсик в дереве. Как в случаи с xml документов не знаю насколько это будет оправдано...


Название: Re: Хранение иерархических даных в моделях-наследниках QAbstractItemModel
Отправлено: spirit от Июль 24, 2008, 18:50
можете глянуть модель используемую в QTreeWidget, но ее нужно допиливать в любом случае.
но в качестве примера она неплохая.


Название: Re: Хранение иерархических даных в моделях-наследниках QAbstractItemModel
Отправлено: Karl-Philipp от Июль 24, 2008, 19:29
Я использую QStandardItemModel (для отобрвдения QTreeView). Можно использовать QTreeWidget и для хранения и для отображения.
НЕ знаю как насчет 1000000... Можно реализовать подгрузку данных "по надобности". При работе з базой например я реализую такой механизм (для ускорения): Подгружаю данные(делаю запрос и формироване) нижнего уровня иерархии только если пользователь их запросил, то биш нажал на плюсик в дереве. Как в случаи с xml документов не знаю насколько это будет оправдано...

Уровней иерархии где-то до 10, а вот для работы нужен будет самый нижний уровень, то есть подгружать придется все данные сразу.

можете глянуть модель используемую в QTreeWidget, но ее нужно допиливать в любом случае.
но в качестве примера она неплохая.

забыл написать, что модель будет устанавливаться в разные вьюхи, поэтому и хочу наследоваться от QAbstractItemModel, а у QTreeWidget своя модель.


Название: Re: Хранение иерархических даных в моделях-наследниках QAbstractItemModel
Отправлено: spirit от Июль 24, 2008, 19:37
она наследуются от QAbstractItemModel.
Код:
class QTreeModel : public QAbstractItemModel
см. <QTDIR>\src\gui\itemviews\qtreewidget_p.h


Название: Re: Хранение иерархических даных в моделях-наследниках QAbstractItemModel
Отправлено: Tonal от Июль 25, 2008, 07:25
Ежели данных действительно много лучше свою модель делать наследуясь от QAbstractItemModel.
Сильно экономичнее будет и по памяти и по скорости.


Название: Re: Хранение иерархических даных в моделях-наследниках QAbstractItemModel
Отправлено: Karl-Philipp от Июль 25, 2008, 10:06
Ежели данных действительно много лучше свою модель делать наследуясь от QAbstractItemModel.
Сильно экономичнее будет и по памяти и по скорости.
В среднем количество элементов в модели должно составлять около 600000 штук. Элементы модели будут только создаваться из данных xml файла. После преобразований данные будут записываться в xml с некоторыми изменениями. Основная работа (манипуляции с элементами) будет проводиться с помощью элементов последнего уровня иерархии, которые представлены списками.

Всем спасибо за обсуждение
Буду наследоваться от QAbstractItemModel :)


Название: simple DOM Model VS simple Tree Model (скорость чтения/записи данных)
Отправлено: Karl-Philipp от Август 29, 2008, 10:23
В Qt есть два примера:
Simple DOM model example & Simple Tree Model Example.

Если данные примеры доработать так, чтобы они считывали и записывали (сохраняли данные) из(в) xml файл, то какой из примеров будет работать (сохранять/читать) быстрее, если в файле около 600000 тегов?

Все элементы xml файла должны считываться (записываться) в(из) модель(и) за один раз.


Название: Re: Хранение иерархических даных в моделях-наследниках QAbstractItemModel
Отправлено: pastor от Август 29, 2008, 14:40
Ежели данных действительно много лучше свою модель делать наследуясь от QAbstractItemModel.
Сильно экономичнее будет и по памяти и по скорости.

+100


Название: Re: Хранение иерархических даных в моделях-наследниках QAbstractItemModel
Отправлено: ритт от Август 29, 2008, 15:03
скорми свой файл обоим примерам, замеряй скорость чтения/записи для каждого и сравни результаты :)
дом будет очень прожорлив к ресурсам. с другой стороны, 600 000 тэгов - это не так и много - нужно тестировать
думаю, в твоём случае лучше использовать стримридер


Название: Re: Хранение иерархических даных в моделях-наследниках QAbstractItemModel
Отправлено: Karl-Philipp от Октябрь 02, 2008, 18:58
Проверил на скорость загрузки примеры Editable Tree Model (с возможностью загружать xml документ) и Simple DOM Model. Первый выигрывает по всем параметрам - время загрузки в модель файла с 1000000 строками тегов составило 25 сек, в DomDocument файл подгружался 1.20 сек, при этом последний забирал в пределах 500000 кБ оперативки :о
Перемещаться по дереву практически без тормозов можно только в первом примере, во втором - почти невозможно - очень сильно тормозит.

Celeron 1.1 512 ОЗУ.

Вместе с тем программа на основе Editable Tree Model отхватила 200000 кб оперативки.
Это нормально?


Название: Re: Хранение иерархических даных в моделях-наследниках QAbstractItemModel
Отправлено: ритт от Октябрь 02, 2008, 19:17
как-то путанно у тебя.
что такое "первый пример" и "второй пример"? сделал бы лучше табличку сравнений вида Dom | XmlRaw => чтение, запись, навигация, память..


Название: Re: Хранение иерархических даных в моделях-н&
Отправлено: Karl-Philipp от Октябрь 02, 2008, 20:07
                              Считывание xml файла (1000000 строк)с помощью

                                    Simple editable model +|     simple DOM model
                                      QXmlStreamReader    |  
скорость считывания(с)                25               |             80
Перемещение по дереву         без тормозов       |   очень тормозит
Потребность в памяти(МБ)            200              |            500 

Выбрал вариант модели на основ Simple editable model + QXmlStreamReader :)

Уточните, пожалуйста, то, что модель гребет 200 Мб для размещения данных, это не многовато?


Название: Re: Хранение иерархических даных в моделях-н&
Отправлено: pastor от Октябрь 02, 2008, 20:22
Уточните, пожалуйста, то, что модель гребет 200000 Мб для размещения данных, это не многовато?

200000 Мб или 200000 Кб?


В любом случае это очень-очень дохрена


Название: Re: Хранение иерархических даных в моделях-н&
Отправлено: Karl-Philipp от Октябрь 02, 2008, 20:27
исправился, там конечно же 200 Мб, а какой же выход?
Базы использовать?