Более эффективное отображение очень больших наборов данных - PullRequest
0 голосов
/ 29 января 2019

У меня есть проект логического анализатора, который записывает несколько сотен миллионов 16-битных значений (~ 100-500 миллионов), и мне нужно отображать что угодно, от нескольких сотен выборок до всего захвата, по мере увеличения масштаба пользователя.

Когда вы уменьшаете масштаб, вся система получает огромный удар по производительности, так как она загружает огромный кусок из файла.

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

Могу ли я взять огромный набор данных и эффективно распределить его по частям?

Я думал о потоковой передаче от начала доначало + просмотр размера по горизонтали.Это делает очень прерывистый зум.

Программа использует python, но я открыт для вызова чего-то в c, если оно уже существует.

Ответы [ 2 ]

0 голосов
/ 29 января 2019

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

Для решения проблемы вы можете определить какое-то правило, чтобы вообще перестать отображать фактические данные.Например, если высота цифры становится меньше, скажем, 10 пикселей, вы отображаете какое-то сообщение selected numbers are from rows 200...300, columns 400..500 или какое-либо графическое изменение с угловыми координатами и количеством чисел.

0 голосов
/ 29 января 2019

Ну, я не знаю, действительно ли это вопрос о программировании или дизайне в целом.

Для "масштабирования" проблемы с визуализацией я предлагаю:

  1. Предварительно вычислили/ Кэшированная версия для некоторых уровней масштабирования.В идеале градация должна рассчитываться на основе поведения пользователя.
  2. Когда пользователь увеличивает масштаб, вы одновременно
    • рассчитываете "правильные" данные или загружаете предварительно вычисленные агрегированные данные более глубокого слоя масштабирования и обрезаете ихс помощью вашей рамки просмотра
    • обманывать путем рендеринга данных с низким разрешением из предыдущего слоя или сглаживать их в некотором приближении (но обязательно как-то сообщить пользователю, что данные не завершены)

Помимо этого, подумайте, сможете ли вы оптимизировать способ хранения данных.Деревья могут облегчить вашу жизнь, как для частичного чтения / поиска на диске, так и для хранения агрегированных данных.

...