-
日前, ODF 2018 开源数据库论坛暨 MariaDB 用户者大会在北京圆满结束。活动为期两天,是开源数据库垂直领域的顶级峰会。大会旨在建立一个平台,促进开源数据库产品发展和技术交流,帮助越来越多的企业了解和使用开源数据库。华为云作为领先的云服务提供商,也为本次大会带来了最佳数据库实践方案。 众所周知,开源数据库系统以其免费、开源、透明等特点,在广大互联网公司中广为应用;在被视为第二次信息革命的云计算和大数据浪潮中,具有举足轻重的地位。随着互联网产业的蓬勃发展, 开源数据库技术也逐渐步入了传统企业的视野,为传统企业所接受。 中国信息通信研究院数据显示:41.18%的金融机构已经应用云计算技术,46.80%的金融机构有计划应用云计算技术。在方向上, 70.61%的金融机构选择开源技术与闭源技术相结合的应用方式,10.45%的金融机构选择仅使用开源技术,仅 18.94%的金融机构使用闭源技术。 在9月8日的金融及区块链专场分享会上,华为云技术专家带来《基于云场景架构设计的分布式数据库》主题分享,并提出“云 + 开源 + 闭源 = 开源的生态 + 低成本 + 商业级的可靠性和性能“这一观点。 对于企业而言,选择云,是为了为给公司“减负”;无论是人力、物力还是财力。开源予你以自由,但要用好开源山遥路远;闭源予你以方便,但意味着你要为此付出其它代价。那么,企业如何在二者间找一个平衡点呢? 开源 MySQL 在华为云上的最佳实践 作为全球最受欢迎的开源数据库 MySQL,在各行各业的应用不可谓不广。但是,社区版在云上和线下受技术局限性影响,并不能完全满足用户的需求。 首先,要配置一个高可用的 MySQL 数据库集群,对大多数中小型企业而言本身就是一个艰巨的任务。他们不但需要花时间了解 MySQL的复制机制,比如配置主备实例、只读副本,浮动IP地址等,而且还要特别关注诸如安全和备份策略等问题。这使得企业将为此耗费大量时间和精力。 此外,开源 MySQL 还面临诸多挑战。例如扩容受限、高并发连接时查询性能降低;半同步复制无法完全保证覆盖所有事务、在 HA 监控未知的情况下退化成异步复制;高负荷情况下复制延迟加大,主实例故障时备实例需要重放日志,接管缓慢、服务暂时不可用、甚至在备实例接管时可能会导致数据丢失等,导致用户数据库在可靠性和可用性上无保障。 那么华为云是如何解决这些问题的呢?另一位技术专家带来的主题演讲:《华为云数据库 MySQL 增强版 3 倍性能提升的最佳实践》,给大家揭晓了答案。 华为云数据库 MySQL 增强版,即华为内部研发版本的 HWSQL。源于 MySQL 5.6 社区版,并对其进行了持续优化。 当前,华为云数据库 MySQL 增强版发布了四大关键能力:高性能原有社区版本的基础上有 3 倍的性能提升。提升可扩展性支持更多的数据库客户端稳定运行,更多的并行事务 以及 更大规格的服务配置可靠性增强半同步下的 loss-less 以及通知能力的增强,提升了系统可靠性,避免了备机升主后数据丢失的可能。故障下的快速恢复复制能力的增强极大地减少故障恢复的时间以及可读副本与元主机数据的延误程度。 华为云 MySQL 增强版的问世,正是在开源与闭源、成本与性能上寻求平衡的最佳实践。尤其是在可靠性、可用性方面,聚焦关键技术能力实施,切实解决用户关心的可靠性,可用性问题。其中包括:大并发下, 挖掘性能负载同时保持性能平滑度,充分发挥大规格 RDS 并发潜力。解决主备间复制滞后问题,极大缩短双机模式下 RTO 时间,显著提升系统可用性;(当备实例切换为主实例时,可用性恢复时间显著降低, 由小时级别到秒级别。)解决半同步复制下的数据丢失问题, 确保数据一致性,主备实例互换事业务数据丢失的风险。 经过优化后的华为云 MySQL 增强版,每秒查询率(QPS)超过 MySQL 社区版5.6的3倍、5.7的1.5倍;且在在大规模的连接下,保持更平稳的性能体验。 大规模连接下社区版MySQL以及华为云 MySQL 增强版(HWSQL)的性能表现 值得一提的是,华为云 MySQL 增强版将于近期上线一系列新特性,把性能和功能进一步强化,持续满足客户高性能、低成本的多样化需求。 2018 华为全联接大会将于10月份在上海召开,届时将首发华为AI战略和全栈全场景的解决方案,并携合作伙伴带来更多诸如“秦渲云”这样AI、云、大数据、5G、IoT、视频等在各行业的创新与实践,惠及更多开发者人群,“+智能,见未来”我们拭目以待。 免费试用 华为云 MySQL 增强版,请移步官网:https://activity.huaweicloud.com/free_test/index.html了解华为云数据库最新活动请点击:https://activity.huaweicloud.com/rds_september/index.html
-
尊敬的华为云客户:华为云计划于2018/09/15 00:00:00将专属云RDS MySQL服务 (简称:RDS MySQL for DCC)正式商用。RDS MySQL for DCC是基于用户专属云服务基础上集成的云数据库服务,该服务通过消耗用户自身的专属云资源,创建对应的RDS数据库实例。RDS MySQL for DCC正式商用后,将于2018/09/15 00:00:00开始收费,收费方式为按需计费,价格详情如下。华为云在此提醒您,如果不再使用RDS MYSQL 专属云服务,请于服务公测期结束前(2018/09/14 23:59:59)登录RDS MYSQL控制台释放所有实例,避免产生费用。更多关于RDS MYSQL 专属云服务的产品介绍,请您点击了解。如您在使用过程中有宝贵意见,欢迎您拨打华为云服务热线:4000-955-988与我们联系。感谢您对华为云的支持!价格详情:引擎类型产品类型产品规格核数(个)内存(G)价格单位RDS on DeC(按小时)专属云 MySQL主备实例1核/4G14元/台0.362核/8G28元/台0.724核/16G416元/台1.448核/32G832元/台2.8816核/64G1664元/台5.7632核/128G32128元/台11.521核/2G12元/台0.182核/4G24元/台0.364核/8G48元/台0.728核/16G816元/台1.4416核/32G1632元/台2.8832核/64G3264元/台5.761核/8G18元/台0.722核/16G216元/台1.444核/32G432元/台2.888核/64G864元/台5.7616核/128G16128元/台11.52主实例1核/4G14元/台0.202核/8G28元/台0.404核/16G416元/台0.808核/32G832元/台1.6016核/64G1664元/台3.2032核/128G32128元/台6.401核/2G12元/台0.102核/4G24元/台0.204核/8G48元/台0.408核/16G816元/台0.8016核/32G1632元/台1.6032核/64G3264元/台3.201核/8G18元/台0.402核/16G216元/台0.804核/32G432元/台1.608核/64G864元/台3.2016核/128G16128元/台6.40只读实例1核/4G14元/台0.202核/8G28元/台0.404核/16G416元/台0.808核/32G832元/台1.6016核/64G1664元/台3.2032核/128G32128元/台6.401核/2G12元/台0.102核/4G24元/台0.204核/8G48元/台0.408核/16G816元/台0.8016核/32G1632元/台1.6032核/64G3264元/台3.201核/8G18元/台0.402核/16G216元/台0.804核/32G432元/台1.608核/64G864元/台3.2016核/128G16128元/台6.40
-
云数据库(MySQL)+云数据库客户端(DAS)背景:本教程爬取的是新浪微博微公益平台的微拍卖拍品信息列表。爬虫爬取的信息为拍品序号、拍品名称、起拍价和当前价,并通过数据库客户端DAS写入到MySQL数据库中。下面,让我们开始搭建小爬虫吧!1.下载软件1.1 下载pycharm community版>下载路径:https://www.jetbrains.com/pycharm/download/#section=windows 选择community版1.2下载python2.7.15>下载路径:https://www.python.org/downloads/release/python-2715/,选择Windows x86-64 MSI installer2.安装2.1 安装python-2.7.15>运行python-2.7.15.amd64.msi>Install for all users>选择目标路径,点击Next>点击Next>点击Finish2.2 安装PyCharm>根据系统操作系统版本选择, 64位系统选择64-bit launcher, 其他勾选如下图>勾选Run Pycharm Community **,点击Finish>阅读完政策说明后点击Accept>点击create new project>设置Project的存储路径>点击create>点击close2.3在pycharm中安装第三方库>点击file>点击settings>点击project untitled1(其中untitled1为自定义的项目名)>点击 project interpreter>点击右侧的“+”号>在搜索框中输入pymysql,选中PyMySQL,点击Install Package出现以下提示说明安装成功,关闭该页面3.购买云数据库在华为云官网开发者支持计划领取免费套餐,或者购买MySQL数据库4.申请数据库客户端DAS>目前DAS在公测阶段,您可以通过以下链接申请免费试用https://www.huaweicloud.com/product/das.html5.登录华为云数据库管理页面,选择您要存储数据的实例,点击登录,跳转到数据库客户端DAS登录页面>DAS页面中输入管理员账户名和密码,账户名可在实例信息页面查到,一般默认为root,密码为您在购买数据库实例时输入的管理员密码。>登陆DAS后右键点击实例名>点击SQL窗口,将以下SQL语句输入编辑框中,点击执行SQL语句。CREATE DATABASE sina; CREATE TABLE `sina`.`sina_paimai` ( `id` int(50) AUTO_INCREMENT NOT NULL, `project_name` varchar(50) NULL, `project_start_price` varchar(50) NULL, `project_now_price` varchar(50) NULL, PRIMARY KEY(`id`) ) DEFAULT CHARACTER SET = utf8, COLLATE = utf8_general_ci, ENGINE = InnoDB;完成上述步骤后我们已经在sina中新建了一张名为sina_paimai的表,表**有四个字段,分别是id,project_name,project_start_price,project_now_price6.完成以上步骤后,只差最后一步,爬虫就搭建完成啦。>打开pycharm>右键点击project untitled1>点击new>点击python file给你要创建的python程序起一个名字,点击OK.然后把以下爬虫代码复制进你刚刚创建的python文件中,并将代码中的host、port、user、 password改成你的数据库实例公网IP、端口号、数据库账户名和密码保存就可以啦~爬虫代码:#coding=utf-8 import pymysql import urllib2 as url import re #获取新浪微博微公益平台微拍卖第一页的源代码 html=' https://gongyi.weibo.com/list/auction?on_state=0&theme_id=0&title=&order=hot&page=1' content=url.urlopen(html) text=content.read() #解析网页源代码,用正则表达式获取源代码中的拍品名、起拍价和当前价 project_name=re.findall(r'<a href="/auction/detail.goods_id=......">(.*?)</a></div>', text) project_start_price=re.findall(r'起拍价<em class="num">(.*?)</em>元,当前价', text) project_now_price=re.findall(r'当前价<em class="num">(.*?)</em>元', text) #连接到云数据库 connection=pymysql.connect( host='xxx.xxx.xxx.xxx', port=3306, user='sina', password='xxxxxxx', db='sina', charset='utf8', cursorclass=pymysql.cursors.DictCursor) #用sql语句把拍品名、起拍价和当前价拆入到已经建好的sina_paimai表中 try: for i in range(0,len(project_name),1): with connection.cursor() as cursor: sql='insert into sina_paimai(project_name,project_start_price,project_now_price)VALUES(%s,%s,%s)' cursor.execute(sql,(project_name ,project_start_price ,project_now_price )); connection.commit() finally: connection.close();最后点击run!7.在数据库客户端DAS中查看爬取的数据>登录DAS, 在SQL窗口中输入SELECT * FROM `sina_paimai`,点击执行SQL就可以看到爬取的结果啦。展示结果:如拍卖序号:1,拍品名称:春节晚会小虎队演出服-霹雳虎,起拍价:100,当前价 57680id:拍卖序号project_name 拍卖名称project_start_price 起拍价 Project_now_price 当前价
-
使用AOS服务可以很方便的创建RDS实例,接下来看一下创建的步骤。 首先,进入AOS控制台,通过图中所示的步骤找到创建RDS实例的模板。 点击创建堆栈按钮后进入堆栈配置填写界面。 填写图中为空的配置。其中密码类型的需要满足具有大小写、数字、特殊字符、至少8位的条件,而flavor推荐通过这篇帖子的方法进行获取,https://bbs.huaweicloud.com/forum/thread-8864-1-1.html 。 填写完毕之后堆栈进入创建的流程,等待一会即可创建完毕。 此时,堆栈输出中可以找到RDS的访问地址。
-
看完本帖,你将收获华为云技术专家教你的数据备份永不出错的诀窍和萌宠加湿器一个 生产环境的数据库多数是带备份的,至少是一主一备,目的是当主机出现宕机但是又不能很快恢复时,把业务切换到备机上,快速恢复业务, 但是备机也可能会故障,有时候还需要基于当前的数据做一份新的数据库出来,此时怎么做? 是不是还得一个冷备份呢?所以基本的数据库架构很多是这样的:数据库基本架构最初我们做RDS for MySQL 备份也是基于这样的模型,但不同的是,我们引入了对象存储系统(Object Storage)。因为实例较多,发生切换时不能靠人工处理,因此引入了高可用系统(High Available)。针对备份,我们也抽象出一个独立系统,用来处理复杂的备份和还原过程,称之为备份恢复系统(Backup and Restore)。最终的框架图如下:高可用备份框架图优化:触发备份时,可能会导致主机资源被占用,例如压缩时占用 CPU 资源,上传会占用IO,所以业界RDS for MySQL都会在备机上做备份,但是仅仅是换个主机这么简单吗? 下面重点说说我们在此过程中踩过的一个坑吧!敲黑板划重点:基于备机备份第1个带来的问题我们要正视,那就是可能的延迟,整体上延迟时间为:OBS上的数据时间 晚于 备机的数据时间 晚于 主机的数据时间即:OBS上的数据可能晚于备机的数据,而后者又晚于主机的数据。这个延迟会带来其它问题,我们在做高可用和可靠性混合测试时碰到过。假设A的uuid为A,B的uuid为B,具体操作步骤和数据如下:操作主机A主机BOBS1. 持续写入数据GTID SET A:1-900GTID SET A:1-900GTID SET A:1-9002. 断开AB之间网络,不触发主备倒换GTID SET A:1-2000GTID SET A:1-900GTID SET A:1-9003. 停止写入,恢复网络GTID SET A: 1-2000GTID SET A: 1-1200还未到增量备份时间,GTID SET A:1-9004. 把A关机不可用GTID SET A: 1-1200还未到增量备份时间,GTID SET A:1-9005. HA触发主备切换不可用切换为新主机还未到增量备份时间,GTID SET A:1-9006. 新主写入数据,即B写入数据不可用GTID SET A:1200,B:1-100还未到增量备份时间,GTID SET A:1-9007. 启动旧主机场景1:触发A主机重建,即基于OBS的数据做PITR还原GTID SET A:1-900GTID SET A: 1-1200,B:1-100GTID SET A:1-900,或者A: 1-1200,B:1-100,具体取决于时间8. 重新建立主备复制关系此时GTID SET会是1-1200,B:1-100 ?真实结果是:A: 1-900,B:1-100看下我们测试的结果:图1 新备机图2 新主机大家注意,如果这部分数据没有同步过来其实是一个非常危险的动作。因为此时主备复制关系都是正常的,所以很容易被忽略。而且由于这样的延迟关系,该场景下的问题的发生是一个大概率事件。很显现,MySQL并没有按照大家想象中那样去做。很多 DBA 都做过这样的实验,把已经从主机同步过来的数据在备机删除掉,然后设置已经执行的 GTID 为之前的值,数据会重新从主机同步过来,而且只认 GTID 不认内容,可是为什么现在就不行了呢?在此过程中,我们进行了各种检查。先是验证是否备份出现问题,然后又验证是否还原步骤出现问题,然而都不是…… 总不能是数据库 A 通过识别 GTID 发现,有部分数据是以自己的 uuid 开头,所以才没有同步吧?所以我们尝试修改了A主机的server-uuid为C,但并没有任何结果。这样的结果,一度让我的思路陷入僵局,感觉大脑中的主备复制知识要被刷新了。打开解析后的binlog,看到 binlog 中使用的是 server ID,我想mysql是不是通过server ID来识别呢?抱着病重乱投医的心态,我尝试修改了 server ID,结果却意外地成功了!于是我们又顺着这条线索,查看 MySQL 官方文档,发现一个不常用参数。--replicate-same-server-idCommand-Line Format--replicate-same-server-idPermitted ValuesTypebooleanDefaultFALSETo be used on slave servers. Usually you should use the default setting of 0, to prevent infinite loops caused by circular replication. If set to 1, the slave does not skip events having its own server ID. Normally, this is useful only in rare configurations. The option cannot be set to 1 when is enabled, which is the default.By default, the slave I/O thread does not write binary log events to the relay log if they have the slave's server ID (this optimization helps save disk usage). If you want to use , be sure to start the slave with this option before you make the slave read its own events that you want the slave SQL thread to execute.--log-slave-updates enables replication servers to be chained. For example, you might want to set up replication servers using this arrangement:A -> B -> CHere, A serves as the master for the slave B, and B serves as the master for the slave C. For this to work, B must be both a master and a slave. With binary logging and the --log-slave-updates option enabled, which are the default settings, updates received from A are logged by B to its binary log, and can therefore be passed on to C.大意是说:为防止循环复制引起的无限循环,备机默认设置通常为0。一旦设置为1,备机会忽略那些同自己具有相同server ID的事件,所以会出现上面我们遇到的问题。测试了一遍,是它!又测试一遍,是它!再测试一遍,还真是它!本以为找到了救命的灵丹妙药,但接下来的问题还是让我们面面相觑。官方文档写明replicate-same-server-id 与 log-slave-updates 互斥关系,而log-slave-updates则是我们在备机做备份必须开启的参数,所以该参数我们不能设置为on,这就相当尴尬了……目前这个问题只能规避,例如在每次恢复的时候,重新设置server ID 为一个不重复的值。而且 MySQL不推荐使用重复的 ID 值,也是为了防止出现无限循环复制。此外,补充一个注意事项,就是在备机做运维动作时,对于修改数据、flush等这类会写bin-log 的操作时,一定要先执行 set sql_log_bin=0,否则你的每一笔操作,都会造成备机少同步一条数据。文章到此结束,该问题的发现、重现、定位及解决,在追求数据的最大可靠性上,我们从不懈怠。评论有奖:各位小可爱们需要回答的问题分别是:1、 数据备份技能有没有get到呢?若没有,原因是?2、 使用过华为云数据库的备份恢复功能吗?3、 你们是怎么判断主备不一致的?4、 主备机数据不一致的时候,你们有哪些运维动作?评奖规则:在本帖留言区回复上述四个问题,对话题互动的优质用户进行评奖,其次是没有了解本教程,并给出改进意见的走心用户进行评奖。活动时间:2018年7月20日-7月27日活动结束后,我们会抽取优质评论奖3名送出搭配小夜灯、小风扇三合一的萌宠加湿器获奖名单用户名奖品xiao萌宠加湿器meimeimei萌宠加湿器蓝书签萌宠加湿器恭喜以上获奖小伙伴,快将你们的邮寄地址私信给小编吧,否则视为自动放弃~
-
使用示例模板 创建密钥和有状态应用MySQL (mysql-statefulset) 创建堆栈,可以得到一个CCE集群(包含一个节点),集群所需的虚拟私有云和子网,一个密钥(保存MySQL敏感信息),最后创建有状态应用MySQL。可以通过远程登录的方式 访问这个MySQL数据库。【部署结果展示】使用root账号登陆MySQL服务。使用设置的user账号登陆MySQL服务。mysql操作。【部署流程详解】使用mysql-statefulset示例模板创建堆栈。填写堆栈名称与描述。填写输入参数。(1)基础资源配置:填写可用区,cce集群规格,节点规格,密钥对。(2)MySQL配置:填写MySQL用户密码,MySQL root账户密码,MySQL服务名称,服务端口,MySQL用户名称,创建的密钥名称。 说明: MySQL用户名称为 想要新创建的MySQL用户的名称,其登录密码对应为填写的MySQL用户密码。 注意事项:MySQL服务端口填写范围为1~65535。点击下一步,审核配置信息,查看计费信息,点击创建堆栈。等待创建成功。查看堆栈输出参数,获得mysql服务访问地址114.116.90.255,访问端口为32000。 使用mysql -h114.116.90.255 -P32000 -uroot -p,输入密码后即可访问MySQL服务。
-
场景描述需要使用修改user表方式修改mysql密码,但找不到修改路径。解决方案步骤 1 修改mysql的配置文件,修改为跳过密码验证:vim /etc/my.cnf在[mysqld]下添加skip-grant-tables。步骤 2 重启mysql服务。service mysqldrestart18736步骤3 在“mysql –uroot –p”处回车即可进入数据库。18737步骤 4 输入命令“desc mysql.user ”。1874318744即可看到mysql5.7版本没有password列,显示为authentication_string。步骤5 执行命令:update mysql.user setauthentication_string=password('新密码') where user='root' andHost = 'localhost'即可设置为新密码。步骤6 退出,将skip-grant-tables字段删除或注释即可。----结束19150
-
场景描述客户远程连接(包括telnet3306端口)MySQL时报错:Host * is not allowed to connectto this MySQL server。问题分析一般是由于帐号不允许远程登录,只能在localhost登录造成。解决方案目前针对这种情况,我们提供了两种解决方案:方案一:改表法 可能该帐号不允许远程登录,此时,需在安装localhost 的电脑登录mysql,并更改 “mysql 数据库 > user表 > host项 > localhost”为"%"。执行如下命令:mysql -u root –ppasswd use mysql; mysql>update user set host = '%' whereuser = 'root'; mysql>select host, user from user; mysql>flush privileges;方案二:授权法l 若想实现myuser使用mypassword从任何主机连接到mysql服务器,在本地登录数据库后执行如下命令:GRANT ALL PRIVILEGES ON *.* TO'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;FLUSH PRIVILEGES;l 若想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作为密码,执行如下命令:GRANT ALL PRIVILEGES ON *.* TO'myuser'@'192.168.1.6' IDENTIFIEDBY 'mypassword' WITH GRANT OPTION;FLUSH PRIVILEGES;在安装mysql的机器上运行如下命令:mysql -h localhost -u root//登录mysql>GRANT ALL PRIVILEGES ON *.* TO'root'@'%' WITHGRANT OPTION //赋予任何主机访问数据的权限mysql>FLUSH PRIVILEGES;//修改生效mysql>QUIT //退出MySQL服务器这样就可以实现在其它任何的主机上以root身份登录。目前我方云主机,在数据库开启允许远程后,如果仍无法连接可尝试清空防火墙以及开放安全组指定端口进行处理。
-
如何使用数据迁移服务将大量数据快速导入到MYSQL
-
同标题,我需要比较前天 数据,将自动备份的.qp文件下载到本地后用什么工具可以打开? 我只是作比较不能直接还原,谁知道请告诉我一下,谢谢!!
-
小云妹带你见识下云数据库MySQL的强大功能:一键实现弹性扩展~云数据库MySQL服务介绍页入口:https://www.huaweicloud.com/product/mysql.html关系型数据库RDS 帮助文档入口:https://support.huaweicloud.com/rds/index.html
-
概观关系数据库几十年来一直是企业应用程序的基础,自1995年MySQL发布以来,它一直是一种流行且廉价的选择,特别是作为早期Web应用程序的普遍LAMP堆栈的一部分。今天,现代企业正在考虑更好的方式来存储和管理他们的数据 - 无论是为了获得更好的客户洞察力,适应不断变化的用户期望,还是通过新的应用程序和商业模式将竞争对手推向市场。因此,推动早期关系数据库开发的许多假设已经发生了变化: [*]要求更高的开发人员生产力和更快的上市时间,传统的僵化的关系数据模型和瀑布式开发的单片应用程序让位于敏捷方法,微服务和全栈开发,将发布周期从几个月,几年压缩到几天和几周。 [*]需要管理新的,快速变化的数据类型的大规模增长 - 由新型Web,移动,社交和物联网应用程序生成的结构化,半结构化和多态数据。 [*]全面转向分布式系统和云计算,使开发人员能够利用随需应变,高度可扩展的计算和存储基础架构,并且能够为全球任何地点的工作和观众提供服务,同时满足全新的监管需求数据主权。 因此,为了解决新应用程序的需求并实现现有工作负载的现代化,出现了像MongoDB这样的非关系型数据库。MongoDB 4.0将会在2018年夏季,计划的支持多文档ACID事务,将使开发人员更容易使用。什么是MySQL?MySQL是一个流行的开源关系数据库管理系统(RDBMS),由Oracle公司开发,分发和支持。像其他关系数据库一样,MySQL将数据存储在表中,并使用结构化查询语言(SQL)进行数据库访问。在MySQL中,您可以根据需求预先定义数据库模式,并设置规则来管理表中字段之间的关系。模式中的任何更改都需要执行迁移过程,以使数据库脱机或显着降低应用程序性能。什么是MongoDB?MongoDB是由MongoDB,Inc.开发的开源非关系数据库。MongoDB将数据存储为称为BSON(二进制JSON)的二进制表示形式的文档。相关信息通过MongoDB查询语言一起存储以便快速查询访问。字段可以因文档而异; 不需要向系统声明文档的结构 - 文档是自描述的。如果需要将新字段添加到文档中,则可以在不影响集合中的所有其他文档的情况下创建该字段,而无需更新中央系统目录,也不需要使系统脱机。或者,可以使用模式验证来对每个集合实施数据管理控制。MongoDB的文档数据模型自然映射到应用程序代码中的对象,使开发人员可以轻松学习和使用。文档使您可以轻松地表示层次关系来存储数组和其他更复杂的结构。为10种以上语言提供了原生的,惯用的驱动程序 - 社区已经构建了数十种语言 - 支持即时查询,实时聚合和丰富的索引,以提供强大的编程方式来访问和分析任何结构的数据。由于文档可以汇集相关数据,否则这些数据将在关系模式中通过单独的父 - 子表建模,因此MongoDB的原子单文档操作已经提供了符合大多数应用程序的数据完整性需求的事务语义。一个或多个字段可以在单个操作中写入,包括更新多个子文档和数组的元素。MongoDB提供的保证确保在文档更新时完全隔离; 任何错误都会导致操作回滚,以便客户端收到文档的一致视图。预定于2018年夏季的MongoDB 4.0将增加对多文档事务的支持,使其成为唯一一个将传统关系数据库的ACID保证,文档模型的速度,灵活性和强大功能与智能分布式系统设计来扩展并将数据放在需要的地方。通过快照隔离,事务将提供全局一致的数据视图,并执行全有或全无执行来维护数据完整性。MongoDB中的事务就像开发人员在MySQL中熟悉的事务一样。它们将是多语句,具有类似的语法(例如: start_transaction和commit_transaction),因此对于任何具有交易经验的人员都可以轻松添加到任何应用程序中。与MySQL和其他关系数据库不同,MongoDB建立在分布式系统架构上,而不是单一的单节点设计。因此,MongoDB提供了开箱即用的自动分片功能的横向扩展和数据本地化功能,以及具有高可用特性的副本集。术语和概念MySQL中的许多概念在MongoDB中都有类似的特征。下表概述了MySQL和MongoDB的通用概念。MySQLMongoDBACID事务ACID事务*[tr=rgb(248, 248, 248)]TableCollectionRowDocument[tr=rgb(248, 248, 248)]ColumnFieldSecondary IndexSecondary Index[tr=rgb(248, 248, 248)]JOINsEmbedded documents, $lookup & $graphLookupGROUP_BYAggregation PipelineACID事务计划为MongoDB 4.0 *功能比较和MySQL一样,MongoDB提供了一套丰富的特性和功能,远远超出了简单的NoSQL数据存储所提供的功能和功能。MongoDB具有丰富的查询语言,功能强大的二级索引(包括文本搜索和地理空间),强大的数据分析聚合框架,分面搜索,图形处理等等。使用MongoDB,您还可以在关系数据库中使用更多不同数据类型的这些功能,并且大规模使用。MySQL的MongoDB的NoSQL数据存储开源是是是[tr=rgb(248, 248, 248)]ACID事务是是* 1没有灵活丰富的数据模型没有是部分:架构灵活性,但仅支持简单的数据结构[tr=rgb(248, 248, 248)]模式管理是是没有expressive joins,分面搜索,图表查询,强大的聚合是是没有[tr=rgb(248, 248, 248)]原生语言驱动支持没有是没有数据局部性的水平扩展没有是部分:不控制数据局部性[tr=rgb(248, 248, 248)]对接分析系统和BI系统是是没有企业级安全和成熟的管理工具是是没有[tr=rgb(248, 248, 248)]数据库作为所有主要云端的服务是是没有[*]1预定MongoDB 4.0,2018年夏季 查询语言MySQL和MongoDB都有丰富的查询语言。可以在MongoDB文档中找到完整的语句列表。MySQL的MongoDB的INSERT INTO用户(user_id,年龄,状态)VALUES('bcd001',45,'A')db.users.insert({ user_id:'bcd001', 年龄:45岁, 状态:'A'})[tr=rgb(248, 248, 248)]SELECT * FROM用户db.users.find()更新用户SET状态='C'年龄> 25岁db.users.update( {年龄:{$ gt:25}}, {$ set:{status:'C'}}, {multi:true})为什么使用MongoDB而不是MySQL?各种规模的组织都在采用MongoDB,因为它使他们能够更快地构建应用程序,处理高度多样化的数据类型,并在规模上更高效地管理应用程序。随着MongoDB文档自然地映射到现代的面向对象的编程语言,开发被简化了。使用MongoDB将删除将代码中的对象转换为关系表的复杂对象关系映射(ORM)层。MongoDB灵活的数据模型也意味着您的数据库模式可以随业务需求而变化。MongoDB也可以扩展到多个分布式数据中心内部,从而提供以前在像MySQL这样的关系数据库中无法实现的新的可用性和可伸缩性级别。随着您的部署在数据量和吞吐量方面的增长,MongoDB无需停机即可轻松扩展,并且无需更改应用程序。相比之下,为了达到MySQL的规模,往往需要大量的定制工程工作。JSON文档的开发人员生产力事实证明,将数据作为灵活的JSON文档而不是刚性的行和列处理,可以帮助开发人员更快地移动。从关系型数据库迁移到MongoDB之后,找到能够将开发周期缩短4倍或5倍的团队并不困难。为什么是这样?: [*]文件是很自然的文档以与应用程序相同的方式表示数据。与关系数据库的表格行和列不同,数据可以使用数组和子文档进行结构化 - 与应用程序分别表示数据相同,分别作为列表和成员/实例变量。这使得开发人员可以更简单快速地模拟应用程序中的数据如何映射到存储在数据库中的数据。 [*]文件是灵活的每个文档都可以存储具有其他文档不同属性的数据。例如,考虑一个产品目录,其中存储男士服装细节的文档将存储来自存储平板电脑细节的文档的不同属性。这是一种通常称为“多态性”的属性。使用JSON文档,我们可以在需要时添加新属性,而无需更改集中式数据库模式。在最坏的情况下,这最多会导致关闭数据库中的停机时间显着增加。灵活性文档带来的开发人员可以更轻松地处理由现代移动,Web和物联网应用程序生成的半结构化和非结构化数据。 [*]文件使应用程序更快。对于存储在单个文档中的实体数据,而不是跨多个关系表分布,数据库只需要读取和写入一个地方。将对象的所有数据放在一个地方也使开发人员更容易理解和优化查询性能。 正是出于这些原因,MySQL和其他关系数据库已经增加了对JSON的支持。但是,简单地添加JSON数据类型并不会将开发人员的生产力优势从文档数据库带给MySQL。为什么?因为MySQL的方法可能会降低开发人员的生产力,而不是改进它。考虑以下: [*]专有扩展:查询和操作JSON文档的内容需要使用单独的MySQL特定的SQL函数来访问值,这对大多数开发人员来说并不熟悉。另外,它们不受第三方SQL工具(例如BI平台,数据仓库连接器,ETL和ESB管道等)的支持或认可。 [*]MongoDB与MongoDB有何不同: MongoDB API被广泛理解,并被行业标准工具和连接器所采用。几家大型供应商数据库公司甚至自己也采用了MongoDB API。 [*]传统关系开销:即使有JSON支持,MySQL用户仍然与多层SQL /关系功能绑定,以与JSON数据 - 低级JDBC / ODBC驱动程序和对象关系映射程序(ORM)进行交互。对于有经验的MySQL开发人员来说,这些层可能是熟悉的,但对于许多其他开发人员来说,他们想通过API来与文档和数据进行交互,而这些API对于他们的编程语言来说是自然和惯用的,这些层会带来很高的学习开销 对于性能和查询效率来说,ORM通常也很难被优化 - 即使对于有经验的关系型开发人员也是如此。另外,JSON数据的查询优化统计信息比常规关系数据类型的查询优化统计信息更加有限。 [*]MongoDB与MongoDB的不同之处在于: MongoDB驱动程序在开发人员使用的编程语言中习惯于自然的方法和函数中实现。 [*]复杂数据处理:当使用JSON数据时,MySQL驱动程序不具备将JSON正确和精确地转换为应用程序使用的有用本机数据类型的功能。这包括不同类型的数值(例如浮点,64位整数,小数)时间戳和日期,或Java中的映射或列表或Python中的字典或列表。相反,开发人员必须在他们的应用程序中手动转换基于文本的JSON,从而失去了在不同文档中使用多个数据类型的字段(多态性)的能力,并且使值的计算,排序和比较变得困难且容易出错。 [*]MongoDB如何不同: MongoDB及其驱动程序使用的二进制编码JSON(BSON)支持常规基于文本的JSON不支持的高级数据类型。 [*]没有数据治理: MySQL没有提供本机制来验证在数据库中**或更新的JSON模式,因此开发人员需要添加应用程序或数据库端功能以对数据应用治理控制。 [*]与MongoDB有什么不同: 基于JSON Schema IETF标准的Schema验证允许开发人员和DBA为每个MongoDB集合定义和实施规定的模式结构。 [*]架构刚性: MySQL用户仍然需要为常规关系数据定义架构。如果模式随后被修改以适应新的应用程序需求,则该表针对某些操作被锁定,直到现有数据被复制到新模式中,这就要求在模式迁移期间应用程序停顿。 [*]MongoDB的不同之处:开发人员和数据库管理员可以将完全动态模式的灵活性与某些应用程序所需的治理控制相结合,而不是只存储数据库中的所有数据。 用户通过MySQL选择MongoDB正如下面的例子所说明的,MongoDB在MySQL上的选择是由对开发人员生产力,应用程序性能和规模的彻底改进所驱动的: [*]百度于2012年开始使用MongoDB,在达到性能和可伸缩性限制后,最初从MySQL迁移其用户地址簿服务。现在,超过100种不同的产品和服务由运行在650节点集群上的MongoDB提供支持,部署在多个数据中心内,存储超过1PB的数据。MySQL灵活的文档数据模型可以扩展MongoDB的分布式设计和开发人员的生产力。 [*]Experian Health选择MongoDB作为MySQL和其他关系数据库的动力,为它的通用标识管理器提供支持,该标识管理器是公司用于唯一识别医疗保健客户的新应用程序。选择MongoDB是因为其灵活的数据模型,可扩展性,强大的性能和总体成本。在关系数据库上开发Universal Identity Manager意味着Experian Health开发人员需要执行多达10个SQL连接才能正确匹配患者的身份。使用MongoDB允许公司简化其模式以消除复杂性; 大幅减少查询次数; 提高性能; 并随着数据量的增加而简化增长。 [*]Viacom媒体网络,MTV,喜剧中心,Nickelodeon和其他几十个品牌的主场,在从MySQL迁移后,在MongoDB上构建了大量的轮询,投票和数据收集服务。MongoDB灵活的文档数据模型,横向扩展设计和丰富的聚合流水线使Viacom能够大规模捕获和分析数据。 [*]生物技术巨头Thermo Fisher 将从AWS Aurora上的MySQL迁移到MongoDB以及完全托管的Atlas数据库即服务后实验时间从几天缩短到几分钟。除了以40倍以下的代码提供6倍的性能以外,MongoDB还有助于降低应用程序的架构复杂性。 MongoDB的常见用例是什么?MongoDB是一个通用数据库,用于各种用例。MongoDB最常见的用例包括, 单一视图,物联网,移动,实时分析,个性化,目录和内容管理。随着多文档交易的增加,MongoDB将更加容易处理一系列的用例。MySQL何时更适合?虽然许多组织已经成功从RDBMS迁移到MongoDB,但您不能将MongoDB作为以关系数据模型和SQL为基础构建的遗留应用程序的替代品。然而,组织正从将关键任务,创收应用现代化到MongoDB中受益。例如,思科将其电子商务平台从传统关系数据库迁移到MongoDB。因此,它通过降低8倍延迟并消除系统升级期间的停机时间,改善了客户体验。其开发团队可以更快地构建和发布新的应用程序,而公司的电子商务平台可以利用云计算所带来的业务敏捷性。想要了解更多?将RDBMS获取到MongoDB迁移指南由于我们今天构建和运行应用程序的方式,以及数据源和用户负载的增长,关系数据库正在被超越其极限。为了应对这些挑战,像MTV和思科这样的公司已经成功地从关系数据库迁移到MongoDB。在本白皮书中,您将了解到: [*]一步一步如何从关系数据库迁移到MongoDB。 [*]相关的技术考虑因素,例如关系数据模型和文档数据模型之间的差异以及对模式设计的影响。 [*]索引,查询,应用程序集成和数据迁移。
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签