У меня есть класс (в C ++), назовите его Data
, у которого есть тысячи экземпляров (объектов) при запуске кода. У меня есть виджет (в Qt), назовите его DataWidget
, который отображает атрибуты объектов. Чтобы быстро создать виджет, я просто записал атрибуты объекта в файл и заставил виджет проанализировать файл на предмет атрибутов - этот подход работает, но не масштабируется и не хорош.
Чтобы быть более понятным, мои требования:
1 - DataWidget
должен иметь возможность отображать несколько различных Data
атрибутов объекта одновременно
2 - DataWidget
должен отображать тысячи Data
объектов в секунду
3 - DataWidget
должен выполняться вдоль кода, генерирующего новые Data
объекты
4 - каждый Data
объект должен быть постоянно сохранен в файл / базу данных
В настоящее время создается графический интерфейс пользователя и создается DataWidget
, затем выполняется эксперимент и генерируются тысячи объектов Data
(периодически записывая некоторые из них в файл). После запуска эксперимента DataWidget
отображает последний Data
объект, записанный в файл (они записываются в файлы XML).
С моим текущим подходом к файлам я могу удовлетворить (1) , захватив более одного файла после запуска эксперимента. Поскольку эксперимент не привязан к DataWidget
, параллелизма нет, поэтому я не могу выполнить (3) , пока не добавлю сигнал, информирующий DataWidget
о существовании нового файла.
Я не продвинулся в этом подходе по двум причинам:
Во-первых, даже если файлы не сразу записываются на диск, я не могу себе представить, что этот метод является масштабируемым, если I не внедрит систему кэширования - но, похоже, я заново изобрел колесо? Во-вторых, Data
- это оболочка для структуры данных графа, и я использую Graphml (через Boost Graph Library, т.е. write_graphml () ), чтобы записать структуру в файлы XML и прочитать структуру обратно в * Boost read_graphml () требует, чтобы я прочитал файл обратно в Data
объект ... что означает, что экспериментальная часть программы кодирует объект в XML, записывает XML в файл (но надеюсь, в памяти, а не на диск), тогда DataWidget
читает XML из файла и декодирует его в объект!
Мне кажется, что я должен использовать базу данных, которая будет обрабатывать все кэширование и т. Д. Кроме того, похоже, что я должен быть в состоянии пропустить шаг файла / базы данных и передать Data
в DataWidget
в Программа (возможно, передайте ей ссылку на список Data
). Тем не менее, я также хочу сохранить Data
в файл, чтобы шаг в файл / базу данных не был совершенно бессмысленным - я просто неправильно его использую в неподходящее время.
Какой подход лучше, учитывая мои требования?
Существуют ли какие-либо общие ресурсы и / или рекомендации для обработки и отображения данных, подобных этой?