既然leveldb是一个按Key序组织的LSM-Tree实现,那么对于Key的比较就是非常之重要了,这个Key的比较在leveldb中是Comparator的形式出现的。我们首先来看看Comparator的基本方法有哪些 // 实际的比较函数 virtual int Compare(const Sl...
分类:
数据库 时间:
2014-07-07 15:40:12
阅读次数:
862
我们知道在一个数据库系统中为了保证数据的可靠性,我们都会记录对系统的操作日志。日志的功能就是用来在系统down掉的时候对数据进行恢复,所以日志系统对一个要求可靠性的存储系统是极其重要的。接下来我们分析leveldb的日志,首先在leveldb源码目录中有doc/log_format.txt,这个文件...
分类:
数据库 时间:
2014-07-07 13:20:31
阅读次数:
338
消息队列(也叫做报文队列)能够克服早期unix通信机制的一些缺点。作为早期unix通信机制之一的信号能够传送的信息量有限,后来虽然POSIX 1003.1b在信号的实时性方面作了拓广,使得信号在传递信息量方面有了相当程度的改进,但是信号这种通信方式更像"即时"的通信方式,它要求接受信号的进程在某个时...
分类:
其他好文 时间:
2014-07-01 23:05:44
阅读次数:
324
消息队列:1.每次msgrcv一个消息,1.那个消息会在内核中移除 2.每次msgrcv都只会给一个消息出来,不管你rcv用多大的buf来接收,都是可以的。如果msgrcv的bufSize小于实际的该消息的大小,那么可以设置一个标志:表示截断。 如果不设置,那么会报错。取不出来。2.消息满了,则默认...
分类:
其他好文 时间:
2014-07-01 22:56:45
阅读次数:
202
Linux IPC 参数设定-命令方式: echo 80 > /proc/sys/vm/overcommit_ratio, etcMSGMNB每个消息队列的最大字节限制。MSGMNI整个系统的最大数量的消息队列。MSGGSZ消息片断的大小(字节)。大于该值的消息被分割成多个片断。MSGSEG在单个队...
分类:
其他好文 时间:
2014-07-01 22:26:42
阅读次数:
414
SSTable是leveldb 的核心模块,这也是其称为leveldb的原因,leveldb正是通过将数据分为不同level的数据分为对应的不同的数据文件存储到磁盘之中的。为了理解其机制,我们首先看看SSTable中的基本概念。首先看看数据的整体存储结构:可以从图中看到了几个概念:Datablock...
分类:
数据库 时间:
2014-07-01 22:12:32
阅读次数:
282
上一篇文章讲述了SSTable的格式以后,本文结合源码解析SSTable是如何生成的。void TableBuilder::Add(const Slice& key, const Slice& value) {//如果已经插入过数据,那么要保证当前插入的key > 之前最后一次插入的key,// S...
分类:
数据库 时间:
2014-07-01 21:34:56
阅读次数:
469
bloomfilter是leveldb中的一大性能利器,所以为了文章的表现完整性这里新启这么一篇文章。leveldb中的bloomfilter的实现在bloom.cc中,是一个较为简单的实现,所以就不再具体进行分析。本文列出两个参考地址:那些优雅的数据结构(1) : BloomFilter——大规模...
分类:
数据库 时间:
2014-07-01 21:13:52
阅读次数:
195
在SSTable中主要存储数据的地方是data block,block_builder就是这个专门进行block的组织的地方,我们来详细看看其中的内容,其主要有Add,Finish和CurrentSizeEstimate三个函数。Finish的逻辑十分简单就是简单的将restart点信息和resta...
分类:
数据库 时间:
2014-07-01 20:51:08
阅读次数:
367
Pending Queue Size The number of messages in the queue that have yet to bedelivered to any clientDispatched Counter The number of message in the q...
分类:
其他好文 时间:
2014-07-01 00:23:41
阅读次数:
268