专栏首页roseduan写字的地方rosedb 支持了一个实用的特性

rosedb 支持了一个实用的特性

在 rosedb 最开始的设计当中,为了更方便的对数据进行 read 和 write,方法只能传入和输出字节数组类型的参数,即 []byte

但是,在我后续使用时,常常会发现这样不太方便,例如一个字符串 string 类型,也得强制转换成 []byte 才行,代码看起来不是很简洁,如果是 struct 类型就更不必说了。

于是我就想到去支持任意类型的参数(interface{}),思路其实很简单,主要就是利用了序列化的方式,将任意类型的参数转换成 []byte 类型,在获取数据时,需要传入目标类型对其进行反序列化。

目前 Go 语言的序列化和反序列化工具很多,自带的有 json、xml、gob 等,在选择序列化工具时,主要参考了鸟窝大佬的一个 Benchmark,对一些比较流行的序列化库做了测试,能够很好的看到各个库的性能表现。

参考文章:https://colobu.com/2015/09/28/Golang-Serializer-Benchmark-Comparison/

Github 地址:https://github.com/smallnest/gosercomp

最后选择了 msgpack 这个库,这个库的 Marshal 和 UnMarshall 都在 100 纳秒左右,性能很好,并且是开箱即用,序列化后的 size 很小。

在 msgpack 的官网介绍中,我看到 Redis 其实也用到了这个序列化库。

做了简单的集成之后,就可以往 rosedb 里面设置任意类型的值了:

tests := []struct {
   key interface{}
   val interface{}
}{
   {"aaa", nil},
   {nil, "bbb"},
   {[]byte("kk2"), []byte("rosedb5")},
   {true, 1232},
   {false, 1232},
   {float32(4.4122), float32(9102.22)},
   {"kk44", "c"},
   {1, 34},
}

for _, tt := range tests {
   err := roseDB.Set(tt.key, tt.val)
   assert.Equal(t, err, nil)
}

一个开源项目,依靠绝对的性能表现去制胜其实是不太现实的,易用性,文档的完善,包括社区等都是非常重要的组成要素,在 rosedb 上去做这些与性能无关的功能,其实就是基于这个考虑。

最后说一句,目前 rosedb 项目还比较基础,如果你对 k-v、存储方面感兴趣的话,可以加入到项目中来,共同完善,相信这也能够自身的能力有一个很大的提升。

目前已经有几位优秀的小伙伴主动联系到我了,欢迎有更多的人加入进来!

ps: 可加我 vx 细聊:kiss_duan

本文分享自微信公众号 - roseduan写字的地方(rose_duan),作者:roseduan

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-09-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • rosedb 事务实践

    事务是传统关系型数据库中必不可少的功能,例如 Mysql、Oracle、PostgreSql 都支持事务,但是在 NoSQL 数据库中,事务的概念比较弱化,在实...

    roseduan
  • 一个 Go 语言实现的数据库

    rosedb 是一个稳定、高性能、快速、内嵌的 k-v 数据库,支持多种数据结构,包含 String、List、Hash、Set、Sorted Set,接口名称...

    逆锋起笔
  • 使用 Go 语言写一个数据库—6 完结撒花

    Hello 大家好,我是 roseduan,前面的几篇文章,我已经讲述了 rosedb 最基础也是最核心的知识,如果你没有印象的话,可以温习一下:

    roseduan
  • 我写了一个数据库。。。

    大家好,我是 roseduan,今天我向大家推荐一下我写的一个 Go 语言实战项目—rosedb。

    roseduan
  • 使用 Go 语言写一个数据库—5 命令行

    Hello 大家好,我是 roseduan,上一次给大家分享了 rosedb 项目当中所涉及到的一些数据结构,有链表、哈希表、跳表、有序集合,内容比较的硬核,你...

    roseduan
  • 使用 Go 语言写一个数据库—3 数据库操作

    在前面的两篇文章当中,我给大家介绍了 rosedb 的基础结构,以及基本的数据操作流程。

    roseduan
  • 从零实现一个 k-v 存储引擎

    写这篇文章的目的,是为了帮助更多的人理解 rosedb,我会从零开始实现一个简单的包含 PUT、GET、DELETE 操作的 k-v 存储引擎。

    roseduan
  • 开源月刊《HelloGitHub》第 62 期

    这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、Java、Go、C/C++、Swift...让你在短时间内感受到开源...

    HelloGitHub
  • rosedb 连续两天上榜

    昨天上午,我刚打开电脑,习惯性的逛了一下 Github ,点开了 Trending。因为 GIthub Trending 精选了一些最近比较活跃并且优质的开源项...

    roseduan
  • MySQL 8.0 的 5 个新特性,太实用了!

    MySQL 8.0 当前已经被众多国内公司使用了。本文介绍几个 8.0 在关系数据库方面的主要新特性。

    业余草
  • 使用 Go 语言写一个数据库—2 基本数据操作

    上一次给大家介绍了 rosedb 的基本结构:使用 Go 语言写一个数据库—1 基本结构

    roseduan
  • 转岗记

    最近我的工作方面发生了一些变化,先说结论:我通过内部转岗的方式,正式加入到 B 站基础架构部,会去做分布式存储相关的工作了。

    roseduan
  • 一文看懂ios 11所有特性,不再支持32位应用

    这些改进的重点是提高iOS设备的运行速度,以及一些视觉调整和提高可用性,此外还有目前仅为iPad Pro系列产品开发的新的功能特性。 ? 这一系统更新在太平洋时...

    BestSDK
  • WPF 简单实现一个支持删除自身的应用

    我准备写一个逗比的应用,然而我担心被小伙伴看到这个应用的文件从而知道是我写的,于是我就需要实现让应用能自删除的功能。核心实现方法就是调用 cmd 传入命令行,等...

    林德熙
  • 开源项目申请 Jetbrains 免费授权

    在某宝购买的 Jetbrains 授权激活总是不太靠谱,运气不好的话,过不了几天就会失效。公司也暂时没购买正版授权,网上找的激活码也不太行,相信很多人跟我有同样...

    roseduan
  • dotnet 写一个支持层层继承属性的对象

    我最近在造一个比 Excel 差得多的表格控件,其中一个需求是属性的继承。大家都知道,表格里面有单元格,单元格里面允许放文本,文本可以放多段文本。本文的主角就是...

    林德熙
  • 十个超级实用的 ES6 特性

    “ 关注 前端开发社区 ,回复 '领取资源',免费领取Vue,小程序,Node Js,前端开发用的插件以及面试视频等学习资料,让我们一起学习,一起进步

    前端老道
  • Java 8的这个新特性,你用了吗?

    今天写的一个方法,如下,实现的功能就是将数据库中的表字段获取,存在map 中,将前端传过来的数据存在map 中。

    程序员爱酸奶
  • 12个新特性!K吧课堂支持独立开课、沉浸式全屏直播来了!

    ? 近期,腾讯乐享“偷偷”更新了一些新特性,乐乐盘点了直播、课堂、文档、论坛四大功能的12个新特性,你尝试过了吗? 直  播 1 小程序观看直播支持切换流畅模...

    腾讯乐享

扫码关注云+社区

领取腾讯云代金券