摘要:
https://www.cnblogs.com/LubinLew/p/CppNamespace.html 阅读全文
摘要:
C++类成员函数分为静态成员函数和非静态成员函数,而非静态成员函数又分为普通函数和虚函数。 Q: 为什么使用虚函数 A: 使用虚函数,我们可以获得良好的可扩展性。在一个设计比较好的面向对象程序中,大多数函数都是与基类的接口进行通信。因为使用基类接口时,调用基类接口的程序不需要改变就可以适应新类。如果 阅读全文
摘要:
LevelDB文件类型 下面的log文件,sst文件,临时文件,清单文件末尾都带着序列号,序号是单调递增的(随着next_file_number从1开始递增),以保证不会和之前的文件名重复。另外,注意区分db log与info log:前者是为了保障数据安全而实现的二进制Log,后者是打印引擎中间运 阅读全文
摘要:
一、LevelDB简介 LevelDB是Google开源的持久化KV单机数据库,具有很高的随机写,顺序读/写性能,但是随机读的性能很一般,也就是说,LevelDB很适合应用在查询较少,而写很多的场景。LevelDB应用了LSM (Log Structured Merge) 策略,lsm_tree对索 阅读全文
摘要:
leveldb的write代码初看瞎搞一堆,细看则实为短小精悍。1 Status DBImpl::Write(const WriteOptions& options, WriteBatch* my_batch) { 2 // A begin 3 Writer w(&mutex_); 4 w.batc 阅读全文
摘要:
deque容器为一个给定类型的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高效地插入和删除容器的尾部元素。但它又与vector不同,deque支持高效插入和删除容器的头部元素,因此也叫做双端队列。deque类常用的函数如下。 (1) 构造函数 deque():创建一个空de 阅读全文
摘要:
1. LevelDB的写数据过程 在LevelDB中,我们通过调用db->Put(WriteOptions(),&key,&value)来写入数据,而WriteOptions只有一个变量sync,且默认初始值为false,因此leveldb默认的写数据方式是异步,即每将写操作提交将数据写入到内存中就 阅读全文
摘要:
在 2006 年的 OSDI 上,Google 发布了名为 Bigtable: A Distributed Storage System for Structured Data 的论文,其中描述了一个用于管理结构化数据的分布式存储系统 - Bigtable 的数据模型、接口以及实现等内容。 本文会先 阅读全文
摘要:
说明:这篇文章主要介绍了理解LevelDB所需要的一些基础知识,主要是一些基础代码和基本机制。了解这些有助于对LevelDB的理解 ,同时这些实现基本上都出自Sanjay和Jeff Dean(Google GFS MapReduce Bigtable的缔造者)之手,其中的很多实现都非常不错,值得学习 阅读全文