我爱造轮子 – 基于LSM tree实现的kv数据库

LSM是一种应付大数据量写入磁盘的数据结构模型,在NoSQL系统中非常常见,尤其是应对写多读少的场景非常有效。网上关于LSM的理论文章有很多,但是都仅限于原理,本着talk is cheap, show me the code的精神,这次拿github上一个基于LSM实现的key/value文件数据库keydb 为例,看一个LSM的代码实现,麻雀小五脏全,有了它定能助你在面试中唬住面试官。另外我f …

CAS的ABA问题

ABA问题本身并没有什么难理解的,可以简单用一句话来概括:线程1准备用CAS将变量的值由A替换为B,在此之前,线程2将变量的值由A替换为C,又由C替换为A,然后线程1执行CAS时发现变量的值仍然为A,所以CAS成功。 当然,如果仅仅关心最终的值是否符合预期,ABA问题并没有什么影响,这也是为什么大多数情况下我们依然可以使用AtomicInteger等数值CAS类不出问题的原因。 但是如果CAS操作 …

Mysql Limit 字句优化

LIMIT字句常用的语法类似于: LIMIT m,n, 针对不同的情况, MySQL会对查询做一些优化.总的来说性能主要由以下几个条件决定: LIMIT遍历数据量少, 性能高 LIMIT通过索引实现筛选, 性能比较高 LIMIT找到所需的数据就停止排序, 性能优于先完整排序再截取数据 语句整体能被索引覆盖, 不需要回表, 性能比较高 下面分别举例说明: 普通SELECT + LIMIT …

Java NIO极简说明

快速回顾Java NIO相关的知识. 基础概念 Three key components of NIO are: Channel Buffer Selector Channel All the data are transfer over channel which like a stream. Channel is bidirectional so it supports write and r …

Google Protobuf 编码原理

Protobuf是Google提出来的在网络间传输报文的协议,是对json,xml这些格式的替代。使用Protobuf的优势主要是: 缩小报文体积(json的1/10, xml的1/20) 报文减小带来传输效率的增加 编解码效率高(号称5~100倍的提高) 跟Json、xml是基于字符串的编码格式不同,protobuf是对字节流的编码。所以json、xml可以做到报文的自解析,比如看到一串这样的j …

Pandas常见数据结构Series、DataFrame

Series 类似于数组,主要不同在于Series可以支持索引 定义&检索 计算 总的来说Series保留了NumPy的操作,同时保持引用的作用 着重说一下自动对齐功能,再也不用for循环了。可以将两个Series中相同键名的值进行计算,有一方不存在的值为NaN DataFrame 定义&检索 相当于一个二维表,含有行索引和列索引。 注意到这里获取的顺序都是列->行,如果想获 …