色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

內存比較小的時候碰到大量數據應該如何解決

Wildesbeast ? 來源:搜狐新聞 ? 作者:Hadoop技術博文 ? 2019-12-15 12:20 ? 次閱讀

當你寫了一個處理數據的軟件,它可能在小樣本文件上運行地很好,但一旦加載大量真實數據后,這個軟件就會崩潰。

問題在于你沒有足夠的內存——如果你有 16GB 的 RAM ,你就無法一次載入 100GB 大小的文件。載入這么大的文件時,操作系統在某個時刻就會耗盡內存,不能分配存儲單元,你的程序也就會崩潰。

所以,你該怎樣防止這類情況發生?你可以啟動一個大數據集群——你所需要做的是:

搞到一個計算機集群。

花一周時間搭建這個集群。

大部分情況下,你需要學習一套全新的 API,重寫你所有的代碼。

這個代價可能很昂貴,會令人沮喪;幸運的是,大部分情況下,我們不必這樣做。

你需要一個簡單而容易的解決方案:在單機上處理你的數據,最小化環境搭建開銷,盡可能利用你正在使用的代碼庫。實際上,大部分情況你都可以做到這樣,只要使用一些方法即可,有時候這些方法被稱為“核外計算”(out-of-core computation)。

本文將介紹如下內容:

你究竟為什么需要 RAM。

處理無法放入內存的數據最簡單的方法:花些錢。

處理大量數據的三種基本軟件方法:壓縮、分塊、索引

之后的文章將會展示如何把這些方法應用到諸如 NumPy 和 Pandas 這樣的庫中。

1你究竟為什么需要 RAM?

在我們開始解釋解決方案前,我們要弄清楚該問題是如何產生的。我們的計算機內存(RAM)能讓你讀寫數據,但是你的硬盤也可以讀寫數據——那為什么計算機還需要 RAM 呢?硬盤比 RAM 更便宜,所以它通常大到能夠容納下你的所有數據,那為什么你的代碼不能直接從硬盤讀寫數據呢?

理論上講,這也行得通的。但是,即使是最現代化且速度很快的 SSD 硬盤也比 RAM 慢太多:

從 SSD 上讀取數據: 大約 1.6 萬納秒

從 RAM 上讀取數據: 大于 100 納秒

如果你想要實現快速計算,數據就只能放在 RAM 中,否則你的代碼運行時就會慢上 150 倍。

2資金方面的解決方案:購買更多的 RAM

沒有足夠 RAM 時的最簡單解決方案就是花錢來解決。你要么購買一臺計算機,或者租一臺云端的虛擬機(VM:Virtual Machine,這會比大多數筆記本電腦貴得多)。2019 年 11 月,我稍微調研了一下,在價格方面做了一些比較,發現你可以這樣:

購買 一臺 Thinkpad M720 Tower,它有 6 個核和 64GB RAM,價格是 1074 美金。

租用 一臺云端的 VM,它有 64 個核和 432GB RAM,價格是每小時 3.62 美金。

這只是我稍微調研后發現的數字,再繼續調研下去,你會發現更好的方案。

如果花錢購買硬件可以把你的數據讀入 RAM,這通常就會是一個最經濟的解決方案:畢竟你的時間相當寶貴。但是,有時候,這還不夠解決這個問題。

例如,如果你要運行許多數據處理任務,在一段時期內,云計算可能是一個自然能想到的解決方案,但也是一個昂貴的解決方案。曾經在一個工作中,我的軟件項目需要的計算開銷幾乎快用完了我們產品所有的預期收入,包括支付我薪水所需的至關重要的那部分收入。

如果購買 / 租用更多的 RAM 不足以滿足需求或者根本行不通時,下一步就應該考慮如何通過修改軟件來減少內存使用了。

3技巧 #1:壓縮

壓縮意味著用一種不同的表達形式表示你的數據,這種形式能占用更少內存。有兩種方式來壓縮:

無損壓縮: 存儲的數據包含的信息和原始數據包含的信息完全相同。

有損壓縮: 存儲的數據丟失了一些原始數據里的細節信息,但是這種信息丟失理想情況下不會對計算結果造成什么影響。

我想說明的是,我不是在談論使用 ZIP 或者 gzip 工具來壓縮文件,因為這些工具通常是對硬盤上的文件進行壓縮的。為了處理 ZIP 壓縮過的文件,你通常需要把這個文件載入內存中再進行解壓縮為原始文件大小,所以這其實對內存節省沒有什么幫助。

你需要的是內存中的數據壓縮表示形式。

例如,比如說你的數據有兩個值,一共也只會有兩個值:“AVAILABLE”(代表可能取到的值)和“UNAVAILABLE”(代表不可能取到的值)。我們可以不必將其存為 10 個或更多字節的字符串,你可以將其存為一個布爾值,用 True 或者 False 表示,這樣你就可以只用 1 個字節來表示了。你甚至可以繼續壓縮至 1 位來表示布爾值,這樣就繼續壓縮到了 1 個字節時的 1/8 大小。

4技巧 #2:分塊,每次只加載所有數據里的某一塊

當你需要處理所有數據,而又無需把所有數據同時載入內存時,分塊是很有用的。你可以把數據按塊載入內存,每次計算一塊的數據(或者正如我們要在今后一篇文章里想討論的,可以多塊并行處理)。

例如,比如說,你想搜索一本書里的最長單詞。你可以一次性將所有數據載入內存:

largest_word = “” for word in book.get_text.split: if len(word) 》 len(largest_word):largest_word = word

但是在我們的例子中,這本書太大而不能完全載入內存,這時候你就可以一頁一頁地載入這本書。

largest_word = “” for page in book.iterpages: for word in page.get_text.split: if len(word) 》 len(largest_word): largest_word = word

這樣你使用的內存就大大減少了,因為你一次只需要把這本書的一頁載入內存,而最后得到的結果仍然是正確的。

5技巧 #3:當你需要數據的一個子集時,索引會很有用

當你需要數據的一個子集時,索引會很有用,使用索引你可以在不同時刻加載數據的不同子集。

你也可以用分塊解決這個問題:每次加載所有的數據,過濾掉你不想要的數據。但這會很慢,因為你加載了很多不相關的數據。

如果你只需要部分數據,不要使用分塊,最好使用索引,它可以告訴你到哪里能找出你關心的那部分數據。

想象一下,你只想閱讀書本中關于土豚的章節。如果你運用分塊技術,你得載入整本書,一頁一頁的載入,每頁地搜尋土豚——但這要花很長時間才能完成。

或者說,你可以直接閱讀這本書的末尾部分,也就是書本的索引部分,然后找到“土豚”的索引項。它可能會告訴你在第 7、19 頁以及 120-123 頁可以讀到相關內容。所以,現在你可以只讀那幾頁,這樣就快多了。

這樣很有效,因為索引比整本書占用的空間要小很多,所以把索引載入內存找出相關內容所在就會更容易。

6最簡單的索引技巧

最簡單也最常用的實現索引的方法就是在目錄里給文件恰當命名:

mydata/ 2019-Jan.csv 2019-Feb.csv 2019-Mar.csv 2019-Apr.csv 。..

如果你想要 2019 年 3 月數據,你就只需要加載 2019-Mar.csv 這個文件——而不用加載 2 月、7 月或者其他任何月份的數據。

7下一步:應用這些技巧

RAM 不夠用,最簡單的解決方法就是花錢買更多的 RAM。但是,如果這個方案無法實現或者仍然不夠用時,你就需要使用壓縮、分塊或者索引來解決。

這些方法也出現在其他許多不同的軟件包和工具中。即使是大數據系統也是建立在這些方法之上的:例如使用多個計算機來處理分塊數據。

在接下來的文章里,我會給你展示如何使用具體的庫和工具(NumPy、Pandas,或者用 ZIP 工具壓縮文件)來應用這些方法。如果在我寫完這些文章時,你就想閱讀到它們,請在下方表格里注冊我的通訊簡報(newsletter)。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1369

    瀏覽量

    114764
  • 程序
    +關注

    關注

    117

    文章

    3791

    瀏覽量

    81153
  • 大數據
    +關注

    關注

    64

    文章

    8896

    瀏覽量

    137514
收藏 人收藏

    評論

    相關推薦

    ADAS1000數據讀取后DRDY引腳無法回到高電平的情況應該何解決?

    排除所燒錄的程序問題,請問出現這種故障應該何解決,硬件電路連接相比較之前沒有做出改變,但PCB的走線可能有所變化,請問走線的變化是否會引起這種變化?目前ADAS1000數據讀取后DR
    發表于 12-27 08:06

    TLV3502比較器輸出幅值較小且有很多毛刺如何解決?

    電路原理圖如上圖所示TLV3502接成窗口比較器結構 上限電平為5V 下限電平為可調節 設為0.8V 輸出通過或非門邏輯 得到OUT 圖中R8未連 R9為10K OUT的波形從原理上應該為5V方波 實際為 幅值較小 且有很
    發表于 08-21 08:09

    碰到仿真器連接不上C2000芯片的時候何解決?

    看到很多壇友碰到仿真器連接不上芯片的問題常常一籌莫展。所以談談當碰到仿真器連接不上C2000芯片的時候該怎么辦。首先,由于對工程師而言C2000芯片是黑盒,仿真器也是黑盒,所以我們無法從本質上確認
    發表于 07-23 09:02

    何解決DMA傳輸數據內存的問題?

    如何減少存儲空間?如何控制脈沖數量?如何解決DMA傳輸數據內存的問題?
    發表于 12-21 07:53

    QCC3005芯片Line IN 聽歌的時候聲音比較小是什么原因

    QCC3005芯片 Line IN 聽歌的時候聲音比較小,這時候用ADK config tool工具連上,這時候聲音就變大了,這是什么原因呢,怎么讓Line in接通音樂的
    發表于 01-14 07:59

    Keil編譯錯誤improper fixup應該何解

    本文檔的有內容詳細介紹的是Keil編譯錯誤improper fixup應該何解決。
    發表于 07-31 17:35 ?1次下載
    Keil編譯錯誤improper fixup<b class='flag-5'>應該</b>如<b class='flag-5'>何解</b>決

    ORCAD原理圖中有哪些常見DRC錯誤應該何解

    本文檔的主要內容詳細介紹的是ORCAD原理圖中有哪些常見DRC錯誤應該何解決。
    發表于 07-30 17:22 ?0次下載
    ORCAD原理圖中有哪些常見DRC錯誤<b class='flag-5'>應該</b>如<b class='flag-5'>何解</b>決

    Access數據庫不能寫的問題應該何解決詳細辦法說明

    本文檔的主要內容詳細介紹的是Access數據庫不能寫的問題應該何解決詳細辦法說明。
    發表于 10-14 17:46 ?10次下載

    FPGA經常有哪些常見警告應該何解

    本文檔的主要內容詳細介紹的是FPGA經常有哪些常見警告應該何解決。
    發表于 10-14 16:00 ?9次下載
    FPGA經常有哪些常見警告<b class='flag-5'>應該</b>如<b class='flag-5'>何解</b>決

    使用FPGA經常會碰到哪些問題應該何解

    本文檔的主要內容詳細介紹的是使用FPGA經常會碰到哪些問題應該何解決。
    發表于 10-30 16:54 ?14次下載
    使用FPGA經常會<b class='flag-5'>碰到</b>哪些問題<b class='flag-5'>應該</b>如<b class='flag-5'>何解</b>決

    MySQL磁盤滿了應該何解

    本文檔的主要內容詳細介紹的是MySQL磁盤滿了應該何解決。
    發表于 12-26 10:25 ?2133次閱讀

    C代碼與javaScript函數的相互調用問題應該何解

    本文檔的主要內容詳細介紹的是C代碼與javaScript函數的相互調用問題應該何解決。
    發表于 03-05 11:47 ?17次下載

    單片機初學者編程經常會碰到的問題及處理辦法

    在剛開始接觸單片機學習的時候,尤其是C語言基礎比較薄弱的老鐵們,經常會碰到很多比較低級的錯誤,程序編譯錯誤一大堆,但不知道如何解決!一、程序
    發表于 11-13 14:51 ?9次下載
    單片機初學者編程經常會<b class='flag-5'>碰到</b>的問題及處理辦法

    何解內存溢出

    ,有時候會自動關閉軟件,重啟電腦或者軟件后釋放掉一部分內存又可以正常運行該軟件,而由系統配置、數據流、用戶代碼等原因而導致的內存溢出錯誤,即使用戶重新執行任務依然無法避免 其實很簡單,
    的頭像 發表于 09-25 10:54 ?1439次閱讀
    如<b class='flag-5'>何解</b>決<b class='flag-5'>內存</b>溢出

    何解內存碎片與內存交換效率慢的問題

    空間組合起來,是不是解決了這個問題?同樣的,內存交換的時候我們保證交換的數據小,是不是能提高內存交換的效率? 這個辦法就是內存分頁,分頁是把
    的頭像 發表于 10-09 16:57 ?1056次閱讀
    如<b class='flag-5'>何解</b>決<b class='flag-5'>內存</b>碎片與<b class='flag-5'>內存</b>交換效率慢的問題
    主站蜘蛛池模板: 国产成人在线视频免费观看| 99久久精品国产国产毛片| 中文在线中文资源| 黑丝制服影院| 午夜不卡av免费| 把手戳进美女尿口里动态图| 男人脱女人衣服吃奶视频| 主播蜜汁丝袜精品自拍| 果冻传媒2021一二三在线观看| 午夜性伦鲁啊鲁免费视频| 国产精品免费大片一区二区| 日本美女bb| 高清午夜福利电影在线 | 把腿张开再深点好爽宝贝| 挠黑色超薄丝袜脚心vk40分钟| 97视频免费观看| 欧美日韩久久久精品A片| 爱穿丝袜的麻麻3d漫画acg| 琪琪色原网站ying| 国产激情一级毛片久久久| 卫生间被教官做好爽HH视频| 国产美熟女乱又伦AV| 亚洲日韩国产精品乱-久| 久久精品中文字幕有码日本| 538在线视频一区二区视视频| 男同志在线观看| 国产不卡免费| 亚洲欧美日韩综合影院| 巨大乳hdbbw| yellow视频免费观看高清在线| 色小说在线| 姐姐不~不可以动漫在线观看 | 亚洲AV精品无码国产一区| 狠狠色狠狠色综合日日2019| 在线观看视频中文字幕| 女人18毛片| 国产精品日本无码久久一老A | 息与子在线交尾中文字幕| 久久99精品AV99果冻传媒| freevideoshd| 亚洲高清无在码在线电影|