最近碰上了一個需求,要做一個桌面程序,功能是將一個文件格式解析成json,然後在圖表上展示這個數據,但是這個文件可能有GB單位的大小,解析要防止爆內存,還有圖形也要防止崩潰。

文件格式解析倒反而不是什麼難點,主要是文件大小的問題以及格式,json是一種樹狀的類型,每個節點和上下文都是有關聯的,如果全放內存中非常容易爆內存 ,但是這個數據結構的特性導致很難將已經解析好的一部分數據直接先持久化,不然存取是一個問題,所以持久化肯定需要一些媒介。

圖形的問題並不是什麼難題,渲染太多數據確實會導致崩潰,這個就需要做好圖形的懶加載部分。

這樣答案就已經很明顯了,我採用的方法是使用一個嵌入式數據庫來讀寫解析,將每個json節點的關係都放入數據庫中。

網絡數據庫就沒必要了,很容易會成為IO的瓶頸。

不過這樣做也是有代價的,解析速度基本是由你的IO速度決定。

我最後對比了內存解析以及數據庫解析:

內存解析比數據庫解析快10倍,但是內存使用量是數據庫解析的5倍,這還是解析一個只有50MB文件時的數據。