- 博客(14)
- 收藏
- 关注
原创 由SSTable想到的:快速的,可读可写的,实时的,Persistent的data store方案
搜索引擎那样的,如Lucene, MDS等,先build index,然后用index提供查询服务。index是基于某一时刻的snapshot的index,是滞后的并不实时反应数据的变化。内存数据结构,如平衡树,hashtable等,不是persistent的类似数据库那样的,用B+树在磁盘上组织数据,是一个可选方案,缺点是虽然B+树已经很低,但是因为是基于磁盘的,每一次都
2015-12-29 14:03:03 562
原创 几种自旋锁SpinLock,TicketLock,CLHLock,以及可重入实现要点,非阻塞锁实现要点
最核心的东西:synchronization state,同步状态:指示当前线程是否可以proceed还是需要wait的状态。1.普通SpinLock (支持可重入的版本)class SpinLock { private AtomicReference owner = new AtomicReference(); // use thread itself as synchronizat
2015-12-28 17:03:22 5343 3
原创 我的java DCL-based Singleton
1)instance完全创建好了,另一个线程得到的还是null:用volatile解决2)对象内存块地址赋给了instance,但对象还没完全construct完毕:先访问一下对象,再赋instance,class Singleton { private volatile Singleton instance = null; private Singleton() {} public
2015-12-21 15:59:55 454
原创 再谈搜索,索引等问题
索引的本质是关联、link,key -> 记录地址( row locator等)或者字段 -> 主Id 的一个映射正排索引:id -> (col1, col2, col3), docId - > { wordId }倒排索引:col -> id, wordId -> docId为什么需要倒排索引?关系是这样的:用col 通过倒排索引得到Id, 进而用Id通过正排得到整体,也就是得到
2015-12-21 12:14:15 494
原创 事务的并发控制big picture
Goal:即满足一致性又尽量提高吞吐量Sequential equivalence checking: 两个事务的所有conflicting operation pair的相对顺序都是一样的悲观并发控制:用锁实现 Sequential equivalence锁的理解,2个作用1)基本数据完整性,防止同时修改导致的坏数据,2)操作完整性、事务完整性,复合状态的完整性,比如
2015-12-19 21:51:47 592
原创 Java中 Happen-before 规则总结
详细见:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html比较重要的几条1)Actions prior to "releasing" synchronizer methods such as Lock.unlock,Semaphore.release, and CountD
2015-12-18 16:20:39 1500
原创 MVCC 、CAS 和CopyOnWrite
update一行的时候的时候不是in-place的修改,而是产生一个行的新版本,在新行上修改,最后有点类似copy on write array,在提交的时候切换到新版本。好处是不影响现有数据的读取,一致性好。概括为:准备数据 + 原子commit 切换版本,和无锁数据结构实现的思路很像,先准备好数据,最后往结构上挂的那一下用CAS原子性保证。MVCC是把一个复杂事务的原子性问题转化到comm
2015-12-17 16:55:21 1971
原创 version vector 和 vector timestamp(clock)
version vector 和 vector timestamp是 causality 关系的在分布式系统两个领域上的应用,前者是replica之间的causality关系,后者是event 的的causality关系对于前者一般用compatible 和 conflict,后者一般用happen-before 和 concurrent两个replica的version是compatib
2015-12-16 16:21:15 1217
原创 分布式Process之三: Time and Ordering
1 two approach to order events across process1)synchronize global clock, use absolute time2)use logical time-stamp本文关注第二个方法。2 Happen-Before关系定义逻辑关系 happen-before (" -> ") among pairs of ...
2015-12-14 16:54:40 964
原创 分布式process总结之二:Mutual Exclusion
没有单机情况下OS这个共同媒介。有的只是process之间互发消息。三个目标1)safety (essential) : 没有2个process同时进入CS (no bad thing happen)2)liveness (essential) 最终每个进入CS的请求都会被满足 (wanted thing happen)3)ordering (desirable) FIFOc
2015-12-08 14:30:59 2955
原创 分布式process总结之一:Multicast,Membership,Election
从一个分布式系统面临的一般问题:1 Multicast 问题centralspan tree basedgossip2 membership 维护问题
2015-12-06 13:11:25 1058
原创 程序 = 核心direct问题 + 子问题的关系、顺序
比如快排,核心问题就是partition,然后就是一系列的partition问题的求解merge sort,核心问题是merge一个数组的有序的前后两个部分,然后就是一些列merge问题的求解,这里所谓核心问题,就是直接的操作,直接的去解决的问题,而不是递归到另一个问题的的问题。对应于循环体,或者递归函数里的非递归部分。核心问题不会很复杂,partition和merge已经是很复杂的了
2015-12-06 00:42:32 489
原创 双向BFS搜索和A*算法
适合给出起点和终点,求最短路径的问题分别从起点和终点扩展,每次选择待扩展节点少的那个方向进行扩展,扩展一层。然后下一轮。int doubleBFS(int start, int end, vector> &G) { vector marked[2] {vector(G.size()), vector(G.size())}; //including dead nodes and to-be
2015-12-03 11:22:30 4141
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人