2014年8月7日

【转】PaxosLease算法--2PC看Paxos选主

摘要:原文请参考【[置顶]Paxos master选举--PaxosLease算法】众所周知,为了避免Paxos算法的活锁问题,必须选举唯一的proposor。偏偏在Paxos原论文中,作者L. Lamport不屑于讨论这个问题,因为选举过程中,即使出现多个master共存,也不影响Paxos算法正确性。... 阅读全文

posted @ 2014-08-07 10:54 tgates 阅读(903) 评论(0) 推荐(0) 编辑

[转] Paxos算法2-算法过程(实现)

摘要:请先参考前文:Paxos算法11.编号处理根据P2c,proposer在提案前会先咨询acceptor查看其批准的最大的编号和value,再决定提交哪个value。之前我们一直强调更高编号的proposal,而没有说明低编号的proposal该怎么处理。|--------低编号(LN)-------... 阅读全文

posted @ 2014-08-07 10:08 tgates 阅读(227) 评论(0) 推荐(0) 编辑

开篇

摘要:开篇说明,本分类转发整理一些分布式算法,如有版权问题请联系msg4t@gmail.com,本人会尽快修改或者删除相应类容。 阅读全文

posted @ 2014-08-07 09:41 tgates 阅读(122) 评论(0) 推荐(0) 编辑

2014年8月3日

tair源码分析——leveldb新增的CompactRangeSelfLevel过程

摘要:tair是一个分布式KV存储引擎,当新增机器或者有机器down掉的时候,tair的dataserver会根据ConfigServer生成的新的对照表进行数据的迁移和清理。在数据清理的过程中就用到了在tair中新增的Compaction方式——CompactRangeSelfLevel,顾名思义,这个... 阅读全文

posted @ 2014-08-03 11:02 tgates 阅读(1126) 评论(0) 推荐(0) 编辑

2014年7月29日

leveldb源码分析—Recover和Repair

摘要:leveldb作为一个KV存储引擎将数据持久化到磁盘,而对于一个存储引擎来说在存储过程中因为一些其他原因导致程序down掉甚至数据文件被破坏等都会导致程序不能按正常流程再次启动。那么遇到这些状况以后如何使程序最大程度的恢复数据就是非常重要的一项工作,leveldb也提供了这方面的工作。首先来看rec... 阅读全文

posted @ 2014-07-29 15:14 tgates 阅读(2277) 评论(0) 推荐(0) 编辑

2014年7月27日

tair源码分析——leveldb存储引擎使用

摘要:分析完leveldb以后,接下来的时间准备队tair的源码进行阅读和分析。我们刚刚分析完了leveldb而在tair中leveldb是其几大存储引擎之一,所以我们这里首先从tair对leveldb的使用和修改来窥探在这个分布式的存储引擎中是如何将area和bucket持久化到存储,并且方便bucke... 阅读全文

posted @ 2014-07-27 17:03 tgates 阅读(1765) 评论(0) 推荐(0) 编辑

2014年7月5日

leveldb源码分析--Iterator遍历数据库

摘要:在DBImpl中有一个函数声明为Iterator* DBImpl::NewIterator(const ReadOptions& options) ,他返回一个可以遍历或者搜索数据库的迭代器句柄。 Iterator* DBImpl::NewIterator(const ReadOptions& options) { SequenceNumber latest_snapshot; uin... 阅读全文

posted @ 2014-07-05 23:07 tgates 阅读(3971) 评论(0) 推荐(0) 编辑

2014年7月3日

mmap 与 read/write

摘要:mmap与read/write两条路线对文件的访问比较 我们知道无论是通过mmap或read/write访问文件在内核中都必须经过缓存, 当需要从文件读写内容时,都经过内存拷贝的方式与内核中的缓存进行通讯。 1. 用read/write方式,用户须向内核指定要读多少,内核再把得到的内容从内核缓存拷向用户空间;写也须要有一个大致如此的过程。 2. mmap的作用是通过把文件的某... 阅读全文

posted @ 2014-07-03 20:26 tgates 阅读(336) 评论(0) 推荐(0) 编辑

linux 同步IO: sync msync、fsync、fdatasync与 fflush

摘要:最近阅读leveldb源码,作为一个保证可靠性的kv数据库其数据与磁盘的交互可谓是极其关键,其中涉及到了不少内存和磁盘同步的操作和策略。为了加深理解,从网上整理了linux池畔同步IO相关的函数,这里做一个罗列和对比。大部分为copy,仅为记录,请各位看官勿喷。 传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘I/O都通过缓冲进行。当将数据写入文件时,内核通常先将该数据复制到... 阅读全文

posted @ 2014-07-03 20:22 tgates 阅读(3717) 评论(0) 推荐(0) 编辑

LevelDB源码分析--使用Iterator简化代码设计

摘要:我们先来参考来至使用Iterator简化代码2-TwoLevelIterator的例子,略微修改希望能帮助更加容易立即,如果有不理解请各位看客阅读原文。下面我们再来看一个例子,我们为一个书店写程序,书店里有许多书Book,每个书架(BookShelf)上有多本书。类结构如下所示class Book ... 阅读全文

posted @ 2014-07-03 20:01 tgates 阅读(1419) 评论(0) 推荐(0) 编辑

导航