Flickr Stats 功能的设计经验

继续我的学习笔记之旅。FlickrDBA Dathan Pattishall 在前几天的 MySQL 大会上分享了 Scaling Heavy Concurrent Writes In Real Time (Record every Referral for Flickr Realtime) ,其中介绍了 Flickr Stats 的设计经验。国内好多 Web 站点其实也在设计类似的功能,只是不知道细节罢了。

数据结构原型

字段               数据类型         
Path_query Varchar(255) PK
Domain Varchar(50)
Owner Bigint
When Date
Object-ID Bigint
Object-Type Tinyint
Counts and stuff Various ints May be some keys

主键是字符串,开销太大。其他的索引如果做主键,也比较大。当表大小超过内存的时候,插入速度很慢,I/O 能力也上不来。

优化数据结构

数据预处理,通过 CONV(SUBSTR(MD5(Url),0,16),16,10) 把 Path_query 修改为 64 位的 ID (8字节), 主键为 ID+Owner+object+object-type,这个统计信息很容易抽象到一个数据对象,这个索引的设计也在于此。

另外补充一点,利用 PHP 的 ip2long() 和 long2ip() 函数对 IP 地址作预处理,耗费的存储空间只为原来地 25%,这是个很有趣的技巧。

数据 Sharding

对于海量的数据,以一个礼拜为间隔,水平分割。按照不同的数据力度每周一个表,每年一个全局表,再加上一个汇总表。数据量越大,InnoDB 存储引擎针对字符串的索引浪费的空间就越大。单个查询的 I/O 也自然大了起来。

所有应用对 DB 的响应要求 是 300 毫秒。但高并发写入的时候响应时间就糟糕起来。Flickr 的 Java 牛人实现了 Referral 队列,每 4000 条做批量处理。这样 IO 拥塞的就解决掉了。

总体的服务器规模过去 介绍过,对专业版用户的数据是永久保留的,而普通用户则只保留几周,为节省空间,采用 MyISAM 引擎,当用户转为专业版时,迁移数据。

补充一下,抓取 URL 是用的 curl 。最后,这篇 PPT 在线观看

EOF

补充一张图:

Flickr Stats.png

这是该功能的 UI 设计。

  • 1) 请求触发统计。默认不激活统计。从而节省大量不必要的开销;
  • 2) 统计,没必要过度设计;
  • 3) 元素可点击
  • 4) 设计洁癖
此文作者:, 位于 Arch 分类 标签: , on .
转载须以超链接形式标明文章原始出处和作者信息及版权声明.

《功夫之王》喜剧之王

公司团队活动,集体观影。笑翻,没想到李连杰、成龙联手,喜剧效果直逼星爷。

打斗固然精彩,冲着李、成两位,票钱也不冤枉。必需要说的是,台词超经典。举一个例:

天行者:"我们是不是不能走出沙漠了?...我都快要冻死了" 
默僧(李连杰)慢慢转头(深沉地):"不要忘了呼吸"

鲁彦(成龙)喝的那个长生不老药…绿色液体…看到那里我禁不住脱口而出,”好像雪碧”

最后的玉帝,演出效果和《食神》里面那个梦遗大师颇有神似之处。问天行者要实现啥愿望(这不就是按照上帝的功能来整嘛),”我只想要回家”,玉帝长出一口气说道:”那我就放心了”。

EOF

此文作者:, 位于 MyLife 分类 标签: , on .
转载须以超链接形式标明文章原始出处和作者信息及版权声明.

读书日晒一下书单

今天是世界读书日。不说技术这些无聊的东西了,晒一下今年以来在卓越亚马逊上的购书清单。

* 德川家康/第六部双雄罢兵
* 山南水北
* 漫长的告别
* 乡土中国–故园徽州
* 德川家康–第五部.龙争虎斗
* 大败局(修订版)
* 激荡三十年–中国企业(下)
* 鹿鼎记(共5册新修版)/口袋本金庸作品集
* 激荡的百年史(插图珍藏本)
* 汪曾祺谈吃
* 德川家康4:兵变本能寺
* 乌合之众:大众心理研究(最新版本)
* 抗战时代生活史
* 中国古代文化常识(插图典藏本)
* 痛风的诊断与治疗/临床常见病症诊疗丛书
* 银元时代生活史
* 魔鬼经济学
* 德川家康3:天下布武

看来这段时间就和《德川家康》较劲了。另外比较喜欢韩少功《山南水北》的恬淡。《银元时代生活史》传递出来的生活趣味也很有意思,和去年看过的《侠隐》有的一比。

发现自己对书的评语基本上分”好看”与”不好看”,如何好看? 有趣,如何有趣? 好看…

EOF

eBay 的 Personalization Platform 采用 MySQL

过去写过很多关于 eBay 数据平台架构的帖子,过去eBay 的信息架构里 DB 都是采用 Oracle 的,大多数 DBA 朋友也都知道 eBay 在 Oracle 方面的技术搞得非常好。这次的 The 2008 MySQL Conference & Expo 披露出来的信息,eBay 在 MySQL 上做了很大胆的尝试,eBay Personalization Platform 就是用 MySQL 打造的。Sun 当然不会放弃这个大好的宣传机会(这两家在技术上的合作一向也比较多),所以年度最佳应用给了 eBay (一同获奖的还有 Virgin Mobile France 和 Facebook )。

面临的应用场景:客户端 Cookie 最大 4K,如果要传递更多定制化信息就不好搞了。作为电子商务站点,肯定有要为用户提供更具有关联性的商品信息的业务需求,这样就要跳出原有的窠臼。通过数据库集群来存储类似的信息就是有必要的,但 eBay 原有 Oracle 数据库上的压力已经很大。

eBay 采用 MySQL Memory Engine 做数据库 Cache 层解决方案(如果纯粹用 Memcached 类似的方案也不太适合的,读写比例接近), eBay 工程师 Igor Chernyshev 对内存引擎做了质的改进,而这些改进是开放出来的(Mysql-heap-dynamic-rows 项目,对 VARCHAR 列的内存开销算法做了革命性的改进)。另外一个 Patch 扩充了并发能力,一台普通的 Sun 4100 上能支撑 20000 个并发连接。每秒钟处理 13000 个 TPS,读写各半。25 台机器组成的集群,每天支撑 40 亿次的读写请求,为每个用户传递的定制数据平均大小 40 K,从 4K 到 40K ,足够多的定制信息可以存储了。

架构示意图(来源):
eBay_mysql_platform.png

这个个性化平台系统虽说关键,但是存储的数据并非不能丢失的。这也是 eBay 大胆采用 MySQL 的一个考虑因素吧。

MySQL 更大规模部署时代似乎来临。

EOF

此文作者:, 位于 Database 分类 标签: , on .
转载须以超链接形式标明文章原始出处和作者信息及版权声明.