<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>kafka0102的边城客栈 &#187; HipHop</title>
	<atom:link href="http://www.kafka0102.com/tag/hiphop/feed" rel="self" type="application/rss+xml" />
	<link>http://www.kafka0102.com</link>
	<description>要有最朴素的生活与最遥远的梦想，即使明日天寒地冻、路远马亡。</description>
	<lastBuildDate>Sat, 18 Jun 2011 04:20:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>一周技术文档分享</title>
		<link>http://www.kafka0102.com/2010/02/46.html</link>
		<comments>http://www.kafka0102.com/2010/02/46.html#comments</comments>
		<pubDate>Thu, 11 Feb 2010 09:14:40 +0000</pubDate>
		<dc:creator>kafka0102</dc:creator>
				<category><![CDATA[other]]></category>
		<category><![CDATA[HipHop]]></category>
		<category><![CDATA[LinkedIn]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[social game]]></category>

		<guid isPermaLink="false">http://www.kafka0102.com/?p=46</guid>
		<description><![CDATA[1、SYNCHRONIZING DATABASES IN DIFFERENT GEOGRAPHIC LOCATIONS

http://highscalability.com/blog/2007/12/7/synchronizing-databases-in-different-geographic-locations.html

翻出很久之前的一篇文章，该文提出了跨地域同步数据的问题。就Mysql来说，如果数据需要在两个地域传输，使用双主复制模式是较为简单的方法。如果mysql能支持多主复制模式，多地域的数据复制或许就解决了。但多主复制很难搞，这种多点并发复制很难自动化的处理提交冲突的问题。]]></description>
			<content:encoded><![CDATA[<p>1、SYNCHRONIZING DATABASES IN DIFFERENT GEOGRAPHIC LOCATIONS</p>
<p><a href="http://highscalability.com/blog/2007/12/7/synchronizing-databases-in-different-geographic-locations.html">http://highscalability.com/blog/2007/12/7/synchronizing-databases-in-different-geographic-locations.html</a></p>
<p>翻出很久之前的一篇文章，该文提出了跨地域同步数据的问题。就Mysql来说，如果数据需要在两个地域传输，使用双主复制模式是较为简单的方法。如果mysql能支持多主复制模式，多地域的数据复制或许就解决了。但多主复制很难搞，这种多点并发复制很难自动化的处理提交冲突的问题。</p>
<p>2、LinkedIn Search: A Look Beneath the Hood</p>
<p><a href="http://thenoisychannel.com/2010/01/31/linkedin-search-a-look-beneath-the-hood/">http://thenoisychannel.com/2010/01/31/linkedin-search-a-look-beneath-the-hood/#</a></p>
<p>这篇揭示LinkedIn的检索系统PPT很不错，尽管我对检索了解不多。对检索结果，LinkedIn没有采用通常的cache方式，而是重新计算。Cache检索结果的好处是提高性能，但无法保证cache数据的真实性，而LinkedIn期望每一次的检索结果都是准确的数据。LinkedIn采用数据库分区、大内存缓存DB数据的方式提高DB查询效率，以至于像双向好友关系也是实时查询的。LinkedIn对Lucene打的实时检索补丁，也很值得研究。</p>
<p>3、<a href="http://developers.facebook.com/news.php?blog=1&amp;story=358">HipHop for PHP: Move Fast</a></p>
<p><a href="http://developers.facebook.com/news.php?blog=1&amp;story=358">http://developers.facebook.com/news.php?blog=1&amp;story=358</a></p>
<p>Facebook爆出的HipHop对PHP社区绝对是爆炸性的消息，如果它开源的话，估计会被众多公司研究和采用。HipHop原理是将PHP代码翻译成C++代码，再编译成二进制程序执行。这一方式和LiteXml类似，都是为了克服脚本语言解释过程的低性能，而在生产环境迂回成编译性程序执行。不过，HipHop会因为C++语言的限制而失掉一些PHP语法功能，尽管不是很重要的说。我倒是很期望PHP能做成虚拟机，不失开发效率，也一样能提高解释执行的性能。</p>
<p>4、<a href="http://highscalability.com/blog/2010/2/8/how-farmville-scales-to-harvest-75-million-players-a-month.html">HOW FARMVILLE SCALES TO HARVEST 75 MILLION PLAYERS A MONTH</a></p>
<p><a href="http://highscalability.com/blog/2010/2/8/how-farmville-scales-to-harvest-75-million-players-a-month.html?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed:+HighScalability+(High+Scalability)&amp;utm_content=Google+Reader">http://highscalability.com/blog/2010/2/8/how-farmville-scales-to-harvest-75-million-players-a-month.html?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed:+HighScalability+(High+Scalability)&amp;utm_content=Google+Reader</a></p>
<p>该文分享了一个social game的技术经验，但没有什么太细节的东西。只有最后大众化的LESSONS LEARNED可以汇总下：</p>
<p>1）对于写多读少的social game，采用in-memory架构，异步提交数据是王道。</p>
<p>2）系统内的组件间低耦合，即便某个组件挂掉，也不会完全影响整个系统的使用。当系统出现性能等问题时，可以关闭一些不必要的功能来缓解问题。</p>
<p>3）缓存Facebook的数据。</p>
<p>4）对新功能做好性能预估及应对方案。</p>
<p>5）抽样部分数据来做分析。</p>
<p>5、When should you store serialized objects in the database?</p>
<p><a href="http://www.mysqlperformanceblog.com/2010/01/21/when-should-you-store-serialized-objects-in-the-database/">http://www.mysqlperformanceblog.com/2010/01/21/when-should-you-store-serialized-objects-in-the-database/</a></p>
<p>Peter的文章总会跟来一堆人的争论。Peter反对在mysql中使用无模式的blob字段，它给出的理由主要有：</p>
<p>1）查询时需要获取整个数据，即便只需要其中部分。</p>
<p>3）blob字段在更新时需要复制的数据更大，并且非定长会造成数据碎片。</p>
<p>3）如MIN, MAX, AVG函数不能使用。</p>
<p>4）blob字段内容没有类型约束检查，需要程序保证，这可能带来潜在的问题。</p>
<p>以用户信息这样的数据类型来说，它的典型特点是：1）一个id对应着一堆属性信息。2）需要针对属性字段做查询条件。这种情况的最简单的做法是，建立一张多属性的schema表和一堆属性索引，但这会带来属性查询的低性能。所以，像FriendFeed、Twitter等，是将属性数据和索引分开。在此基础上，问题只是属性数据的存储是要还是不要schema。如果要schema，peter提到的问题都不是问题，但也带来新的问题：1）属性增加需要修改表结构，这是很折腾人的事情。2）如果属性很多，表结构需要的列数会很多，一个解决方法是，可以将属性分成几类分别存储。实际上，如果在mysql前面有cache（或者Mysql自己的cache够大）来缓存主用户信息，而更新又不是很频繁，blob存储是没什么太大问题的。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kafka0102.com/2010/02/46.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

