专栏名称: 人工智能与大数据技术
分享大数据、云计算、人工智能等高科技先进技术
目录
相关文章推荐
大数据分析和人工智能  ·  35岁被优化,经济压力大,看DeepSeek ... ·  3 天前  
软件定义世界(SDX)  ·  DeepSeek创始人梁文锋5年前的演讲:一 ... ·  3 天前  
数据派THU  ·  LossVal:一种集成于损失函数的高效数据 ... ·  3 天前  
软件定义世界(SDX)  ·  Flywheel:2024电商消费趋势年度报告 ·  1 周前  
大数据文摘  ·  我们决定用50个关键词,来总结2024这AI ... ·  1 周前  
51好读  ›  专栏  ›  人工智能与大数据技术

谷歌这个牛逼的开源数据库,我居然等到它上Github热榜才发现

人工智能与大数据技术  · 公众号  · 大数据  · 2021-05-27 09:36

正文

来自:开源最前线(ID:OpenSourceTop)

链接:https://github.com/google/leveldb/

今天要和大家分享一个谷歌开源多年,但依旧扛打,最近还登上Github热榜的kv数据库——LevelDB。



Leveldb是一个google实现的非常高效的kv数据库,创建者是大名鼎鼎的 Jeff Dean 和 Sanjay Ghemawat,目前的版本1.2能够支持billion级别的数据量了。在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计。

LevelDB 是单进程的服务,性能非常之高,在一台4个Q6600的CPU机器上,每秒钟写数据超过40w,而随机读的性能每秒钟超过10w。具有以下功能特性:
  • key和value可以是字符串或者字节流

  • 数据按key排列,有序存储

  • 调用方可以重载排序方法,以实现自定义排序

  • 基本操作只有3种:Put(key, value)、Get(key)、Delete(key)

  • 提供原子批量修改接口

  • 支持数据快照

  • 支持向前和向后的迭代器

  • 支持数据自动压缩,使用的是snappy压缩算法

  • 和操作系统之间的外部交互是通过虚接口(virtual interface)来进行,这样用户就能定制化这些交互了


levelDB特牛,但是,再好的工具也有它的局限性,LevelDB 的局限性也很明显:
  • 这不是一个 SQL 数据库,它没有关系数据模型,不支持 SQL 查询,也不支持索引。

  • 同时只能有一个进程(可能是具有多线程的进程)访问一个特定的数据库。

  • 该程序库没有内置的 client-server 支持,有需要的用户必须自己封装。



LevelDB的使用方法

打开数据库

leveldb数据库的名称与文件系统目录相对应。数据库的所有内容都存储在此目录中。以下示例显示了如何打开数据库:


#include 
#include "leveldb/db.h"

leveldb::DB* db;
leveldb::Options options;
options.create_if_missing = true;
leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);
assert(status.ok());
...


如果要在数据库已经存在的情况下引发错误,请在leveldb::DB::Open调用之前添加以下行:


options.error_if_exists = true;



关闭数据库

完成数据库操作后,只需删除数据库对象。例子:


... open the db as described above ...
... do something with db ...
delete db;



读写

数据库提供了Put,Delete和Get方法来修改/查询数据库。如下:


std::string value;
leveldb::Status s = db->Get(leveldb::ReadOptions(), key1, &value);
if (s.ok()) s = db->Put(leveldb::WriteOptions(), key2, value);
if (s.ok()) s = db->Delete(leveldb::WriteOptions(), key1);



并发





请到「今天看啥」查看全文