最近想研究Rocksdb,在此记录编译过程。
首先是Rocksdb编译,参考这里:https://github.com/facebook/rocksdb/blob/master/INSTALL.md
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| $ sudo apt-get install -y make g++ libgflags-dev libsnappy-dev zlib1g-dev libbz2-dev liblz4-dev libzstd-dev git
$ git clone https://github.com/facebook/rocksdb.git $ cd rocksdb
$ git checkout v10.10.1
$ make shared_lib -j"$(nproc)"
$ sudo cp -r include/rocksdb /usr/local/include/ $ sudo cp librocksdb.so.10.10.1 /usr/local/lib/
$ cd /usr/local/lib $ ls $ sudo ln -s librocksdb.so.10.10.1 librocksdb.so.10.10 $ sudo ln -s librocksdb.so.10.10 librocksdb.so.10 $ sudo ln -s librocksdb.so.10 librocksdb.so
$ sudo ldconfig
$ ldconfig -p | grep rocksdb librocksdb.so.10.10 (libc6,x86-64) => /usr/local/lib/librocksdb.so.10.10 librocksdb.so (libc6,x86-64) => /usr/local/lib/librocksdb.so
|
cpp测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #include <iostream> #include <string>
#include <rocksdb/db.h> #include <rocksdb/options.h>
int main() { std::unique_ptr<rocksdb::DB> db = nullptr;
rocksdb::Options options; options.create_if_missing = true;
std::string db_path = "./test_rocksdb";
rocksdb::Status status = rocksdb::DB::Open(options, db_path, &db); if (!status.ok()) { std::cerr << "Open failed: " << status.ToString() << std::endl; return 1; }
db->Put(rocksdb::WriteOptions(), "hello", "world");
std::string value; status = db->Get(rocksdb::ReadOptions(), "hello", &value);
if (status.ok()) { std::cout << value << std::endl; }
return 0; }
|
golang测试
1 2
| $ mkdir gorocktest && cd gorocktest $ go mod init gorocktest
|
写入main.go,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| package main
import ( "fmt" "log"
"github.com/linxGnu/grocksdb" )
func main() { opts := grocksdb.NewDefaultOptions() defer opts.Destroy()
opts.SetCreateIfMissing(true)
db, err := grocksdb.OpenDb(opts, "./test_rocksdb") if err != nil { log.Fatal(err) } defer db.Close()
wo := grocksdb.NewDefaultWriteOptions() defer wo.Destroy()
ro := grocksdb.NewDefaultReadOptions() defer ro.Destroy()
err = db.Put(wo, []byte("name"), []byte("Kemal")) if err != nil { log.Fatal(err) }
value, err := db.Get(ro, []byte("name")) if err != nil { log.Fatal(err) } defer value.Free()
fmt.Println("name =", string(value.Data()))
err = db.Delete(wo, []byte("name")) if err != nil { log.Fatal(err) } }
|