大家好,我是Carl哥。

很多小伙伴问我关于一些,项目的选择,相信如果是C++后台开发路线的话,基本都会去做WebServer 服务器

我给小伙伴答疑,包括看了这么多简历,发现WebServer这个项目是真的多,有点烂大街了

所以今天我把自己曾经开发的 KV存储引擎 给大家介绍一波,大家可以拿去当做自己的项目经验。

相信只要是搞后端的同学应该都要熟悉非关系型数据库redis吧,那么应该知道redis的存储引擎是跳表实现的

现在很多云厂商提供的云数据库,其底层都是用了Facebook开源的rocksdb,而rocksdb的底层是Google开源的Levedb,而Levedb的核心实现也是跳表

所以大家应该知道跳表的应用有多么的广泛了。

那么为什么这个项目非常合适大家用来做自己的项目经验呢?

如果你是后端开发的话,你在简历上一定会写熟悉或者了解redis吧,那么可以进一步介绍一下自己的项目用跳表实现了redis核心引擎。

面试官一定会非常感兴趣的,然后你就可以和面试官侃侃而谈你是如何用跳表实现的这个KV存储引擎的。

瞬间逼格就高了,有木有!

我在18年的时候,用跳表实现了一个轻量级KV存储引擎,代码也写的非常规范,熟悉我的录友应该知道,我的代码严格按照Google C++ style来的。

因为当时我是想把这个项目国际化的,注释和readme都是英文的,但最近我把这个项目又汉化回来了,方便大家理解。

给大家先随意看一段代码,我在注释中其实就已经在讲解跳表的运行原理了。代码使用了C++模板编程,这样接口支持任意类型的数据(包括自己自定义的类)

这个项目中的代码质量是非常高的,如果无论是C++特性的运用,还是代码风格都是绝对拿得出手的!

好了,牛逼吹完,然后给大家正式介绍一下这个项目

KV存储引擎

本项目就是基于跳表实现的轻量级键值型存储引擎,使用C++实现。插入数据、删除数据、查询数据、数据展示、数据落盘、文件加载数据,以及数据库大小显示。

在随机写读情况下,该项目每秒可处理啊请求数(QPS): 24.39w,每秒可处理读请求数(QPS): 18.41w

项目展示

文件功能:

  • main.cpp 包含skiplist.h使用跳表进行数据操作
  • skiplist.h 跳表核心实现
  • README.md 中文介绍
  • README-en.md 英文介绍
  • bin 生成可执行文件目录
  • makefile 编译脚本
  • store 数据落盘的文件存放在这个文件夹
  • stress_test_start.sh 压力测试脚本
  • LICENSE 使用协议

提供接口

  • insertElement(插入数据)
  • deleteElement(删除数据)
  • searchElement(查询数据)
  • displayList(展示已存数据)
  • dumpFile(数据落盘)
  • loadFile(文件加载数据)
  • size(返回数据规模)

存储引擎数据表现

插入操作

跳表树高:18

采用随机插入数据测试:

插入数据规模(万条) 耗时(秒)
10 0.316763
50 1.86778
100 4.10648

每秒可处理写请求数(QPS): 24.39w

取数据操作

取数据规模(万条) 耗时(秒)
10 0.47148
50 2.56373
100 5.43204

每秒可处理读请求数(QPS): 18.41w

项目运行方式

make            // complie demo main.cpp
./bin/main      // run

运行截图:(其中展示了插入数据,删除数据,展示数据等等功能)

如果想自己写程序使用这个kv存储引擎,只需要在你的CPP文件中include skiplist.h 就可以了。

可以运行如下脚本测试kv存储引擎的性能(当然你可以根据自己的需求进行修改)

sh stress_test_start.sh

项目地址:https://github.com/youngyangyang04/Skiplist-CPP

大家白嫖的同时,别忘了给个star,fork,支持一波! 录友如果最后拿到offer了,也别忘了和我道个喜哦。

Hello,我是Carl,哈工大师兄,毕业先后在腾讯、百度采坑多年,,致力于将算法讲清楚,期待你的关注。

一键三联一下好不好

BAT工程师自研存储引擎,火爆Github!!大家速度顶起来相关推荐

  1. 腾讯云发布全新非关系型数据库KeeWiDB 搭载基于英特尔傲腾技术的全自研存储引擎

    5月16日,腾讯云发布全新非关系型数据库KeeWiDB,搭载全自研存储引擎.这是腾讯云发布的首款软硬件结合.高速低延迟的NoSQL数据库产品. KeeWiDB创新性地实现三级存储架构设计,自研代码量超 ...

  2. InnoDB存储引擎内部结构

    2019独角兽企业重金招聘Python工程师标准>>> InnoDB存储引擎内部结构 从MySQL5.6开始,InnoDB是MySQL数据库的默认存储引擎.它支持事务,支持行锁和外键 ...

  3. mysql的存储引擎详解_Mysql存储引擎详解

    存储引擎的介绍 关系型数据库表是用来存储和组织信息的数据结构,可以将表理解为由行和列组成的表格. 由于表的类型不同,我们在实际开发过程中,就有可能需要各种各样的表,不同的表就意味着存储不同类型的数据, ...

  4. mysql存储base64位用什么类型_了解什么是存储引擎引发的MySQL面试3连问

    引言 1.什么是存储引擎? 2.你设计表时使用什么存储引擎? 3.不同存储引擎分别适用于哪些场景? (0)什么是存储引擎? 在数据库中存的就是一张张有着千丝万缕关系的表,所以表设计的好坏,将直接影响着 ...

  5. Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型

    1.基础知识 1.1.数据库概述 简单地说:数据库(Database或DB)是存储.管理数据的容器: 严格地说:数据库是"按照某种数据结构对数据进行组织.存储和管理的容器". 总结 ...

  6. Mysql存储引擎详解(MyISAM与InnoDB的区别)

    Mysql存储引擎详解(MyISAM与InnoDB的区别) 存储引擎     MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平 ...

  7. MySQL指定存储引擎命令_MySQL常用指令(2)——存储引擎

    MySQL常用指令(2)--存储引擎 查询MySQL支持的存储引擎 查询全部支持的引擎: show engines; ";"可以使用"\g"等价替换,而使用&q ...

  8. MySql基础知识、存储引擎与常用数据类型

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文将主要讲解了数据库的一些基础知识,介绍了MySql的存储引擎,最后讲了MySql常用的数据 ...

  9. MySQL最常用数据引擎(InnoDB、MylSAM、MEMORY)详解及如何选择合适的存储引擎

    前言 存储引擎其实就是如何存储数据,如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法.因为在关系数据库中数据是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型).在O ...

  10. 美团点评:基于Druid的Kylin存储引擎实践

    作者:康凯森 作者简介:美团大数据工程师,Apache Kylin Committer,目前主要负责美团 OLAP 系统(Kylin & Druid & Palo)的平台化建设. 8月 ...

最新文章

  1. rust矿洞绳子怎么爬下_车底下绑一根绳子妙用在哪?看看老司机怎么说!
  2. Oracle发布开源的轻量级 Java 微服务框架 Helidon
  3. 干货丨贝叶斯机器学习前沿进展
  4. 有关ubuntu16.04进行sudo apt-get update更新时出现:‘。。。N: 无法安全地用该源进行更新,所以默认禁用该源。。。’等问题解决方案
  5. 机器学习初学者公众号下载资源汇总(一)
  6. 结构化查询语言包含哪些方面?
  7. Win10 - 下方【任务栏】- 颜色设置方法
  8. Java swing实现一组图片自动轮播
  9. xp3系统登录服务器错误,WindowsXP系统LOL服务器连接异常即将退出怎么解决?
  10. ORACLE数据恢复到指定时间
  11. 写在博士旅程之前|博士第一年|博士第三年|博士第四年
  12. 大话设计模式笔记(二十四)の解释器模式
  13. 最近抖音上虚拟元宇宙项目-猜歌名,代码解析
  14. cdr 表格自动填充文字_【Excel技巧】excel单元格自动填充英文字母编号
  15. echarts(一)之地图连线动效
  16. 【日志分析】Web日志分析
  17. 英文XP如何正常显示中文
  18. 计算机基础——进制与数据编码
  19. adb 强制删除系统应用
  20. ADI官网资料检索技巧

热门文章

  1. 在mac上用parallels创建双windows虚拟机调试windows驱动
  2. NYOJ12 喷水装置(二)
  3. opencv_haartraining.exe 分类器训练----命令执行,执行项学习(1)
  4. 【转】mybatis在xml文件中处理大于号小于号的方法
  5. 漏洞扫描产品评测打分项
  6. Deeplabv3+-训练自己的数据集
  7. Java过滤emoji表情,找出emoji的unicode范围。
  8. 洛谷P3379 【模板】最近公共祖先(LCA)(树链剖分)
  9. 【t092】迷之阶梯
  10. Jumpserver代码规范