Aiden Blog

Avro 的基本使用 | Avro 篇

Apache Avro 是一个数据序列化系统。 Avro 提供: 丰富的数据结构。 一种紧凑、快速的二进制数据格式。 一个容器文件,用于存储持久数据。 远程过程调用 (RPC)。 与动态语言的简单集成。代码生成不需要读取或写入数据文件,也不需要使用或实现 RPC 协议。代码生成作为一种可选的优化,只值得为静态类型语言实现。 Avro 依赖于Schema。在读取或者...

Leveldb MVCC实现细节 | leveldb 篇

leveldb 使用VersionSet来维护SST的变更记录,SST的变更主要发生在Compaction环节,分为Minor compaction与Major compaction。 Minor compaction发生在MemTable数据容量超过限制溢出到SST。 Manor compaction发生在sst达到了触发合并条件,数据写出到下一层level. VersionSet...

Leveldb 数据读取流程 | leveldb 篇

leveldb 数据读取经过三个阶段 : 从MemTable中查找数据 从IMemTable(将要被刷到磁盘的MemTable)中查找数据 从SST中查找数据 // db_impl.cc // DBImpl::Get 方法 { mutex_.Unlock(); LookupKey lkey(key, snapshot); ...

Leveldb 数据写入流程 | leveldb 篇

LevelDB 数据插入大致分成两个阶段: 写内存,写磁盘 用户当前插入的数据会被记录在MemTable中,这是一个基于内存的数据查询引擎。 当MemTable中数据插入超过一定的容量后,此时会重新开一个MemTable, 用于应对客户端的写请求。 写满的MemTable将会被异步刷盘,形成SSTable. key细节部分 用户提交的key(UserKey)在level...

SSTable 文件格式 | leveldb 篇

前言 leveldb 将持久化的数据分成若干个sst文件来保存, sst 分成若干层,最高到第7层[0,1,2,3,4,5,6] sst文件名格式为 {file_number}.ldb, 如上所示, leveldb定期将内存中存满的数据落地到磁盘形成SST 因为level0层SST是从MemTable中dump下来的,所以SST之间数据可能存在重叠,但是它也有新旧之分,ss...

CRC校验算法

背景 CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。 循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。 其根本思想就是先在要发送的数据字节流后面附加几个校验位,生成一个新的字节流发送给接收端。 校验位的生成是通过...

布隆过滤器(BloomFilter)

背景 在平常生活中,包括在设计计算机软件时,我们经常要判断一个元素是否在一个集合中。 比如在 FBI,一个嫌疑人的名字是否已经在嫌疑名单上;在网络爬虫里,一个网址是否被访问过等等。 最直接的方法就是将集合中全部的元素存在计算机中,遇到一个新元素时,将它和集合中的元素直接比较即可。一般来讲,计算机中的集合是用哈希表(hash table)来存储的。它的好处是快速准确,缺点是浪费存储空间。...

BigTable 论文论文精读

摘要 BigTable是一个分布式存储系统,他可以支持PB级别的数据,包括几千个商业服务器。 Google的许多项目都存储在BigTable上,包括WEB索引、Google Earth 和Google Finance。这些应用对BigTable提出了截然不同的需求,无论是从数据量(从URL到网页到卫星图像)而言,还是从延迟需求(从后端批量处理到实时数据服务)而言。 尽管这些不同的需求,...

C++ 教程 | C++ 类型转换

C++强制类型转换: 在C++语言中新增了四个关键字 static_cast, const_cast, reinterpret_cast 和 dynamic_cast. 这四个关键字都是用于强制类型转换的。 新类型的强制转换可以提供更好的控制强制转换过程,允许控制各种不同种类的强制转换。 C++中风格是 static_cast<type>(content)。 C++ 风...

机器学习篇 | 支持向量机svm

引入 svm 解决二分类问题, 对于样本的向量空间分布集, svm 旨在要寻找一个分割面,将样本集按照分类标签正确的分割开来。我们称这个分割平面为分离超平面。 假设空间样本集是可分割的, 那么总存在无数个超平面可以将样本集分割, 如何才能找到一个最优的超平面? svm 的目标是找一个最优超平面,使得距离超平面最近的点的间隔距离最大化。 这个距离超平面最近的点就是支持向量。 首先定...