Название: Хранение иерархических даных в моделях-наследниках 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 Название: 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 Мб, а какой же выход?
Базы использовать? |