rocksdb 用法简单介绍

  1. RocksDB是使用C++编写的嵌入式kv存储引擎,其键值均允许使用二进制流。由Facebook基于levelDB开发, 提供向后兼容的levelDB API。

    RocksDB针对Flash存储进行优化,延迟极小。RocksDB使用LSM存储引擎,纯C++编写。

  2. 打开一个数据库

    rocksdb::DB* db;

    rocksdb::Options options;

    options.create_if_missing = true;

    rocksdb::Status status = rocksdb::DB::Open(options, "/tmp/testdb", &db);

    assert(status.ok());

  3. 往数据库写入kv键值对

    s = db->Put(WriteOptions(), "k1", "v1");

  4. 向数据库查询k的value

    s = db->Get(ReadOptions(), "k1", &v);

  5. 原子写入

    rocksdb::WriteBatch batch;

    batch.Delete("k1");

    batch.Put("k2", "v2");

    s = db->Write(rocksdb::WriteOptions(), &batch);

  6. 迭代器

    db->NewIterator(rocksdb::ReadOptions());

    可以通过在调用NewIterator的时候,给传入的option设定ReadOptions.iterate_upper_bound来为你的迭代范围设置一个上边界。

    通过这个设定,rocksdb就不用继续查找这个key之后的内容了。在一些情况下,可以节省一些IO和计算。在特定的工作载荷下,

    它带来的改善是显著的。这个选项可以同在正向和反向迭代。

    rocksdb::Iterator* it = db->NewIterator(rocksdb::ReadOptions());

    for (it->SeekToFirst(); it->Valid(); it->Next()) {

    cout << it->key().ToString() << ": " << it->value().ToString() << endl;

    }

  7. 事务操作

    Status s = TransactionDB::Open(options,txn_db_options,kDbPathTran,&txn_db );

    Transaction* txn = txn_db->BeginTransaction(WriteOptions());

    获得事务,就可以进行相应的op操作,如下:

    s = txn->Put("key", "value");

    s = txn->Delete("key2");

    然后对事务进行提交

    s = txn->Commit();

rocksdb实际用法如以下代码

#include<cstdio>
#include<string>
#include<iostream>
#include "rocksdb/db.h"
#include "rocksdb/slice.h"
#include "rocksdb/options.h"
#include "rocksdb/utilities/transaction.h"
#include "rocksdb/utilities/transaction_db.h"
using namespace rocksdb; std::string kDbPath = "/tmp/wsf_rocksdb_test";
std::string kDbPathTran = "/tmp/wsf_rocksdb_transation"; void testTransaction(){
TransactionDB* txn_db;
Options options;
TransactionDBOptions txn_db_options;
options.create_if_missing = true; Status s = TransactionDB::Open(options,txn_db_options,kDbPathTran,&txn_db );
Transaction* txn = txn_db->BeginTransaction(WriteOptions());
s = txn->Put("key", "value");
s = txn->Delete("key2");
s = txn->Merge("key3", "value");
s = txn->Commit();
delete txn; } int main()
{
DB *db;
Options options;
options.create_if_missing = true; Status s = DB::Open(options, kDbPath, &db);
assert(s.ok()); s = db->Put(WriteOptions(), "k1", "v1");
assert(s.ok()); std::string v;
s = db->Get(ReadOptions(), "k1", &v);
assert(s.ok());
std::cout << "v = " << v << std::endl; rocksdb::WriteBatch batch;
batch.Delete("k1");
batch.Put("k2", "v2");
batch.Put("k3", "v3");
batch.Put("k4", "v4");
s = db->Write(rocksdb::WriteOptions(), &batch);
if (s.ok()) {
std::string v2;
s = db->Get(ReadOptions(), "k2", &v2);
std::cout << "v = " << v2 << std::endl;
s = db->Get(ReadOptions(), "k1", &v);
if (!s.ok()) {
std::cout << s.ToString() << std::endl;
}
// assert(s.ok());
//std::cout<<"v = "<<v<<std::endl;
} rocksdb::Iterator * it = db->NewIterator(rocksdb::ReadOptions());
for (it->SeekToFirst(); it->Valid(); it->Next()) {
std::cout << it->key().ToString() << ":" << it->value().
ToString() << std::endl;
} testTransaction();
}

Rocksdb基本用法的更多相关文章

  1. RocksDB Rate Limiter源码解析

    这次的项目我们重点关注RocksDB中的一个环节:Rate Limiter.其实Rate Limiter的思想在很多其他系统中也很常用. 在RocksDB中,后台会实时运行compaction和flu ...

  2. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  3. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  4. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  5. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  6. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  7. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

  8. 【JavaScript】innerHTML、innerText和outerHTML的用法区别

    用法: <div id="test">   <span style="color:red">test1</span> tes ...

  9. chattr用法

    [root@localhost tmp]# umask 0022 一.chattr用法 1.创建空文件attrtest,然后删除,提示无法删除,因为有隐藏文件 [root@localhost tmp] ...

随机推荐

  1. cmd命令行界面运行python脚本显示的中文不正确

    在notepad++中编写了一个脚本(如图一),在cmd命令行界面中运行却发现显示的中文不正确(如图2).图3显示的是cmd界面的默认编码. 解决方案:将脚本的注释语言改为GBK,编码格式改为ANSI ...

  2. Python RPC 之 gRPC

    gRPC 简介: gRPC 是一款高性能.开源的 RPC 框架,产自 Google,基于 ProtoBuf 序列化协议进行开发,支持多种语言(Golang.Python.Java等),本篇只介绍 Py ...

  3. mybatis 中 useGeneratedKeys 和 keyProperty 含义

    MyBatis如何获取插入记录的自增长字段值: 第一步: 在Mybatis Mapper文件中添加属性“useGeneratedKeys”和“keyProperty”,其中keyProperty是Ja ...

  4. Python 内存分配时的小秘密

    Python 中的sys 模块极为基础而重要,它主要提供了一些给解释器使用(或由它维护)的变量,以及一些与解释器强交互的函数. 本文将会频繁地使用该模块的getsizeof() 方法,因此,我先简要介 ...

  5. MSIL实用指南-生成break和continue

    break和continue本质都是标签的跳转

  6. 使用WPF为Powershell程序制作GUI界面

    1. 使用Xaml创建应用界面 打开visual studio,创建一个新的项目,在已安装模板中选择Visual C# →Wpf应用. 完成创建后,我们得到如下图所示的应用界面. wpf界面是基于xa ...

  7. C#开发BIMFACE系列2 二次开发流程

    系列目录     [已更新最新开发文章,点击查看详细] BIMFACE 平台是一个对外开放的平台,建筑行业的相关公司.软件公司或者有 BIM 业务需求的公司都可以注册成为开发者并使用其提供的强大功能. ...

  8. Zookeeper之Leader选举过程

    Leader在集群中是一个非常重要的角色,负责了整个事务的处理和调度,保证分布式数据一致性的关键所在.既然Leader在ZooKeeper集群中这么重要所以一定要保证集群在任何时候都有且仅有一个Lea ...

  9. wps10.1中将txt转为excel

    1.将想要保存的内容保存为txt格式,用分隔符分隔好(包括空格.制表符.英文的逗号以及分号四种). 2.打开wps 3.点击数据->导入数据,选择刚才的txt文件 4.一步步操作,即可.

  10. [python]多元赋值

    1. 简介 将多个变量同时赋值的方法,称为多元赋值. 2. 示例一: x, y, z = 1, 2, 'a string' print x, y, z 运行结果: 1 2 a string