BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Sophia:为高负载而设计的可嵌入K/V数据库

| 作者 李小兵 关注 0 他的粉丝 发布于 2015年4月23日. 估计阅读时间: 3 分钟 | AICon 关注机器学习、计算机视觉、NLP、自动驾驶等20+AI热点技术和最新落地成功案例。

Sophia是一个为高负载而设计的可嵌入K/V数据库,基于BSD许可协议开源,代码托管在GitHub。Sophia和其架构来源于对原始算法约束的研究和重新思考,如目前日益流行的基于日志文件的数据结构(LSM-treeB-tree等)。大多数的基于日志的数据库都会将自己的文件存储作为一个存储文件的集合进行组织,并定时合并文件。当查找数据、Range时性能表现非常低。而Sophia改进了这种解决方案,它采用了只追加模式,还提供了更加快速的读取数据操作。

Sophia的主要特征如下:

  • 完全只追加的MVCC的存储引擎,旨在快速地进行写操作,并优化了读操作;
  • 支持ACID事务,基于快照隔离而实现的真正轻量级事务控制;
  • 支持异步,能够选择阻塞或非阻塞的方式执行事务处理过程;
  • 支持压缩,最少两到十倍压缩比率,压缩算法包括LZ4ZSTD
  • 基于BSD开源协议开源。

Sophia的主要存储单元是节点(Node),每个节点代表一个独立的文件,该文件被分配到内存区域(Region)索引和两个内存Key索引。节点文件有多个(Branch)组成,每个分支由一套已排序的区域和区域索引构成。一个区域持有许多具有值的Key,它同一个B-Tree页具有相同的语义,但是以不同的方式组织。区域没有树结构或者任何内部页面到页面的关系,并且因此没有元数据开销。一个区域索引由一个有序的区域表示,这些区域具有最小和最大Key以及磁盘上的引用。一个Key索引与0层的LSM-tree非常相似,但是具有不同生命周期的Key。Sophia的架构如下图所示:

Sophia的生命周期有两个主要操作构成:分支和压缩(Compaction)。当节点的内存Key索引大小达到一个特定的上线值时,或者全局内存不足时,分支操作就会如期执行。当一些节点分支计数达到一个特定上线值时,压缩操作就会以多线程模式如期执行。Sophia的所有后台操作都由特定的计划任务(Scheduler)控制,它对读操作进行了优化,最新创建的Branch(热数据)会存储在文件系统的缓存中。此外,Sophia还能够高效地利用可用内存以及具有硬盘和闪存友好特征。

Sophia的当前最新版本是1.2.2版。Sophia的性能已经基于实际场景进行了基准测试,有兴趣的读者请查看测试的结果文档。此外,官方还提供了各个版本的相关文档,如API、例子、操作手册等。


感谢郭蕾对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群InfoQ好读者)。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT