1. 程式人生 > >大量小檔案的儲存場景,有什麼優化辦法

大量小檔案的儲存場景,有什麼優化辦法

可以參考Google的GFS以及變種HDFS、淘寶TFS以及騰訊TencentFS的設計。這些都是處理大量小檔案的典範。

大家知道傳統的檔案系統下,每個檔案都要被建立對應的inode之類元資料,但是在海量檔案場景下,傳統FS已經無法承載如此多的元資料IO量以及如此龐大的元資料搜尋計算量了,唯一的做法就是降低元資料量,那麼勢必就要降低檔案實體的數量,所以這些檔案系統無一例外的都是用了這樣一種變通的方法,即在檔案中再建立檔案,比如一個64MB的大檔案,比如其中可以包含16384個4KB的小檔案,但是這個64MB的大檔案只佔用了1個inode,而如果存放4KB的檔案的話,就需要16384個inode了。

那麼如何定址這個大檔案中的小檔案呢?方法就是利用一個旁路資料庫來記錄每個小檔案在這個大檔案中的起始位置和長度等資訊,也就是說將傳統檔案系統的大部分元資料剝離了開來,拿到了單獨的資料庫中存放,這樣通過查詢外部資料庫先找到小檔案具體對應在哪個大檔案中的從哪開始的多長,然後直接發起對這個大檔案的對應地址段的讀寫操作即可。另外還可以建立索引以加速檔案查詢動作。

在一個海量分散式檔案系統中,元資料就像上面的思想一樣是分級的,中控節點,也就是MDS,儲存一級元資料,也就是大檔案與底層塊的對應關係,而資料節點則存放二級元資料,也就是最終的使用者檔案在這些一級大塊中的儲存位置對應關係,經過兩級定址從而讀寫資料。其實這些一級大檔案,就可以認為它們是捲了,也就是在卷管理層之上再存放檔案,這樣就降低了單一空間下的檔案總數量從而提高效能。

作者:張冬
連結:https://www.zhihu.com/question/26504749/answer/33012474


相關推薦

大量檔案儲存場景什麼優化辦法

可以參考Google的GFS以及變種HDFS、淘寶TFS以及騰訊TencentFS的設計。這些都是處理大量小檔案的典範。 大家知道傳統的檔案系統下,每個檔案都要被建立對應的inode之類元資料,但是在海量檔案場景下,傳統FS已經無法承載如此多的元資料IO量以及如此龐大的元資料搜尋計算量了,唯一的做法就是降低

HDFS無法高效儲存大量檔案如何處理好檔案

一、HAR檔案方案         為了緩解大量小檔案帶給namenode記憶體的壓力,Hadoop 0.18.0引入了Hadoop Archives(HAR files),其本質就是在HDFS之上構建一個分層檔案系統。通過執行hado

Cocos creator製作微信遊戲儲存圖片音訊檔案到本地(手機瀏覽器)

cocos creator打包生成的wx-downloader.js檔案儲存到本地會報 no such file or directory 沒有上級目錄錯誤,這就我們自己修改這個檔案,主要用到了微信小程式中的api FileSystemManger.access 和 FileSystemManage

揭祕淘寶286億海量圖片儲存與處理架構海量檔案儲存的解決方案

8月27日下午,在IT168系統架構師大會儲存與系統架構分論壇上,淘寶網技術委員會主席,淘寶網核心工程師章文嵩向我們詳細介紹了淘寶網圖片處理與儲存系統的架構。章文嵩博士的演講日程包括了淘寶的整個系統架構、淘寶圖片儲存系統架構,淘寶網獨立開發的TFS叢集檔案系統,前端CDN

對海量檔案儲存優化的一些理解和TFS介紹

在研究圖片伺服器問題時,瞭解到現在很多大公司基本上都是用分散式檔案系統來儲存海量小檔案,比如Facebook有haystack,淘寶有TFS,京東有JFS。最近在研究TFS,結合之前學習的linux下的inode相關知識,瞭解到在ext檔案系統中,對一個檔案的讀需要先從磁碟

[Hadoop]大量檔案問題及解決方案

1. HDFS上的小檔案問題 小檔案是指檔案大小明顯小於HDFS上塊(block)大小(預設64MB)的檔案。如果儲存小檔案,必定會有大量這樣的小檔案,否則你也不會使用Hadoop(If you’re storing small files, then you probably have lot

mybatis逆向工程生成的xml檔案重複ResultMap上千行程式碼問題。org.apache.ibatis.exceptions.PersistenceException

org.apache.ibatis.exceptions.PersistenceException: org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ### The

Hadoop上檔案儲存處理

在Hadoop中小檔案是一個大問題 — 或者說, 至少, 他們在使用者的討論區域是比較熱門的話題. 在這篇文章中我將直面這個問題, 並提出一些常見的解決方案. 在HDFS中的小檔案問題 這裡討論的小檔案指的是那些在HDFS中小於HDFS塊大小(預設是64M)的檔案. 如果你儲存了很多這種小檔案, 或者你有很

linux大量檔案複製

當目錄下存在大量小檔案時(數萬、十萬+),cp * 會報錯 Argument list too long 寫指令碼一個一個複製 list存的是檔名或者資料夾名字 #!/bin/bash cat

解決Flume採集資料時在HDFS上產生大量檔案的問題

問題:flume指定HDFS型別的Sink時,採集資料至HDFS指定目錄,會產生大量小檔案。問題重現:1、建立flume配置檔案flume-env.sh,:flume配置檔案如下(根據自身需要修改):    因為flume可以配置多種採集方式,每種採集方式對應一個agent配

大量資料中進行查詢無索引查詢的速度效果測試

首先在JAVA程式中向資料庫中進行資料的插入 ,因為要利用索引 ,少量的資料是不能夠測試出索引的效果,所以要插入大量的資料進行測試,這次我們插入50萬條記錄 JAVA程式如下:建立一個表classfor,向其中錄入50萬條記錄 package com.oracle.jdbc

spark批量讀取大量檔案辦法

在實際工程中,經常會遇到要一起讀取眾多小檔案的辦法。本來正常情況下是進行資料夾的遍歷。 幸運的是,spark原生是支援這種功能的。它可以批量地讀取眾多的檔案,也可以按照一定的方式進行過濾。 命令十分簡單。如下: sc.textfile("/dir/*.txt") 其

Linux下快速刪除大量檔案的方法探索

一、前言 Linux伺服器磁碟中存在大量小檔案,需要進行刪除(檔案小於1K,數量50w~100w),發現rm刪除速度奇慢無比,甚至出現“argument list too long”的錯誤。網上資料一搜索基本都是建議rsync方法,所以本文對幾種常見的方法進行試驗對比。

物件儲存Object分散式檔案儲存NAS分散式塊儲存(ServerSAN)

差異點\產品 ServerSAN 分散式NAS 分散式物件儲存 介面協議 塊(SCSI協議) 檔案(NFS、CIFS協議) 物件(OpenStack SWIFT、Ama

用Hadoop AVRO進行大量檔案的處理

使用 使用使用 使用 HDFS 儲存大量小檔案的缺點: 1.Hadoop NameNode 在記憶體中儲存所有檔案的“元資訊”資料。據統計,每一個檔案需要消耗 NameNode600 位元組記憶體。如果需要儲存大量的小檔案會對NameNode 造成極大的壓力。 2.

解壓檔案和合並大量檔案的shell指令碼

指令碼檔名為unzip-batch.sh#批量解壓壓縮檔案,將檔案解壓到指定目錄#!/bin/bashfor zipfilenamefull in `ls ./*.zip`do     #echo "$zipfilename"    zipfilename=`basename

MySQL(邏輯分層儲存引擎sql優化索引優化以及底層實現(B+Tree))

一 , 邏輯分層    連線層:連線與執行緒處理,這一層並不是MySQL獨有,一般的基於C/S架構的

讀取一個文件裡面是字典到了程式裡面成字串了什麼辦法轉回來?

方法1 程式碼: import ast user_info = "{'name': 'john', 'gender': 'male', 'age': 28}" user_dict = ast.literal_eval(user_info) print(user_dict) 執行

微信公眾號助手如何吸粉什麼辦法

微信公眾號是現在很多個人、企業都有註冊的一個平臺,個人也許是為了興趣愛好,而企業的期望是能帶來價值,不管是個人還是企業對於吸粉來說都是一大難題,可能對於企業來說在執行過程中,因為有團隊的支撐,在效果方面更加快速,而個人全程都是自己在操作,那接下來由魚塘軟體小編分享微信公眾號營銷吸粉,這七大引流方法你知道嗎?

python2.7在使用reload(sys)後再使用print語句無輸出解決辦法嗎?

應該是在idle下執行的 無法print是因為idle的stdout並非是預設的stdout,所以reload(sys)之後就所有到stdout的輸出就看不到了,可以考慮如下的程式碼在reload(sys)之後再把stdout換回去 import sys stdout =