Как использовать память/производительность при обработке большого набора данных временных рядов?
Размер: ~ 3,2 г
Строки: ~ 54 миллиона
Первые несколько строк набора данных
{:ts 20200601040025269 :bid 107.526000 :ask 107.529000}
{:ts 20200601040025370 :bid 107.525000 :ask 107.529000}
{:ts 20200601040026421 :bid 107.525000 :ask 107.528000}
{:ts 20200601040026724 :bid 107.524000 :ask 107.528000}
{:ts 20200601040027424 :bid 107.524000 :ask 107.528000}
{:ts 20200601040033535 :bid 107.524000 :ask 107.527000}
{:ts 20200601040034230 :bid 107.523000 :ask 107.526000}
Вспомогательные функции
(defn lines [n filename]
(with-open [rdr (io/reader filename)]
(doall (take n (line-seq rdr)))))
(def dataset (into [] (lines 2000 "./data/rawdata.map")))
Для лучшей производительности я должен как можно больше извлекать данные в память. Однако в моем ноутбуке всего 16 ГБ, когда я загружаю больше данных в память, ЦП / память используются почти на 95%.
- Могу ли я лучше управлять памятью с большим набором данных в Clojure?
- Могу ли я зарезервировать буфер памяти для хранения набора данных?
- Потому что это данные временных рядов в небольшой среде памяти. Когда первый пакет данных обработан, следующий пакет может быть получен с помощью line-seq.
- Подскажите, пожалуйста, какая структура данных используется для реализации этой функции?
Пожалуйста, не стесняйтесь комментировать.
Спасибо
line-seq
). Кроме того, вам нужно будет добавить дополнительные сведения о предполагаемой обработке данных. - person Alan Thompson   schedule 04.05.2021