Home

protobuf之extension

最近看到的代码里, extension 字段使用越来越广泛,因此这篇笔记介绍下 extension 的使用。同时,protobuf反射详解里的 field 接口获取不到 extension 字段,因此也会介绍下关于 extension 的反射。 1. 使用 extension 用于解决字段扩展的场景,例如我们提供一个基础的 message,各个第三方都可以基于该 message 扩展新的字段,例如: // base.proto package base; message Link { optional string url = 1; extensions 1000 to 1050; } // third-party-1.proto package thirdparty1...

Read more

leveldb笔记之12:LRUCache的使用

上篇讲了 leveldb 里 LRUCache 的实现,这篇笔记继续介绍下具体的使用场景。 我最开始的理解,是 leveldb 缓存了用户写入/读取的原始 key:value 数据,实际上是错误的。leveldb 缓存了两种类型的数据:Block及Table. 接下来分别介绍下. 1. Block 通过内存缓存高频访问的 data block,避免从磁盘读取,从而提高数据的访问速率。 1.1. 初始化 在SanitizeOptions函数里初始化 if (result.block_cache == nullptr) { // 默认缓存大小为8M result.block_cache = NewLRUCache(8 << 20); } ...

Read more

leveldb笔记之11:LRUCache的实现

之前介绍multi_index_container时,使用了 LRU Cache 作为一个简单测试的例子。本文介绍下 LRU Cache 的原理以及 leveldb 里的实现。 1. 原理 Cache 用于提供对数据更高速的访问,因此存储上也更昂贵,例如 mem ssd 等,其容量通常都是有限的,因此就需要一定的缓存淘汰策略。LRU(Least recently used)就是其中一种,一句话介绍的话,就是: 淘汰最不常用的数据 wiki上有一个比较直观的例子: 读取的顺序为 A B C D E D F,缓存大小为4,括号内的数字表示排序,数字越小,表示 Least recently. 按照箭头的方向, 读取 E 时,缓存已满,因此淘汰最开始的 A. 读取 D 时,更新...

Read more

leveldb笔记之10:sstable读取

1. 简介 前面介绍了 sstable,包括 sstable 的结构组成及写入的源码分析,本文主要介绍下对应的读取过程,能够帮助读者更深入的理解一个 sstable 的数据格式。 2. 基本过程 sstable 的读取过程,简单总结就是四个字:按图索骥。 各个索引在这个过程发挥了很大的作用。 首先是 seek 到文件末尾读取固定48个字节大小的 footer,这也是为什么footer是定长的原因. 然后解析出 meta_index_block 以及 index_block。 通过 meta_index_block 解析出 filter block,通过 index_block 解析出 data_block. 查找时,先通过 filter block 查找是否存在,然后通...

Read more

2018-review-and-2019-plan

盼了很久,18年的网易云音乐还是没有年度报告。不过我自己想了下,听得最多的大概是这首《不谓侠》了,原版是萧忆情唱的,男声,我偏爱翻唱的这版,女声,听着听着仿佛有种穿越的错觉,纵马从塞外走到江南,路过树林外的小酒家,看满城飞花,对春风与红蜡。 从去年开始,便告诉自己,不再流水账似的记录总结与展望了。写这篇笔记之前,我翻了下去年笔记里的 flag,大概完成了一半不到,再往前翻,也大抵如此。然而越往前翻,感慨越多,只因看到多年前的自己,为一些事情开心、困惑、认真、烦恼,一路走来的脚印清晰起来。 1. 博客 去年定的博客更新目标是25篇,我数了下,完成了27篇。实际上早就忘了25这个数字,因此这27篇笔记,完完整整的是我想去写的,没有一篇凑数。 写的时候,我总是在想,一篇笔记写出来,怎...

Read more

3 Goals for Better Code

这篇笔记是关于 Sean Parent 在2013年的一篇演讲,题目就叫做《3 Goals for Better Code》,听完之后有比较多的共鸣和触动,因此专门记录下来。 关于 Sean Parent其人: Sean Parent is a principal scientist and software architect for Adobe Photoshop and mobile imaging applications. 1. No Raw Loops A raw loop is any loop inside a function where the function serves purpose larger than the algorithm ...

Read more