Я работаю над графическим интерфейсом Qt для визуализации «живых» данных, получаемых через соединение TCP / IP.Проблема в том, что данные поступают довольно быстро (несколько десятков МБ в секунду) - они поступают быстрее, чем я могу их визуализировать, даже если я не делаю какой-либо причудливой визуализации - я просто показываю данные в виде QTableView object.
Как будто этого недостаточно, графический интерфейс также позволяет нажимать кнопку «Замораживание», которая приостанавливает обновление графического интерфейса (но будет продолжать получать данные в фоновом режиме).Как только опция Freeze была отключена, данные, накопленные в фоновом режиме, должны быть визуализированы.
Что мне интересно, так это: поскольку данные поступают так быстро, я не могу удержатьвсе это в памяти.Клиент может даже поддерживать работу графического интерфейса в течение ночи, поэтому накапливаются гигабайты данных.Что такое хорошая система хранения данных для записи этих данных на диск?Он должен иметь следующие свойства:
- Не должно быть слишком много работы, чтобы использовать его в настольной системе
- Он должен быть быстрым при добавлении новых данных в конце.Мне больше не нужно трогать ранее записанные данные, поэтому запись в любое место, но конец не нужен.
- Должна быть возможность произвольного доступа к записям в данных.Это потому, что прокрутка в моем графическом интерфейсе потребует быстрого отображения записей от N до N + 20 (или независимо от высоты моей таблицы) в потоке данных.
Данные, которыевходящие могут быть разделены на записи, но, к сожалению, записи не имеют фиксированного размера.Я бы предпочел не навязывать им максимальный размер (по крайней мере, если нет возможности добиться хорошей производительности без этого).
Может быть, какая-то база данных SQL или что-то вроде CouchDB ?Было бы здорово, если бы кто-то мог поделиться своим опытом с такими сценариями.