代码改变世界

随笔档案-2011年12月

如何利用Latex绘制圣诞树

2011-12-25 11:14 by Haippy, 1781 阅读, 收藏, 编辑
摘要: 圣诞节到了,凑个热闹,国外的Latex牛人画的圣诞树,使用了tikz包。 阅读全文

自己动手实现读写锁(read-write lock)

2011-12-17 11:04 by Haippy, 7167 阅读, 收藏, 编辑
摘要: 很多时候,我们的进程并不需要改变它所访问的数据结构,它们只是以只读的方式访问某一变量或结构某字段,此时如果多个进程同时申请访问相同的数据,为了效率起见,我们可以让这些进程同时访问它们所需要的数据,而不需要进行加锁和解锁操作,自旋锁并不区分进程是读访问还是写访问,此时使用自旋锁是很不明智的,所以精心设计的读写锁便发挥了作用。 阅读全文

自己动手实现自旋锁(spinlock)

2011-12-17 10:17 by Haippy, 7972 阅读, 收藏, 编辑
摘要: 大多数的并行程序都需要在底层使用锁机制进行同步,简单来讲,锁无非是一套简单的原语,它们保证程序(或进程)对某一资源的互斥访问来维持数据的一致性,如果没有锁机制作为保证,多个线程可能同时访问某一资源,假设没有精心设计的(很复杂)无锁算法保证程序正确执行,那么后果往往非常严重的。无锁算法难于使用,所以一般而言都使用锁来保证程序的一致性。 阅读全文

C 语言实现动态字符串

2011-12-16 20:55 by Haippy, 8087 阅读, 收藏, 编辑
摘要: 在C语言中,字符串是以连续的字节流表示的,并且以 '\0' 结尾,C语言标准库中也提供了很多函数来操作这种形式的字符串,比如,求字符串长度 strlen( ),求子串strstr( ),字符串拷贝strcpy( )等等,但是,这些函数并不安全,很可能给系统或应用程序带来严重的问题,如栈溢出等,C语言字符串中并没有记录操作系统为其分配的长度,用户必须自己将字符串长度保存在其他的变量中,很明显如果操作不当就会产生错误,如臭名昭著的缓冲区溢出。 阅读全文

NoSQL数据库笔谈(转载)

2011-12-11 19:52 by Haippy, 1214 阅读, 收藏, 编辑
摘要: NOSQL 入门必读 阅读全文

HBase vs. BigTable Comparison

2011-12-10 16:11 by Haippy, 496 阅读, 收藏, 编辑
摘要: HBase vs. BigTable Comparison 阅读全文

一致性hash算法释义

2011-12-10 09:57 by Haippy, 23540 阅读, 收藏, 编辑
摘要: 一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的(参见扩展阅读[1]),设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。 阅读全文

NoSQL 数据库汇总

2011-12-08 16:17 by Haippy, 1433 阅读, 收藏, 编辑
摘要: NoSQL资源汇总 阅读全文

幂律分布研究简史(转载)

2011-12-05 16:38 by Haippy, 3087 阅读, 收藏, 编辑
摘要: 自然界与社会生活中存在各种各样性质迥异的幂律分布现象,因而对它们的研究具有广泛而深远的意义。近年来,借助于有效的物理和数学工具,及强大的计算机运算能力,科学家们对幂律分布的本质有了进一步深层次的理解。本文从统计物理学的角度,简要介绍了幂律分布的研究史以及最新的进展,并对它的形成机制及动力学影响作了一些言简意赅的阐述。 阅读全文

Hbase 介绍(转载)

2011-12-05 16:02 by Haippy, 658 阅读, 收藏, 编辑
摘要: hbase是bigtable的开源山寨版本。是建立的hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。它介于nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。主要用来存储非结构化和半结构化的松散数据。与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。 阅读全文

Oracle NoSQL Database (转载)

2011-12-05 15:55 by Haippy, 1580 阅读, 收藏, 编辑
摘要: 近日Oracle提供了不久前公布的NoSQL数据库的下载,目前只有企业版,开源的社区版还没提供,也就是说还看不到源码。不过根据文档也能大致了解这个NoSQL数据库怎么样。快速看了看,总结如下。 阅读全文

数据分析与处理之二(Leveldb 实现原理)

2011-12-04 21:24 by Haippy, 111695 阅读, 收藏, 编辑
摘要: 首先,LevelDb是一个持久化存储的KV系统,和Redis这种内存型的KV系统不同,LevelDb不会像Redis一样狂吃内存,而是将大部分数据存储到磁盘上。 其次,LevleDb在存储数据时,是根据记录的key值有序存储的,就是说相邻的key值在存储文件中是依次顺序存储的,而应用可以自定义key大小比较函数,LevleDb会按照用户定义的比较函数依序存储这些记录。 再次,像大多数KV系统一样,LevelDb的操作接口很简单,基本操作包括写记录,读记录以及删除记录。也支持针对多条操作的原子批量操作。 另外,LevelDb支持数据快照(snapshot)功能,使得读取操作不受写操作影响,可以在读操作过程中始终看到一致的数据。 阅读全文

Storm : Twitter的实时数据处理工具(转载)

2011-12-04 21:09 by Haippy, 1520 阅读, 收藏, 编辑
摘要: Twitter在9月19日的Strange Loop大会上公布Storm的代码。这个类似于Hadoop的即时数据处理工具是BackType开发的,后来被Twitter收购用于Twitter。 阅读全文

Cassandra和HBase主要设计思路对比

2011-12-04 21:03 by Haippy, 760 阅读, 收藏, 编辑
摘要: Cassandra和HBase主要设计思路对比 阅读全文

IBM developerWorks 文章转载系列(二)

2011-12-04 20:57 by Haippy, 792 阅读, 收藏, 编辑
摘要: 寻找应用程序中占用时间最长的部分 阅读全文

IBM developerWorks 文章转载系列(一)

2011-12-04 20:56 by Haippy, 948 阅读, 收藏, 编辑
摘要: 了解 STAB 和 DWARF 这两种流行调试格式的更多信息。了解如何调试和分析构成 DWARF 和 STAB 格式的 UNIX 可执行文件。对于处理编译器和调试器的程序员以及对读取或写入 DWARF 和 STAB 信息感兴趣的任何人,本文内容非常有用。 阅读全文

[InfoQ]Twitter Storm:开源实时Hadoop (转载)

2011-12-04 20:55 by Haippy, 400 阅读, 收藏, 编辑
摘要: Twitter将Storm正式开源了,这是一个分布式的、容错的实时计算系统,它被托管在GitHub上,遵循 Eclipse Public License 1.0。Storm是由BackType开发的实时处理系统,BackType现在已在Twitter麾下。GitHub上的最新版本是Storm 0.5.2,基本是用Clojure写的。 阅读全文

MapReduce Hold不住? (转载)

2011-12-04 20:51 by Haippy, 517 阅读, 收藏, 编辑
摘要: 本文系统地介绍和分析比较了业界主流的Yahoo! S4、StreamBase和Borealis三种流式计算系统,希望读者能从这些系统的设计中领悟到不同场景下流式计算所要解决的关键问题。 阅读全文

数据分析与处理之一(大规模数据分析架构)

2011-12-04 19:41 by Haippy, 5074 阅读, 收藏, 编辑
摘要: 随着互联网、移动互联网和物联网的发展,谁也无法否认,我们已经切实地迎来了一个海量数据的时代,数据调查公司IDC预计2011年的数据总量将达到1.8万亿GB,对这些海量数据的分析已经成为一个非常重要且紧迫的需求。 阅读全文

Bloom Filter 概念和原理(转载)

2011-12-03 20:21 by Haippy, 397 阅读, 收藏, 编辑
摘要: Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive)。因此,Bloom Filter不适合那些“零错误”的应用场合。而在能容忍低错误率的应用场合下,Bloom Filter通过极少的错误换取了存储空间的极大节省。 阅读全文

锁与RCU数据共享机制

2011-12-02 16:05 by Haippy, 951 阅读, 收藏, 编辑
摘要: 在很多系统(如操作系统,数据中心)中,数据一致性访问是一个非常重要的部分,通常我们可以采用锁机制实现数据的一致性访问。例如,semaphore、spinlock、rwlock机 制,在访问共享数据时,首先访问锁资源,在获取锁资源的前提下才能实现数据的访问。这种原理很简单,根本的思想就是在访问临界资源时,首先访问一个全局的变量(锁),通过全局变量的状态来控制线程对临界资源的访问。但是,这种思想是需要硬件支持的,硬件需要配合实现全局变量(锁)的读-修改-写,现代CPU都会提供这样的原子化指令。 阅读全文