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

张晓家


其实不止是Facebook,大部分互联网公司都是在使用Mysql数据库(会辅助使用Nosql数据库,这里暂时不讨论)。

首先不能否认的是,如果是按照单库运行,Oracle、DB2这些商业数据库还是很强大的。IT公司的传统套路就是IOE,其中O就是指的Oracle。另外I是指IBM的服务器,E是指EMC列阵存储。三个加起来很强大,基本上可以支持一般的企业的业务,当然,也很贵,非常贵。

当到了Facebook这个级别的公司,数据量可不是几千万,几个亿这个级别的了,这时候如果数据还是单机的话,已经很难支撑基数大、增长快的数据了;这时候的做法就是分库,把数据保存到不同的数据库节点上。


这时候Mysql的优势就显示出来了:

  • 开源,就意味着免费,也就节省了License的费用;

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

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


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



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

我会持续分享Java程序开发、架构设计、职业发展等方面的知识和见解,希望能得到你的关注今日头条【会点代码的大叔】,转载请注明出处。

会点代码的大叔


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


MySQL 早期就是为 Web 应用而生的,而 Facebook 正是此领域的业务场景;另外从成本价格来讲,MySQL 开源免费的,Oracle 价格高。在版权上,大公司更注重版权,开发人员也不能随便用盗版,所以,如果全部用正版数据库,肯定增加成本的。而 MySQL 开源免费。当然,也并不是说 MySQL 没啥优点。
MySQL 作为是一种开放源代码的关系型数据库管理系统(RDBMS),任何人都可以在 GeneralPublic License的许可下下载且个性化优,另外,MySQL 的可靠性,速度以及它适应性强而受人欢迎。提供用于管理、检查、优化数据库操作的管理工具 用其来管理内容无疑是很好的选择,而且 MySQL 数据库系统使用最常用的为数据库管理语言--结构化查询语言(SQL)进行数据库管理。不仅如此,MySQL 其自身的特点也是它的加分项。它支持AIX、FreeBSD、Windows等多种操作系统。不仅能够作为一个单独的应用程序应用在客户端服务器网络环境中,还能够作为一个库而嵌入到其他的软件中提供多语言支持。
虽然其他的大型数据库例如 Oracle、DB2、SQL Server 等相比,MySQL 自有它的不足之处,如规模小、功能有限等,但是这丝毫也没有减少它受欢迎的程度 。当下 IT 行业的走向是开源化、免费化。这就意味着个人可以定制更加具有个性化需求的数据库,从而节省开销。这点上 MySQL 是符合的,阿里巴巴等大型项目也用了 MySQL ,主要用了分布式存储、缓存、分表分库等技术,灵活运用而已。
当然,现在许多的数据库的功能虽然很强大,但经常性使用的无非几种,或者有些比较适合自己使用的功能, oracle 等无法定制。所以 MySQL 这种开源的数据库会越来越火。另外,Facebook 也并非一成不变使用 MySQL,节省开销是一回事,但体验使用质量好更是一回事,新的需求产生会催促其进行升级成长,比如 Facebook 建 立了自己的 Cassandra 数据商店并且在其网站上重点推出一项新的搜索功能。据Facebook的工程师 Avinash Lakshma 介绍,Cassandra 仅用 0.12 毫秒就可以写入 50 GB 的数据,比 MySQL快了超过 2500 倍。Twitter公司也计划从 MySQL 迁移到 Cassandra 数据库,因为后者具有更大的弹性、可扩展性和大量的社区网络开源开发人员。
欢迎更多交流留言评论 !

stormzhang


所以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优化方面有着非常不错的效果。


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


杨沐白


尽管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互联网


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

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

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


智能神算


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

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

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

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

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

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

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

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


GeCoder


在关系型数据库刚出现的时候,那时候数据库技术是一个很复杂的技术,关系型数据库的由IBM的科研人员最先发表的论文,IBM没有重视,却被oracle占了先机。如今在互联网时代,理论和开发技术已经很成熟,一个数据库产品已经没有那么复杂,而且可替代性已经很高,越来越多的软件也开始免费。我感觉,本身这个话题意义也不大,企业现在对数据库的选择很多,现在已不像互联网刚兴起的时候,oracle也不会再像以前凭借一个数据库就能成为超级公司。

再说说为什么用MySQL,因为MySQL是开源的,稍加定制就能适应自己的需求。MySQL一台性能不好,但是扩展性非常好,以数据库的复制为基础,可以一主多从,多主多从,很多公司都开发了自己的MySQL中间件,哪怕代码初期没考虑读写分离一样不用做太大改动。大型的应用可以考虑分库分表,这样扩展性可就更高了。一个免费的产品就能实现了,我干嘛还要花钱。

现在新的非关系型的数据库越来越多,也越来越火,不仅扩展性更强,而且存取速度更快,最重要的还开源免费,数据库技术也在迎来一场新的革命,什么样的数据库,已不再重要,关键是什么能满足互联网的需求。同样现在的大型企业会用各种各样的数据库,以满足不同需求。


excellence27871936


简单查询oracle的速度远远赶不上mysql,注意是远远赶不上,更别说稳定性了


分享到:


相關文章: