开发者社区> 问答> 正文

一种高性能存储引擎设计思路

scofier 2017-04-12 14:06:41 1369

前言

通常,非关系型数据库写性能相对关系数据库会高一些,比如kv,nosql,mq等等。其中一个重要原因是这些引擎不需要处理数据的详细数据类型和数据之间的约束,甚之事务也无需处理。

在业务系统中,为了提高写性能我们有时会前置增加mq挡住高并发写,然后定时或者异步处理队列的数据。 这种方式业务需要处理异步,以及数据没有持久化到数据库的读取操作。而这个过程比较抽象,基本无业务相关性。

现实生活中的一个场景

寄快递大家都很熟悉, 找个盒子或者袋子装上需要寄送的东西,然后贴上快递单,就可以寄出去了。当然快递员可能会询问邮寄的内容,甚之会打开查看,但是这样时效性就慢了。

我们这样假定:
1、快递员不拆包检查内容
2、快递员提供快递袋子和快递单
3、收货人检查快递内容,有问题退货
4、寄货人保证快递的东西是合法的

新的存储引擎思路

根据上面的例子,存储引擎的思路也就很清晰了:

1、存储引擎预先不检查数据内容
2、按照kv方式预先存储,然后返回存储成功
3、业务触发对存储数据进行拆包,比如将nosql转换为关系数据
4、也可以尝试存储引擎主动异步解包,异常信息作为数据的一部分
5、存储引擎只校验key主键的唯一性
6、事务处理暂不考虑

存储 NoSQL 关系型数据库 数据库
分享到
取消 提交回答
全部回答(3)
  • yu_hc200
    2019-07-17 21:02:44

    一般存储使用场景是读多于写,在写上的优化不能以牺牲读为代价。如果要提升写入速度,常见的做法是做拆分,多点写入的结构是可以扩展的。

    0 0
  • hill007299
    2019-07-17 21:02:44

    这样读的性能岂不是会变慢,可以多参考下leveldb的实现。

    0 0
  • scofier
    2019-07-17 21:02:44

    自己顶一个

    1 0
添加回答
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

推荐文章
相似问题
推荐课程