在处理大量时间序列数据时如何利用内存/性能?
尺寸:~3.2G
行数:~5400 万
数据集的前几行
{: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")))
为了获得最佳性能,我应该尽可能多地将数据检索到内存中。但是,我的笔记本只有 16GB,当我将更多数据检索到内存中时,CPU/内存的利用率几乎达到 95%。
- 我可以在 Clojure 中使用大型数据集进行更好的内存管理吗?
- 我可以保留一个内存缓冲区来存储数据集吗?
- 因为这是小内存环境下的时间序列数据。处理完第一批数据后,可以通过 line-seq 检索下一批数据。
- 请建议使用什么数据结构来实现此功能?
请随意发表评论。
谢谢