доступ к данным из файлов на диске * в режиме реального времени * - PullRequest
1 голос
/ 10 февраля 2012

Мне нужно решить следующую проблему.Мне нужно построить средство просмотра графиков для просмотра массивного набора данных.

У нас есть несколько файлов в определенном формате, которые содержат миллионы записей, представляющих результаты эксперимента.Каждая запись представляет точку выборки на большом графике графика.Самый большой файл, который я видел, содержит 43,7 миллиона записей.

Средний файл содержит 10 миллионов записей.Каждая запись небольшая (76 байт + дополнительные 12 байт каждая).Полные данные не могут быть загружены в основную память, так как они слишком велики.Я создал новый формат файла, который сжимает данные до 48 байт на запись и упорядочивает данные по частям, которые связаны друг с другом.Я хочу «просмотреть» данные, отображая записи в 2D / 3D графике.Поскольку данные очень плотные, я хотел бы постепенно увеличивать уровень детализации, загружая больше данных и удаляя данные, которые не отображаются в представлении, из основной памяти.

Я также хотел бы получить доступ к группе связанных записей в режиме реального времени и предварительно загрузить подобные записи, чтобы свести время загрузки к минимуму.Это даст пользователю плавный контроль над просмотром данных, а не опыт, подобный просмотру видео на YouTube с очень медленным интернет-соединением.пользователь не может случайным образом и должен использовать элементы управления для навигации, и я хотел бы использовать эту информацию для загрузки соответствующих записей в основную память.

Данные должны постепенно загружаться с диска в зависимости от того, чтов данный момент в основной памяти.Записи в основной памяти, которые не требуются в текущем контексте, могут быть удалены и, если требуется, повторно загружены.

  1. Как получить доступ к данным с диска на высоких скоростях на основе некоторого хеш-номера

  2. Как мне управлять основной памятью, если данные для просмотра в текущем контексте слишком велики.Если ваш ответ - уровень детализации, то как мне построить его для большого набора данных, и должны ли эти данные быть частью файла?

Я работал над этим последниедве недели, и я, кажется, застрял из-за скорости ввода-вывода.

Я работаю на родном C ++ и не могу использовать работу под GPL.Если вам нужна дополнительная информация, дайте мне знать.

Баран

Ответы [ 2 ]

1 голос
/ 10 февраля 2012

В большинстве современных файловых систем (Linux, Unixes, Windows) вы можете отобразить файл в память.

Это означает, что вы можете получить доступ к содержимому файла, как если бы он был полностью в памяти (например, вы можете использовать data [i ++], strchr (data, ..) и т. Д.), И именно операционная система выполняет сопоставление между используемая память и файл. Если вы хотите прочитать некоторые данные, которых еще нет в памяти, o / s извлечет их из файла. Вы должны прочитать ответ на этот вопрос: Mmap () весь большой файл

0 голосов
/ 10 февраля 2012

Я думаю, что вы ищете организацию, аналогичную той, которая используется для хранения геометрии уровней в играх, просто вам, возможно, (в зависимости от того, как работает ваша программа и какие данные вам нужно показать) требуется только одно измерение.См. Quadtree и аналогичные методы (в конце этой статьи).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...