Golang - LevelDB是什么?为什么需要K-V存储?

发布时间 2023-05-29 00:31:06作者: 李若盛开

一、介绍

https://github.com/syndtr/goleveldb

LevelDB 是一个由 Google 公司所研发的 K-V 存储嵌入式数据库管理系统编程库,以开源的 BSD 许可证发布。其作为 LSM Tree 的经典实现,具有很高的随机写,顺序读/写性能,但是随机读的性能很一般,也就是说,LevelDB很适合应用在查询较少,而写很多的场景。

二、为什么需要K-V数据库?
K-V 数据库主要用于存取、管理关联性的数组。关联性数组又称映射、字典,是一种抽象的数据结构,其数据对象为一个个的 key-value 数据对,且在整个数据库中每个 key 均是唯一的。

随着近年来互联网的兴起,云计算、大数据应用越来越广泛,对于数据库来说也出现了一些需要面对的新情况:

数据量呈指数级增长,存储也开始实现分布式。
查询响应时间要求越来越快,需在1秒内完成查询操作。
应用一般需要 7 × 24 小时连续运行,因此对稳定性要求越来越高,通常要求数据库支持热备份,并实现故障下快速无缝切换。
在某些应用中,写数据比读数据更加频繁,对数据写的速度要求也越来越高。
在实际应用中,并不是所有环境下的数据都是完整的结构化数据,非结构化数据普遍存在,因此如何实现对灵活多变的非结构化数据的支持是需要考虑的一个问题。

三、特点
A、优点:

1)key 与 value 采用字符串形式,且长度没有限制。

2)数据能持久化存储,同时也能将数据缓存到内存,实现快速读取。

3)基于 key 按序存放数据,并且 key 的排序比较函数可以根据用户需求进行定制。

4)支持简易的操作接口 API,如 Put、Get、Delete,并支持批量写入。

5)可以针对数据创建数据内存快照。

6)支持前向、后向的迭代器。

7)采用 Google 的 Snappy 压缩算法对数据进行压缩,以减少存储空间。

8)基本不依赖其他第三方模块,可非常容易地移植到 Windows、Linux、UNIX、Android、iOS。

B、缺点:

1)不是传统的关系数据库,不支持SQL查询与索引。

2)只支持单进程,不支持多进程。

3)不支持多种数据类型。

4)不支持 C/S 的访问模式。用户在应用时,需要自己进行网络服务的封装。

四、应用场景
LevelDB主要应用于查少写多的场景,如:

常见的 Web 场景,可以存储用户的个人信息资料、对文章或博客的评论、邮件等。

具体到电子商务领域,可以存储购物车中的商品、产品类别、产品评论。

存储整个网页,其将网页的 URL 作为 key,网页的内容作为 value。

构建更为复杂的存储系统,如日志系统、缓存、消息队列等。