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

张晓家


Facebook最初诞生的时候并不是大公司,所以整个数据底层都是放在MY SQL上,因为MY SQL不需要授权费,对facebook是最划算的,而在发展壮大后,MY SQL同样够用,当然会一直用下去了。

为什么Facebook还会用MY SQL?

1.MySQL早期就是为PC互联网服务的,而且是免费开源的,Facebook早期是学生创业,跟本没钱,而且Facebook最开始是PC产品,用MY SQL是自然的。

2.用MY SQL更省钱。除了MY SQL还有商业数据,比如Oracle数据库,但是商用数据库价格非常的贵,比如官方报价一般25/CPU核,以及采购小型机一般80-120万/台,存储设备一般500万一套,但是Facebook现在有近万台的服务器,这是一笔极为庞大的资金。

3.常规数据库的集中式数据库很难解决海量用户 MySQL的分布式数据库正好适合;

4.MYSQL可以定制化,更适应Facebook业务发展需要。oracle等无法定制,不能满足每个不同企业的定制化数据要求。所以mysql数据库会越来越火,也越来越受到企业的重视。

总的来说是,MYSQL更加省钱,Oracle价格太贵,另外就是可定制化。


毛琳Michael


尽管Facebook使用MySQL,但它们并不是一成不变的使用它。 事实上,他们的团队已经提交了许多MySQL核心和Innodb插件的高性能增强。 他们的主要重点是增加性能计数器到Innodb。 其他更改集中在IO子系统上,包括以下新功能:

1 innodb_io_capacity:设置服务器的IO容量以确定后台IO的速率限制

2 innodb_read_io_threads, innodb_write_io_threads:设置后台IO线程

3 innodb_max_merged_io:设置可能合并到一个大IO请求中的相邻IO请求的最大数量

Facebook使用MySQL作为键值存储,其中数据随机分布在一大组逻辑实例中。 这些逻辑实例分散在物理节点之间,负载均衡在物理节点级完成。 Facebook已经开发了一个分区方案,其中全局ID被分配给所有的用户数据。 他们也有一个自定义的归档方案,它基于每个用户的频繁和最近的数据。 大部分数据是随机分布的。 令人惊讶的是,据传Facebook有1800个MySQL服务器,但只有3个全职DBA

Facebook主要将MySQL用于结构化数据存储,例如墙贴,用户信息等。这些数据在各个数据中心之间复制。 对于blob存储(照片,视频等),Facebook使用一个自定义的解决方案,涉及外部的CDN和内部的NFS

同样重要的是,Facebook大量使用Memcache,这是一种内存缓存系统,通过在RAM中缓存数据和对象来加速动态数据库驱动的网站,以减少阅读时间。 Memcache是Facebook的主要缓存形式,大大减少了数据库的负载。 拥有一个缓存系统可以使Facebook的速度与调用数据一样快。 如果不需要访问数据库,则只需根据用户标识从缓存中获取数据

所以,“Facebook使用什么数据库”似乎是一个简单的问题,你可以看到他们已经添加了各种其他系统,使其真正的具有网络可扩展性。 但是,仍然可以自由地使用这样一个观点:“MySQL和Oracle或者MS SQL Server一样好或者更好,因为就算只有Facebook使用它,它也有5亿用户!”


独立的互联网从业者


欢迎关注我,一个程序员老司机,和你分享编程、运营、需求等等经验和趣事。

从你的问题描述来看,我觉得这是一个伪命题,在这个行业,很多人都流传着一个所谓经典的名言:‘如果MySQL数据库存储记录超过一百万的时候,性能会有很大的折扣’,但是结果facebook却能够很好的运行,下面我们就来分析一下原因。

原因一

为了应对高性能的应用,我们的MySQL也在不断的改进,不断的引入很多高级的功能,比如表分区、复制和集群等,还引入了Memcached,利用好这些功能,能够让我们的应用程序性能大大的提高,同时也能够处理好存储大数据的问题。

原因二

我们知道MySQL是开源的,什么意思呢?就是我们能够对MySQL的源代码进行修改然后编译,从而实现属于我们的定制化的MySQL,所以Facebook也对MySQL进行了修改,删除了很多不需要的功能,添加了很多自己需要的功能,尤其是将一些认为效率低的东西彻底移除,打造属于Facebook的定制化MySQL,这应该是MySQL能够胜任Facebook的根本原因。

原因三

虽然数据库提供了很多我们需要的功能,但是为了提高应用的性能,我们很多时候不一定要借助数据库来完成,比如实现一些统计功能,我们可以不借助数据库的存储过程来实现,而是采用应用程序的方式来实现,让数据库只做一件事:就是数据管理,不做太复杂的数据处理操作。

希望能够帮助到你,还有什么疑问,可以在评论中进行交流。


web互联网


所以Facebook优化MySQL的经验我觉得有很多借鉴学习之处,有相关数据库经验也可以在评论区讨论探讨,互相学习学习。

1.每台机器都使用多实例的模型,每个机器放多个实例,每个实例放多个DB,多实例之间没有资源隔离,充分发挥实例间的最大性能。

2.将大部分核心业务引擎切换到MyRocks,不改变服务器配置大概可以节省一半服务器资源。

3.主从结构采用基于GTID的一主多从结构,外加一个基于lossless semi-sync机制的mysqlbinlog实现的binlog server。

4.所有的备份都是基于mysqldump实现,可以无需备份索引,只备份数据,而且备份文件压缩比高,更节省磁盘空间,通过改进了的mysqldump,备份过程中还可以进行额外压缩。当然备份时也会控制并行备份的数量,避免影响在线业务性能。

5.快速部署从库可使用xtrabackup在现有存活的SLAVE实例上备份,也可在主库上发起备份,再利用WDT(或者是BT)协议传输到异地,用于拉起从库。

总而言之,Facebook在优化MySQL方面做了很多努力,也提交了很多优秀的Innodb插件来大大提高了MySQL主从集群的性能。

而且有传闻称,Facebook拥有大约1800台MySQL服务器,内部却只有三名数据库管理员(DBA)。这有点匪夷所思,不过也侧面说明Facebook确实在MySQL优化方面有着非常不错的效果。


如果你对学习人工智能和科技新闻感兴趣,欢迎订阅我的头条号。我会在这里发布所有与科技、科学以及机器学习有关的有趣文章。偶尔也回答有趣的问题,有问题可随时在评论区回复和讨论,看到即回。


杨沐白


因为没有哪种数据库能支撑这么大的数据量。所以,大型互联网公司都不用oracle,而是用mysql。因为mysql虽然单独1台不如oracle,到时他们会用很多台mysql。

而且,mysql是开源的,facebook等公司用的mysql都是他们优化过的版本,增加了适合他们自己特点的功能和性能的提升。

现代的大用户量的网站早就不用oracle了,而是用分布式的很多台mysql机器。淘宝开始也用oracle,后来发现支撑不了服务,所以慢慢也全部转成mysql了。


智能神算


Mysql的优点很多,主要列举以下几点:

(1) 是开源的,就是说是免费的,你不需要支付额外的费用。

(2) 是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统。

(3) MySql的核心程序采用完全的多线程编程。线程是轻量级的进程,它可以灵活地为用户提供服务,而不过多的系统资源。

(4) 拥有一个非常快速而且稳定的基于线程的内存分配系统,可以持续使用面不必担心其稳定性。

由于facebook业务的性质,存在大量的更新,mysql数据对于这块是比较擅长的。

希望我的回答能帮助到你!

关注是为了再一次的交流,戳一戳右上角的关注吧!


分享到:


相關文章: