Real-time Search in Twitter (3)

上一篇谈到了整个inverted index在内存中的结构和组织。核心的思想是尽可能的用int[]这样的原生数组去代替大量的object,这样GC会快很多。

其实还有一个很大的好处是,同样数据的内存占用会少很多。一个java object的额外的内存开销是很大的。上面的这个技巧在用java操作大数据的时候经常能用到。

下面说说concurrency的问题。

———————————

Java Memory Model

image

Concurrency

image

对于内存中每个Inverted Index,存在一个writer和多个reader。所以,concurrency面临的任务就是保证writer的写入操作不影响到reader的读操作。

它使用了一个volatile变量解决了这个问题:

image

这个free-lock方案的核心还是在于只有一个writer。再多一个writer就没法这么搞了。

— END. —

Advertisements
相册 | 此条目发表在Analyzing Big Data with Twitter, Java分类目录,贴了, , 标签。将固定链接加入收藏夹。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s