五分钟快速实现leveldb中数据的高可靠

栏目: 数据库 · 发布时间: 6年前

内容简介:五分钟快速实现leveldb中数据的高可靠

众所周知,leveldb是Google的Sanjay Ghemawat和Jeff Dean两位大神编写的一个高性能KV引擎,使用起来非常方便。然而,开源版本的leveldb将所有数据存放在了本地磁盘,如果本地磁盘发生故障,可能导致部分甚至全部数据丢失(例如MANIFEST丢失),这对于使用者来说无疑会带来灾难性的后果。在这时,数据的高可靠便成为了一个至关重要的问题,本篇博文将带你五分钟快速实现leveldb中数据存储的高可靠。

百度开源的分布式文件系统BFS(开源地址: https://github.com/baidu/bfs )提供了mount工具,可以将整个分布式文件系统直接挂载到本地目录,从而可以像操作本地文件一样来操作分布式文件系统中的文件,我们可以利用分布式文件系统本身提供的数据高可靠特性来保证leveldb中数据的安全。

1. 首先下载BFS源码

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

2. 然后编译所需要的二进制文件

cd bfs; make && make bfs_mount

编译完成后,会在当前目录下生成启动BFS所需要的 nameserverchunkserver 二进制,以及挂载工具 bfs_mount

3. 启动BFS集群(本地模拟分布式环境)

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

执行成功后,会在本地启动一个包含一个Nameserver,4个Chunkserver的小集群,其中Nameserver占用的端口为8827

4. 将BFS集群挂载到本地

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的同学,可以参考下面的使用示例:

#include <stdio.h>

#include <leveldb/db.h>

int main()
{
    leveldb::DB* db_;
    leveldb::Options options;
    options.create_if_missing = true;
    leveldb::Status s = leveldb::DB::Open(options, "./bfs_dir/ldb_data/", &db_);
    if (!s.ok()) {
        printf("Open db fail\n");
        return -1;
    }
    std::string test_key("hello"), test_value("world");
    s = db_->Put(leveldb::WriteOptions(), test_key, test_value);
    if (!s.ok()) {
        printf("Write db fail\n");
        return -1;
    }
    return 0;
}

到这里是不是有点小激动?即使本地磁盘挂掉,BFS自动会进行副本恢复,保证数据不丢失。

更重要的是,只要在其它机器上同样挂载BFS相应目录,便可以不需要任何代价的,在另外的机器上对同样一个leveldb进行操作。(鉴于同一个leveldb同一时刻只允许被一个进程打开,前提需要此机器已经正确的将自己打开的leveldb关闭)这样,就相当于数据毫无代价的从一台机器『迁移』到了另外一台机器,是不是很炫酷?可能有些同学发现了什么:对,其实BigTable的模型正是如此~ 如果有希望继续深入了解的同学,可以移步百度开源的,目前已经存储了万亿级别网页数据的分布式数据库Tera(开源地址: http://github.com/baidu/tera ),正是通过类似的原理,在保证数据安全的情况下,可以实现快速的负载均衡,分裂合并等特性。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深度学习入门

深度学习入门

[ 日] 斋藤康毅 / 陆宇杰 / 人民邮电出版社 / 2018-7 / 59.00元

本书是深度学习真正意义上的入门书,深入浅出地剖析了深度学习的原理和相关技术。书中使用Python3,尽量不依赖外部库或工具,从基本的数学知识出发,带领读者从零创建一个经典的深度学习网络,使读者在此过程中逐步理解深度学习。书中不仅介绍了深度学习和神经网络的概念、特征等基础知识,对误差反向传播法、卷积神经网络等也有深入讲解,此外还介绍了深度学习相关的实用技巧,自动驾驶、图像生成、强化学习等方面的应用,......一起来看看 《深度学习入门》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具