成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

五分鐘快速實現leveldb中數據的高可靠

云計算 虛擬化
leveldb是Google的Sanjay Ghemawat和Jeff Dean兩位大神編寫的一個高性能KV引擎,使用起來非常方便。然而,開源版本的leveldb將所有數據存放在了本地磁盤,如果本地磁盤發生故障,可能導致部分甚至全部數據丟失(例如MANIFEST丟失),這對于使用者來說無疑會帶來災難性的后果。

[[178361]]

眾所周知,leveldb是Google的Sanjay Ghemawat和Jeff Dean兩位大神編寫的一個高性能KV引擎,使用起來非常方便。然而,開源版本的leveldb將所有數據存放在了本地磁盤,如果本地磁盤發生故障,可能導致部分甚至全部數據丟失(例如MANIFEST丟失),這對于使用者來說無疑會帶來災難性的后果。在這時,數據的高可靠便成為了一個至關重要的問題,本篇博文將帶你五分鐘快速實現leveldb中數據存儲的高可靠。

百度開源的分布式文件系統BFS(開源地址:https://github.com/baidu/bfs)提供了mount工具,可以將整個分布式文件系統直接掛載到本地目錄,從而可以像操作本地文件一樣來操作分布式文件系統中的文件,我們可以利用分布式文件系統本身提供的數據高可靠特性來保證leveldb中數據的安全。

1. 首先下載BFS源碼

  1. git clone git@github.com:baidu/bfs.git 

2. 然后編譯所需要的二進制文件

  1. cd bfs; make && make bfs_mount 

編譯完成后,會在當前目錄下生成啟動BFS所需要的nameserver、chunkserver二進制,以及掛載工具bfs_mount

3. 啟動BFS集群(本地模擬分布式環境)

  1. cd sandbox; ./depoly.sh; ./start_bfs.sh 

執行成功后,會在本地啟動一個包含一個Nameserver,4個Chunkserver的小集群,其中Nameserver占用的端口為8827

4. 將BFS集群掛載到本地

  1. cd ../; mkdir bfs_dir; nohup ./bfs_mount -d ./bfs_dir -c localhost:8827 -p / 1>fuse_mount.log 2>&1 & 

其中,-d表示輸出debug日志,./bfs_dir表示將BFS掛載到本地的bfs_dir目錄下,-c localhost:8827指明了BFS集群的地址,上一步中的start_bfs.sh會在本地的8827端口啟動BFS的Nameserver,-p /指定將BFS的根目錄進行掛載

至此,與BFS所做的相關準備工作已經全部完成~

接下來,可以將自己程序中leveldb的數據寫到BFS中,如果有不熟悉leveldb的同學,可以參考下面的使用示例:

  1. #include <stdio.h>  
  2. #include <leveldb/db.h>  
  3. int main() 
  4.     leveldb::DB* db_; 
  5.     leveldb::Options options; 
  6.     options.create_if_missing = true
  7.     leveldb::Status s = leveldb::DB::Open(options, "./bfs_dir/ldb_data/", &db_); 
  8.     if (!s.ok()) { 
  9.         printf("Open db fail\n"); 
  10.         return -1; 
  11.     } 
  12.     std::string test_key("hello"), test_value("world"); 
  13.     s = db_->Put(leveldb::WriteOptions(), test_key, test_value); 
  14.     if (!s.ok()) { 
  15.         printf("Write db fail\n"); 
  16.         return -1; 
  17.     } 
  18.     return 0; 

到這里是不是有點小激動?即使本地磁盤掛掉,BFS自動會進行副本恢復,保證數據不丟失。

更重要的是,只要在其它機器上同樣掛載BFS相應目錄,便可以不需要任何代價的,在另外的機器上對同樣一個leveldb進行操作。(鑒于同一個leveldb同一時刻只允許被一個進程打開,前提需要此機器已經正確的將自己打開的leveldb關閉)這樣,就相當于數據毫無代價的從一臺機器『遷移』到了另外一臺機器,是不是很炫酷?可能有些同學發現了什么:對,其實BigTable的模型正是如此~ 如果有希望繼續深入了解的同學,可以移步百度開源的,目前已經存儲了萬億級別網頁數據的分布式數據庫Tera(開源地址:http://github.com/baidu/tera),正是通過類似的原理,在保證數據安全的情況下,可以實現快速的負載均衡,分裂合并等特性。

責任編輯:武曉燕 來源: 開源博客
相關推薦

2021-01-11 09:33:37

Maven數目項目

2009-11-16 09:53:56

PHP上傳類

2025-05-22 10:00:00

DockerRedis容器

2018-02-02 16:08:32

互聯網大數據數據分析

2022-02-23 20:38:32

云原生集群Postgres

2023-07-30 10:09:36

MMD數據庫

2022-12-13 10:05:27

定時任務任務調度操作系統

2020-06-16 08:47:53

磁盤

2009-11-16 10:53:30

Oracle Hint

2025-03-13 06:22:59

2024-12-11 07:00:00

面向對象代碼

2009-10-21 18:19:36

VB.NET實現拖放

2025-04-02 11:30:00

MySQL二進制部署數據庫

2023-10-06 20:21:28

Python鏈表

2009-11-20 18:08:37

Oracle數據庫

2009-11-06 10:25:34

WCF元數據交換

2021-01-27 08:03:53

項目Web外網

2024-06-19 10:41:06

2021-03-03 16:33:24

web項目外網

2024-06-25 12:25:12

LangChain路由鏈
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久九九九九 | 九九热国产视频 | 超碰在线人 | 国产日韩欧美一区二区 | 岛国av一区二区 | 在线视频成人 | 欧美福利在线 | 免费视频一区二区 | 99久久精品免费看国产四区 | 自拍 亚洲 欧美 老师 丝袜 | 一本色道久久综合亚洲精品高清 | 日韩午夜 | 国产精品99久久久久久宅男 | 色伊人久久 | 亚州综合在线 | 久久久久免费观看 | 成人在线日韩 | 美女拍拍拍网站 | 我要看免费一级毛片 | 国产亚洲精品美女久久久久久久久久 | 黄色大片免费播放 | 国产在线中文字幕 | 精品国产网| 一区精品在线观看 | 天天操操| 在线观看深夜视频 | 欧美亚洲网站 | 欧美精品片 | 久久精品视频在线观看 | 毛片一级黄色 | 午夜精品久久久久久久久久久久久 | 久久国产一区二区三区 | 波多野结衣一区二区三区在线观看 | 99视频在线| 秋霞电影院午夜伦 | 干一干操一操 | www.99热 | 国产激情一区二区三区 | 国产精品女人久久久 | 曰韩三级 | 一区二区三区四区电影 |