Facebook用户量十分庞大,为什么还使用MySQL数据库?( 四 )


首先不能否认的是,如果是按照单库运行,Oracle、DB2这些商业数据库还是很强大的 。IT公司的传统套路就是IOE,其中O就是指的Oracle 。另外I是指IBM的服务器,E是指EMC列阵存储 。三个加起来很强大,基本上可以支持一般的企业的业务,当然,也很贵,非常贵 。
当到了Facebook这个级别的公司,数据量可不是几千万,几个亿这个级别的了,这时候如果数据还是单机的话,已经很难支撑基数大、增长快的数据了;这时候的做法就是分库,把数据保存到不同的数据库节点上 。
这时候Mysql的优势就显示出来了:
开源,就意味着免费,也就节省了License的费用;

也是因为开源,所以有能力的公司都会对公开版的Mysql做二次开发,跟进业务的需要去改造Mysql;

服务器的钱也省下来了,也不必使用费用很高的服务器了,这一点又是省钱 。

总之,Mysql省钱,还能定制改造 。

Facebook用户量十分庞大,为什么还使用MySQL数据库?

文章插图
希望我的回答,能够帮助到你!
1.facebook确实在使用MySQL,主要是因为免费开源,因为免费降低了成本,也因为开源,其可定制化比较强,基于MySQL的第三方版本也比较多 。facebook自己就基于MySQL搞了一个MyRocks数据库 。
RocksDB是FaceBook基于Google开源的LevelDB实现的,使用LSM(Log-Structure Merge)树来存储数据 。Facebook开发工程师对RocksDB进行了大量的开发,使其符合MySQL的插件式存储引擎框架的要求,移植到了MySQL上,并称之为MyRocks 。MyRocks支持基于SQL的数据读写、锁机制、MVCC、事务、主从复制等MySQL绝大部分功能特性 。从使用习惯考虑,使用MyRocks还是使用MySQL/InnoDB并没有多大区别 。
2.数据量大的问题,主要是通过分布式和分库分表来解决的,并不是单机存储 。oracle的缺点就在于这,oracle虽然单机数据处理量大,但是对集群和扩展的支持比较差 。mysql单机不行,但是可以集群啊,集群不够,还可以分布式啊 。况且facebook这种业务,也不适合oracle 。
3.facebook
4.历史原因和使用习惯导致的,这也是为什么没有选择另外一个开源数据库postgreSQL的主要原因 。
所以,可以这么说,facebook数据量大是一个问题,但是并不是完全或者说单独依赖MySQL全部解决的 。
2004年成立的Facebook很快便占据了社交网站的榜首,智能手机出现标志着互联网全面转向手机端,在移动互联网时代Facebook的APP也同样霸占着社交APP排名榜首 。有很多网友就非常好奇Facebook使用哪个数据库来存储庞大的用户资料?通过了解社交网络的老大哥Facebook的数据库演变,从中吸取宝贵的经验教训 。
Facebook中的个人资料不仅仅是姓名、Email、兴趣等属性列表,而是一个非常丰富的社交图谱,包括了亲人/朋友、群组、喜欢、分享等等 。刚开始的Facebook社交页面非常简单,采用PHP来构建应用程序,MySql作为长期使用数据库,采用Memcache作为后备缓存支持 。PHP应用程序可以直接访问MySql和Memcache,中间没有数据抽象层 。
这种简单的数据库架构在访问量很少的情况下优势确实非常明显,但Facebook从2005年开始用户量就飞速增长,最终这种数据架构导致了开发人员敏捷性急剧下降 。因为工程师需要使用两种截然不同的数据模型来对数据进行处理,MySql存储主从对集合、Memcache则用于存储和提供派生的平面键值的SQL查询,MySql和Memcache相互协作成为了一个很大的难题,开发者使用数据库前首先要获得关于这两个数据库如何相互协作的复杂知识 。
Facebook的数据量暴增也使得MySql的缺点凸显出来,MySql的单体架构很早强制应用程序级的分片,应用程序则需要跟着哪个MySql实例复杂存储哪个用户的配置文件,数据量暴增之后,开发和操作的复杂程度就呈现指数级增长 。多数据中心、异地冗余复制也成为了MySql一个非常关键性的问题,主从异步复制转移时,最近的数据无法避免不会丢失 。


特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。