一个神奇的网站:58同城背后的数据库设计实践
大家好,我是主持人皮皮,欢迎大家做客第32期名人堂。58同城,一个被贴上“神奇”标签的网站,究竟有多神奇?不用中介租房子、不用花钱招人才、一折吃喝玩乐、闲置物品能换钱。尤其是对58同城这样的以信息交换为主的网站而言,数据就是金矿。如此海量信息背后到底支撑的数据库是什么?无论是双11秒杀,还是12306购票,当并发访问量相当密集的时候,这些数据库系统都会采取缓存策略,那么58同城在数据库的缓存优化方面又有哪些奇招呢?在2015中国数据库技术大会上,58同城架构师沈剑将为大家带来“58同城数据库设计实践”的精彩演讲。本期名人堂我们提前探班,先睹为快,一起来看看大会剧透的亮点吧。
皮皮(Q1):沈老师,您好!我目睹过您在我们架构师大会上的精彩演讲,架构师与DBA都属于IT行业金字塔尖的那一群人,那么DBA与架构师究竟有什么不同呢?对于特别想从事这两个行业的朋友,有没有什么好的建议?
沈剑(A1):1)相对系统架构师,数据库架构师更偏向数据库容量设计,数据库/表结构设计,分库分表设计,分库分表后业务灵活实现的设计,数据库扩展性可用性保证,数据库调优与运维等。
2)不管是系统架构师,还是数据库架构师,对于有志于从事这两个方向的朋友,我在这里有两个小建议:一是专注,在技术上持续投入时间,保持在一个技术领域内的专注度,切忌浮躁(很多技术人做几年就转管理而放弃了技术);二是保持对业务的关注,一切抛开业务的架构设计和数据设计,都是在耍流氓。
皮皮(Q2):您参加过今年架构师大会的演讲,对明年的数据库大会有哪些期待?
沈剑(A2):无论是中国架构师大会还是中国数据库技术大会,规模宏大,都云集了业内的人才。2015中国数据库技术大会上,我非常期待有机会与更多的大牛沟通交流,共同探讨数据库技术,希望数据库大会与架构师大会都越办越好!对了,还期待自己的主题观众爆满哈。
皮皮(Q3):能否分享下您即将在2015年中国数据库技术大会上的演讲主题?
沈剑(A3):我 在2015数据库大会上分享主题是“58同城数据库设计实践”,内容包括以下几个方面,干货,贴近大伙日常工作,用的上,欢迎有兴趣的同学参加。
一、58同城数据库设计常见问题及解决方案
1)数据量太大,怎么办?
2)数据可用性如何保证?
3)不同读写比的业务,数据库如何设计?
4)数据库字段如何无缝扩充?数据库导表如何无缝迁移?
二、58同城各类业务场景数据库拆库解决方案
1)用户库-单key场景如何拆库?
2)帖子库-双key场景如何拆库?
3)好友库-“关注”与“粉丝”场景如何拆库?
4)订单库-key场景如何拆库?
三、58同城拆库后出现的问题及解决方案
1)分库后,in查询如何实现?
2)分库后,非key查询如何实现?
3)分库后,夸库分页如何实现?
4)分库后,order by + offset + limit如何实现?
四、58同城数据库中间件初探
皮皮(Q4):58同城的信息海量,数据量太大的情况下,如何保证高效的查询速度?58同城用到了什么样的数据库?
沈剑(A4):1)58同城,海量数据的检索,为了保证查询性能与查询速度,做了单独了搜索系统,而不是放在数据库里的,这套系统,如果有机会的话,我可以问问58 龙哥,让他在2015架构师大会上来分享哈。当然,非检索的业务,做海量数据时,有一系列优化方案,读写比设计、拆库设计等,非一言能尽哟,欲知细节,大伙到时候来参加我的分享哈。
2)数据库,用作数据的固化存储,58还是mysql用的多(部分固化用了mongodb,redis一般只做缓存用),但本次分享的经验,对于所有数据库都是适用滴。
皮皮(Q5):我们知道,当并发访问量相当密集的时候,比如双11,12306购票,这些数据库系统都会采取缓存策略。请问58同城在数据库的缓存优化方面,有哪些优化?
沈剑(A5):增加查询性能一般有几种方式:建立索引,增加读库,分库分表,增加缓存。在读多些少 的业务场景中,缓存是非常有效的,能极大增加系统读性能。58在数据库缓存使用上也不例外,在读多些少的核心业务中,例如用户信息、分类信 息、帖子信息上都进行了缓存优化(58主要使用memcache和redis做缓存)。另外使用缓存要注意“数据不一致”这一点,常用的优化方案是读写串行化和缓存双淘汰机制,预知这两种方案的细节,来现场听我的分享哈。
皮皮(Q6):除了缓存优化,海量数据存储于数据分析也是非常重要的,尤其是对58同城这样的以信息交换为主的网站而言,数据就是金矿。而我们知道,数据的存储和访问是 需要成本的,因此通常也把数据分为冷数据和热数据,请你简单分析一下58同城是根据什么策略划分冷热数据的,并分别采取什么样的存储策略?
沈剑(A6):58是一个生活信息平台,发布信息、浏览信息是它的核心业务。58业务场景有这样一个特点,信息的“时效性”比较强,例如:新发布的租房信息、职位信息、旧货信息会比较热,发布时间较长的信息相对比较冷。根据这个特点,58 同城一般使用“时间”作为冷热数据划分依据,新的热数据信息存储在缓存里以提高读取效率,较长时间的冷数据信息存放在数据库内。还是那句话,系统设计得依据业务场景来。
非常感谢沈剑为我们带来的精彩分享,希望大家能够积极参与互动,就自己所关心的话题提问或者交流心得。截止1月30日,我们将评选获奖会员四名,赠送技术图书一本。想了解更多名人堂嘉宾访谈或者报名参加名人堂,请点击:http://www.itpub.net/star/
相关文章