免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

JuiceFS 元數(shù)據(jù)引擎選型指南

文件系統(tǒng)是我們常見的存儲形式,內(nèi)部主要由數(shù)據(jù)和元數(shù)據(jù)兩部分組成 。其中數(shù)據(jù)是文件的具體內(nèi)容,通常會直接展現(xiàn)給用戶;而元數(shù)據(jù)是描述數(shù)據(jù)的數(shù)據(jù),用來記錄文件屬性、目錄結(jié)構(gòu)、數(shù)據(jù)存儲位置等 。一般來說,元數(shù)據(jù)有非常鮮明的特點,即占用空間較小,但訪問非常頻繁 。
當今的分布式文件系統(tǒng)中,有的(如 S3FS)會將元數(shù)據(jù)和數(shù)據(jù)統(tǒng)一管理,以簡化系統(tǒng)設(shè)計,不過這樣的弊端是某些元數(shù)據(jù)操作會讓用戶感受到明顯的卡頓,如 ls 大目錄,重命名大文件等 。更多的文件系統(tǒng)會選擇將這兩者分開管理,并根據(jù)元數(shù)據(jù)的特點進行針對性優(yōu)化 。JuiceFS 采用的就是這種設(shè)計,其架構(gòu)圖如下:

JuiceFS 元數(shù)據(jù)引擎選型指南

文章插圖
其中,元數(shù)據(jù)引擎需要是能夠支持事務操作的數(shù)據(jù)庫,而數(shù)據(jù)引擎一般是用對象存儲 。目前為止,JuiceFS 已經(jīng)支持 10 種以上元數(shù)據(jù)引擎和 30 種以上數(shù)據(jù)引擎 。
用戶在使用 JuiceFS 時可以自由地選擇成熟組件來充當這兩個引擎,以應對豐富多變的企業(yè)環(huán)境和數(shù)據(jù)存儲需求 。然而對于新用戶來說,當面對更多選擇時,也帶來了一個問題:在我的場景中究竟選擇哪一款數(shù)據(jù)庫作為元數(shù)據(jù)引擎比較合適?這篇文章將從產(chǎn)品設(shè)計角度,為大家介紹 JuiceFS 可使用的元數(shù)據(jù)引擎類型,以及他們的優(yōu)劣勢 。
01-JuiceFS 元數(shù)據(jù)引擎類型JuiceFS 現(xiàn)在支持的元數(shù)據(jù)引擎總共有有三大類 。
第一個是 Redis 。Redis 是 JuiceFS 開源后最早支持的元數(shù)據(jù)引擎 。首先 Redis 速度夠快,這是元數(shù)據(jù)引擎需要具備的重要能力之一;其次,Redis 受眾面廣,大部分用戶對 Redis 都有實踐經(jīng)驗 。JuiceFS 對兼容 Redis 協(xié)議的數(shù)據(jù)庫也都實現(xiàn)了支持,比如 KeyDB、Amazon MemoryDB 等 。
然而,Redis 的可靠性和擴展性容易受限,在一些數(shù)據(jù)安全性要求較高或規(guī)模較大的場景中表現(xiàn)乏善可陳,因此我們又開發(fā)支持了另外兩類引擎 。
第二個是 SQL 類 。如 MySQL、MariaDB、PostgreSQL 等,它們的特點是流行度較高,且通常具有不錯的可靠性與擴展性 。另外,還支持了嵌入式數(shù)據(jù)庫 SQLite 。
最后一個是 TKV(Transactional Key-Value Database)類 。它們的原生接口比較簡單,因此在 JuiceFS 中的定制性更好,相較于 SQL 類一般也能有更高的性能 。目前這一類支持的有 TiKV、etcd 和嵌入式的 BadgerDB 等,對 FoundationDB 的支持也在緊鑼密鼓地開發(fā)中 。
以上是根據(jù) JuiceFS 在對接數(shù)據(jù)庫時的協(xié)議接口進行的分類 。每個大類里面有各種不同的數(shù)據(jù)庫,每種數(shù)據(jù)庫又有其自身的特點,以下根據(jù)這些特點對用戶常用的幾個選項進行比較 。
元數(shù)據(jù)引擎比較RedisMySQL/PostgreSQLTiKVetcdSQLite/BadgerDB性能高低中低中擴展性低中高低低可靠性低高高高中可用性中高高高低流行度高高中高中如上文中提到的,Redis 的最大優(yōu)勢是性能高,因為它是全內(nèi)存的數(shù)據(jù)庫 。其他幾方面它就表現(xiàn)平平 。
從擴展性上說,通常單機 Redis 可以支持 1 億文件左右,超過 1 億時,Redis 單進程的內(nèi)存使用量會比較大,管理性能上也會有所下降 。開源版 Redis 支持以集群模式來擴展其可管理的數(shù)據(jù)總量,但由于集群模式下 Redis 并不支持分布式事務,因此作為 JuiceFS 元數(shù)據(jù)引擎時,每個 JuiceFS volume 能用的 Redis 進程還是只有一個,單 volume 的擴展性相較于單機 Redis 并沒有太大提升 。
從可靠性來看,Redis 默認每秒將數(shù)據(jù)刷盤,在異常時可能導致小部分數(shù)據(jù)丟失 。通過將配置 appendfsync 改為 always,可以讓 Redis 在每個寫請求后都刷盤,這樣數(shù)據(jù)可靠性能提高,但是性能卻會下降 。

經(jīng)驗總結(jié)擴展閱讀