一種快速載入大檔案的方法

2021-06-25 08:32:27 字數 769 閱讀 5966

問題的**是這樣的。

我們的服務有大概20g的索引檔案(大概兩百多個檔案),現在的載入方式是使用mmap(該命令之後會有專門的一篇文章介紹)。使用這個命令的好處就是初始化速度非常快,但是也帶來了一些問題。比如第一次查詢某個詞的時候速度就會特別慢,這當然和mmap只建對映卻不拷貝有關。為了解決該問題,領導讓我思考一下如何能快速的把20g的檔案載入進來。

我是這麼考慮的。首先乙個乙個檔案讀取是最簡單的方案。毫無疑問,這種方案的瓶頸在於io。如果要減小io,自然想到去壓縮,但是解壓過程是個費cpu的操作,那麼是否可以並行呢?有點眉目了:0)

該方案的架構如下圖所示:

選擇的壓縮方式是xz,其原因是xz的壓縮率相對於gzip更高,而且解壓速度和gzip相當(xz的壓縮速度確實慢…)。

**寫出來了,兩種方案的效果如何呢?

1.  首先壓縮率為1/6(不同格式應有不同);

2.  方案二的速度在8執行緒的情況下較方案一提高了66%;

3.  但是如果重複載入,方案一的速度會很快,因為大部分已經在記憶體中了,作業系統並沒有釋放它們

4.  如果還有別的服務在該機器上,那麼方案一的速度會很慢,因為不再是順序讀io了

回到原先的問題,首先不管哪個方案都可以結果第一次查詢慢的問題。方案一的問題在於第一次啟動的時候較慢,同時增加cpu也不能夠改善效能。方案二需要額外做不少工作(如需要生成壓縮檔案,**中加入解壓的邏輯)。我們初步決定使用方案二。

RMI大檔案傳輸的一種思路

public inte ce uploader uploadservice是rmi提供的服務,uploader是服務端例項化後傳給客戶端使用的。介面都是在服務端實現的。然後就是接受檔案的服務端fileserver public class fileserver public string reque...

一種快速求組合數的方法

介紹一種快速求 dbinom 的方法。其實就是根據定義來做的做法 我們知道 dbinom mod 1e9 7 frac mod 1e9 7 為方便表達,我們設 x n times n 1 times dots times n m 1 即右邊的分子 y 1 times 2 times dots tim...

檔案操作 linux快速建立大檔案的方法

還記得去年在準備某公司的筆試時遇到了一道題目,題目中要求 快速建立1g的大檔案 後面的要求這裡暫且就省略了。如何快速建立指定大小的大檔案呢?可能有很多種辦法,這裡提供兩種辦法。1 利用dd命令操作建立檔案 結合c語言,可以使用system函式呼叫shell命令 char shell dd if de...