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

开发 前端
今天要和大家分享一个谷歌开源多年,但依旧扛打,最近还登上Github热榜的kv数据库——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数据库的名称与文件系统目录相对应。数据库的所有内容都存储在此目录中。以下示例显示了如何打开数据库:

  1. #include <cassert> 
  2. #include "leveldb/db.h" 
  3.  
  4. leveldb::DB* db; 
  5. leveldb::Options options; 
  6. options.create_if_missing = true
  7. leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db); 
  8. assert(status.ok()); 
  9. ... 

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

  1. options.error_if_exists = true

关闭数据库

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

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

读写

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

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

并发

一个数据库同时只能被一个进程打开。leveldb 会从操作系统获取一把锁来防止多进程同时打开同一个数据库。在单个进程中,同一个 leveldb::DB 对象可以被多个并发线程安全地使用,也就是说,不同的线程可以在不需要任何外部同步原语的情况下,写入、获取迭代器或者调用 Get(leveldb 实现会确保所需的同步)。但是其它对象,比如 Iterator 或者 WriteBatch 需要外部自己提供同步保证,如果两个线程共享此类对象,需要使用自己的锁进行互斥访问。具体见对应的头文件。

目前,leveldb已经在Github上标星 24.2K,累计标星 5.3K(Github地址:https://github.com/google/leveldb)。

 

责任编辑:赵宁宁 来源: 开源最前线
相关推荐

2023-10-10 07:19:07

Github开源库系统

2020-07-15 15:21:06

谷歌开源机器学习

2023-04-19 08:14:24

2019-12-26 15:31:17

腾讯框架开源

2023-06-20 08:28:17

2021-08-05 10:46:59

GitHub代码开发者

2020-08-20 14:50:43

谷歌工具开发者

2019-06-19 09:25:08

Web数据库管理工具

2022-04-21 10:14:02

Yandex开源数据库

2023-10-05 08:52:53

2024-02-01 13:02:00

AI模型

2019-09-26 14:56:18

GitHub 技术开源

2023-04-18 18:22:31

开源工具数据库

2021-04-25 15:35:30

开源技术 软件

2020-01-03 16:00:28

谷歌GitHub机器学习

2021-10-20 11:12:49

工具代码开发

2019-03-29 09:24:36

国内程序员微博GitHub

2020-07-17 11:30:39

密钥Github数据安全

2017-03-07 15:25:51

2021-07-05 05:26:09

Java开源Github
点赞
收藏

51CTO技术栈公众号