自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

binling的专栏

主要是备忘性质的笔记和零言碎语

  • 博客(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

原创 都是状态机

place

2015-12-14 01:26:05 339

原创 分布式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关注的人

提示
确定要删除当前文章?
取消 删除