当前位置: 首页 > 科技观察

In-memoryKVcache-database,可以选吗?-1分钟系列

时间:2023-03-13 15:38:56 科技观察

互联网业务,大部分场景都会用到缓存服务。《选redis还是memcache,源码怎么说?》《memcache内核的知识点,值得收藏》但有时候,进程内存缓存/数据库确实会用到。这时候LevelDB就可以派上用场了。什么是LevelDB?LevelDB由谷歌开发。是一个速度非常快的KV存储库(storagelibrary)。它支持字符串键和字符串值,这种映射关系是按键排序的(有序映射)。LevelDB有什么特点?(1)key和value可以是字符串或字节流;(2)数据默认按key排列,有序存储;画外音:调用者可以重载排序方法实现自定义排序。(3)简单易用,只有3个基本操作:Put(key,value)Get(key)Delete(key)(4)提供原子批量修改接口;(5)支持数据快照;(6)支持数据自动压缩;画外音:采用snappy压缩算法。(7)开源,文档很详细,Google的产品很靠谱;LevelDB的局限性是什么?LevelDB不是SQL数据库,没有关系存储模型,不支持SQL语句,不支持索引;一次只能有一个进程(当然,这个进程可以是多线程的)访问特定的数据库;LevelDB只是一个lib库,并没有实现任何客户端-服务器网络通信。当然,用户也可以自己封装lib层,实现自己的server;LevelDB的性能如何?内存缓存的特点是速度快。Google也进行了一系列测试:测试库共有100万行记录,每条记录有16个字节的key,100个字节的value,压缩后的value约50个字节。写入性能Sequentialwrite:每次操作平均耗时1.765微秒,每秒支持约550,000次顺序写入操作;顺序写入+每次刷盘:每次操作平均耗时268.409微秒,支持每秒约3700次闪存写入操作;随机写:每次操作平均耗时2.460微秒,支持每秒约40万次随机写操作;updatewrite:每次操作平均耗时2.380微秒,性能与随机写相似;读性能随机读:每次操作平均耗时16.677微秒,每秒支持约60000次随机读操作;顺序读:每次操作平均耗时0.476微秒,每秒支持约210万次顺序读操作;逆序读:平均每次操作耗时0.724微秒,即每秒支持约130w次逆序读操作;以上表现是未开启“压缩”功能时的结果。如果开启“压缩”选项,性能会有不同的提升。画外音:Google很老实的提到,由于100w行的数据量很小,所以这些数据完全可以放到内存中。【本文为专栏作者《58神剑》原创稿件,转载请联系原作者】点此阅读更多该作者好文