LMDB调研

事务管理

LMDB中所有的读写都是通过事务来执行,LMDB事务具备以下特点:

  • 支持事务嵌套(??)
  • 读写事务可以并发执行,但写写事务需要被串行化

因此,在lmdb实现中,为了保证写事务的串行化执行,事务执行之前首先要获取全局的写锁。

Continue reading LMDB调研

下一个五年规划

工作

  1. 对各种存储引擎了如指掌,对底层存储引擎所使用的技术如数家珍,存储引擎包括但不局限于LMDB,BoltDB,LevelDB,Mysql使用的底层存储引擎如InnoDB以及ZFS的底层存储技术;存储引擎核心技术包括但不局限于:COW (Copy-On-Write),Snapshot,CheckPoint,LSM tree,B+ tree等
  2. 精通各种分布式协议以及由其构建的分布式系统,包括但不局限于 Raft, Paxos, 2PC,3PC,ZAB(Zookeeper使用)等
  3. 精通至少两门编程语言,至少一门为FP编程,目前来看以Golang和Lisp为佳。Golang需要融汇贯通其各方面的设计,包括“内存管理”、“协程调度”、“垃圾回收”等核心模块,并撰写成相关书籍。
  4. 精通设计模式,对GOF的23种设计模式烂熟于心,并能根据需求选择最佳模式
  5. 熟悉内核(Linux),理解内核某些关键模块的思路,包括但不局限于“进程调度”、“文件系统”、“块设备”、“内存管理”,争取做到熟悉其核心数据结构以及某些极其关键算法(如进程调度算法、电梯调度算法等)。同时读内核时要学习Linux内核高度抽象化和可扩展化的代码编写手法,指导自己的日常工作。
  6. 关注当前技术趋势,关注开源技术,尤其是新思想,新变革以及在此思潮下产生的新产品,新服务(包括但不局限于云计算、物联网、人工智能等)。

生活

  1. 提升个人品味,从穿衣打扮做起,在现有经济基础下,找到最适合自己的风格
  2. 提升内在休养,读万卷书并行万里路,读万卷书以为胸中有丘壑,行万里路方可脚踏实地。读书以史为镜,以诗为美,以小说寄闲情,以散文抒胸臆。
  3. 培养兴趣爱好,目前以吉他与厨艺为主,吉他是无论如何都要擅长的,且主攻指弹,厨艺则随缘,如同油盐酱醋,作为生活的调料。另外,闲暇时可研究花草种植,进一步提升家居温馨之品位。
  4. 健身锻炼,饮食以清淡为主,粗细搭配,营养均衡。运动上则至少每周两天10KM+的跑步,辅以其他运动项目,如游泳,篮球,跳神,俯卧撑等,全面提升身体素质。
  5. 旅游,借浙江之天然区位优势,将周边优美景点一网打尽。争取做到每个季度能背包出去一次,时间2~3天不等

世上本无难事,唯不懈的付出方能成就美满人生,与君共勉!

桃花坞里桃花庵,桃花庵里桃花仙
桃花仙人种桃树,又摘桃花换酒钱
酒醒只在花间坐,酒醉还来花下眠
半醒半醉日复日,花开花落年复年
但愿老死花酒间,不愿鞠躬车马前
车尘马足贵者趣,酒盏花枝贫者缘
若将贫贱比贫者,一在平地一在天
若将贫贱比车马,他得驱驰我得闲
世人笑我太疯癫,我笑他人看不穿
不见五陵豪杰墓,无花无酒锄作田

浅谈BoltDB的数据结构设计

前言

伟大的Linus曾说过下面的话:

“烂程序员关心的是代码。好程序员关心的是数据结构和它们之间的关系。”

以前的我在阅读开源代码时,经常过于痴迷于复杂的业务逻辑,而不能自拔。每每将仔细陷入一种痛苦万分却又无可奈何的境地,苦不堪言却也收获甚微。

Continue reading 浅谈BoltDB的数据结构设计

BoltDB之Bucket(二)

前言

我们在前面的博客中详细描述了BoltDB的Bucket存储格式以及针对Bucket的一些关键动作。但在前讲我们关注的重点是Inline Bucket,也即Bucket内所有的KV记录都紧随Bucket的记录而存放,这样可以提高Bucket的搜寻效率。

但随着数据量的增长,一个Bucket无法永远保存Inline的特性,总会在某个点的时候,Inline Bucket终究还是要成为非Inline Bucket,在本篇博客中,我们就来关注一个Inline Bucket如何变成非Inline Bucket以及非Inline Bucket在BoltDB底层的存储形式。

Continue reading BoltDB之Bucket(二)

BoltDB之Bucket(一)

概述

BoltDB中的Bucket类似于传统关系型数据库的”表”。BoltDB通过Bucket将一个庞大的数据库划分成诸多的命名空间。用户在每个命名空间内存储KV数据,通过此种办法可以提高数据的搜索效率。
例如,一个BoltDB中可:

  • 创建User Bucket,用于记录用户信息(存储的K是用户名,而Value是用户详情)
  • 创建Order Bucket,用户记录用户订单信息(存储的K是用户名,而Value则是订单详情)
  • ……

Continue reading BoltDB之Bucket(一)