写点什么

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

  • 2015-04-22
  • 本文字数:1025 字

    阅读完需:约 3 分钟

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

Sophia 的主要特征如下:

  • 完全只追加的 MVCC 的存储引擎,旨在快速地进行写操作,并优化了读操作;
  • 支持 ACID 事务,基于快照隔离而实现的真正轻量级事务控制;
  • 支持异步,能够选择阻塞或非阻塞的方式执行事务处理过程;
  • 支持压缩,最少两到十倍压缩比率,压缩算法包括 LZ4 ZSTD
  • 基于 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 读者交流群)。

2015-04-22 08:352591
用户头像

发布了 46 篇内容, 共 50.0 次阅读, 收获喜欢 14 次。

关注

评论

发布
暂无评论
发现更多内容

基于多数据源零代码同时生成多个数据库CRUD增删改查RESTful API接口——MySql,PostgreSql,Oracle,Microsoft SQL Server多数据源

crudapi

Java 数据库 Spring Boot crudapi 多数据源

Python 有哪些好玩的语法糖?

Jackpop

Envoy生命周期管理

阿泽🧸

envoy 7月月更

zookeeper-认识watcher

zarmnosaj

7月月更

开发者必看 | DevWeekly 第1期:什么是时间复杂度?

Jackpop

JVM-SANDBOX导致目标服务JVM Metaspace OOM的调查始末

柠檬汁Code(binbin0325)

互联网 字节码增强 故障排查

CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes)(A-C)

KEY.L

7月月更

数据库的主从分离

ES_her0

7月月更

Markdown 基本语法格式

攻城狮杰森

markdown 7月月更

带领全网朋友,完成粉笔登录加密分析,再次换种玩法

梦想橡皮擦

Python 爬虫 7月月更

新星计划Day9【数据结构与算法】 递归

京与旧铺

7月月更

为什么加工数据指标

奔向架构师

数据仓库 7月月更

Python中除了lambda函数能实现一句话程序,还有什么方式能够实现呢?

迷彩

Lambda Function 7月月更 推导式

如何优雅地使用 Git?

Jackpop

不要在白嫖Github了!

Jackpop

面试官:工作两年了,这么简单的算法题你都不会?

掘金安东尼

程序员 面试 算法 前端 7月月更

putchar()

謓泽

7月月更

一次业务问题对ES的cardinality原理探究

Chares

Java elasticsearch 后端开发 问题排查 问题分析

如何高效系统学习 MySQL?

Jackpop

值得收藏的ArkUI框架三方组件【系列1】

坚果

HarmonyOS Open Harmony 7月月更

ES6之箭头函数

bo

前端 ES6 箭头函数 7月月更

笔记

IT蜗壳-Tango

7月月更

机器学习|BP(Back Propagation)神经网络

AXYZdong

机器学习 7月月更

Bigdata 作业 第14&15周

Pyel

基于crudapi后端Java SDK二次开发之API认证和鉴权(二)

crudapi

API Cookie JWT crud basic auth

HMS Core图形图像技术展现最新功能和应用场景,加速构建数智生活

最新动态

jQuery 操作元素

Jason199

jquery js 7月月更

MySQL到底是如何执行SQL语句的

技术小生

MySQL 7月月更

MySQL 5.7.37数据库下载安装教程(Windows无需安装版)

未见花闻

7月月更

为什么 Nodejs 这么快?

devpoint

nodejs V8 视频流 7月月更

应用的无状态设计

穿过生命散发芬芳

7月月更 应用无状态

Sophia:为高负载而设计的可嵌入K/V数据库_数据库_李小兵_InfoQ精选文章