-
评价问题,均以解答:实验链接:沙箱实验室_在线实验_上云实践_云计算实验_AI实验_华为云官方实验平台-华为云 (huaweicloud.com)1、ping RDS连接的公网IP(无法直接ping通,需要放通ICMP协议端口2、-h (RDS连接公网IP) -uroot -p(无需空格)自定义RDS密码完成
-
目录1.需求分析 1.1 阶段目标 1.2 说明书内容 1.3 工作任务2.概念结构设计 2.1 阶段目标 2.3 工作任务 2.4 设计策略 2.5 设计方法. 2.6 工作过程 2.6.1 局部设计 2.6.2 合并局部 2.6.3 优化全局3.逻辑结构设计. 3.1 阶段目标. 3.2 工作任务 3.3 转换方法. 3.4 工作过程.4.物理结构设计. 4.1 阶段目标 4.2 工作任务. 4.3 注意问题. 4.4 工作过程.1.需求分析需求分析阶段是数据库设计阶段的基础和最初阶段。收集各类基础数据、用户需求信息和信息处理需求,确定设计思路。需求分析决定后续设计的质量和速度,是其他阶段的依据,也是最困难和最耗时的阶段。1.1阶段目标根据对数据库应用系统所要处理的对象进行全面了解,以及大量收集支持系统目标实现的各类基础数据,调查用户对数据库信息的需求、对基础数据进行加工处理的需求、对数据库安全性和完整性的要求,按一定规范要求写出设计者和用户都能理解的需求分析说明书。1.2说明书内容(1) 分析用户活动过程与状态,产生业务流程图;(2)确定系统范围,产生系统范围图;(3)分析用户活动涉及的数据集。1.3工作任务利用数据库设计理论和方法,对现实世界服务对象的现行系统进行详细调查,收集支持系统目标的基础数据及其数据处理需求,撰写需求分析报告。具体任务如下:(1)调查数据库应用系统所涉及的用户各部门]情况,确定系统功能范围,判断哪些工作可交由计算机完成。(2)了解用户对数据库应用系统的各种要求,包括信息要求、处理要求、安全性和完整性要求。(3)深入分析用户的各种需求,并用数据流图或数据字典描述数据及处理过程。如上图所示,需求分析阶段工作过程中,数据库设计者要向用户作需求调查,在进行调查时最好深入用户的工作场所进行详细了解,与用户交流,明确用户需求并确定系统服务边界,最终形成需求分析报告。2.概念结构设计概念结构设计阶段主要设计数据库的整体概念结构,即把需求分析结果抽象为反映用户需求信息和信息处理需求的概念模型概念模型独立于数据库管理系统,也独立于数据库逻辑模型,还独立于计算机和存储介质上的数据库物理模型2.1阶段目标概念结构设计目标是在需求分析的基础上,进行分析、归纳、抽象,形成一个符合数据对象实际、用户需求及工作要求的、独立于具体DBMS和计算机硬件结构的整体概念结构,即提出概念模型.2.3工作任务概念结构设计的具体工作任务流程如下:(1)进行数据抽象;(2)设计局部概念模式,得到局部E -R图;(3)将局部概念模式综合成全局概念模式,得到全局E-R图;(4)评价全局概念模式与优化,得到优化的全局E- R图。2.4设计策略(1)自顶向下:先定义全局E-R模式框架,然后逐步进行细化。(2)自底向上:首先定义各局部应用的概念结构,然后将它们集成起来,得到全局概念结构。(3)由内向外:首先定义最重要的核心概念结构,然后向外扩充,以滚雪球的方式逐步生成其他概念结构,直至生成总体概念结构。(4)混合策略:将“自顶向下”和“自底向上”相结合。2.5设计方法(1)集中式设计法:根据用户需求由一个统一的机构或人员一次设计出数据库的全局E-R模式。特点:容易保证E-R模式的统一性与一致性, 但它仅适用于小型或并不复杂的数据库设计问题,而对大型的或语义关联复杂的数据库设计并不适用。(2)分散-集成设计法:设计过程分为两步:①将企业或部门的用户需求,根据原则将其分解成若干个部分,对每个部分设计局部E-R模式;②各个局部E-R模式进行集成,消除可能的冲突,形成一个全局E-R模式。特点:设计过程比较复杂,但能较好地反映用户需求,对于大型和复杂的数据库设计问题比较有效。2.6工作过程概念结构设计阶段工作过程:先设计局部概念结构,再整合全局概念结构2.6.1局部设计(1) 确定概念结构的范围:将用户需求划分成若千个部分。划分方法:①根据企业的组织机构对其进行自然划分②根据数据库提供的服务种类进行划分(2)定义实体型:逐一确定每一个实体型的属性及其属性名和主码①区分实体与属性。②给实体集与属性命名。③确定实体标识,即确定实体集的主码④非空值原则:保证主码中的属性不出现空值。(3)定义联系:即判断实体集之间是否存在联系,并定义实体集之间联系的类型。①确定实体集之间是否存在联系,并确定联系类型。②定义联系的方法。③为实体集之间的联系命名:联系的命名应反映联系的语义性质,通常采用动词。④确定每个联系的存在属性,并为其命名。2.6.2合并局部合并局部E-R模式为全局E R模式:区分公共实体型、 合并局部概念结构设计和消除冲突。(1)区分公共实体型:一般根据实体型名称和主码来认定公共实体型。(2)合并局部概念结构:将具有公共实体型的局部概念结构设计进行合并,再加入独立的局部概念结构设计。(3)消除冲突:消除合并过程中局部概念结构设计之间出现的不一致描述。①命名冲突:包括属性名,实体型名,联系名之间的冲突。同名异义,即不同意义的对象具有相同的名字(编号)异名同义,即同一意义的对象具有不同的名字(姓名和名字)。②结构冲突:同一对象在不同的局部概念结构设计中的抽象不一致,同一实体在不同的局部E-R模式中其属性组成不同。2.6.3优化全局(1)优化标准①能全面、准确地反映用户需求,且具有实体型的个数尽可能少②实体型所含属性个数尽可能少③实体型之间联系无冗余(2)优化方法:①将实体型进行合并,将两个有联系的实体型合并为一个实体型②消除属性的冗余③消除联系的冗余(3)优化原则:①权衡存储空间、访问效率和维护代价②适当合并实体型③适当消去部分冗余属性和联系。概念结构设计阶段工作过程,如图所示:3.逻辑结构设计3.1阶段目标逻辑结构设计目标是在概念结构设计的基础上,在一定的原则指导下将概念模式结构转换为与某具体DBMS支持的数据模型相符合的、经过优化的逻辑结构。3.2工作任务(1) 选定DBMS;(2)将概念模式转换DBMS支持的数据模型(全局关系模式) ;(3)利用规范化原则优化( 良好全局关系模式) ;(4)实现数据模型完整性(关系的完整性相关约束)3.3转换方法概念结构转换成逻辑结构的方法通常采用“二步式”,一是按“转换规则”直接转换,二是进行关系模式的优化一、概念模型转换成逻辑结构原则(1)实体型的转换:对于概念结构中的每个实体型,设计一个关系模式与之对应,使该关系模式包含实体型的所有属性。通常用下划线来表示关系模式的主码所包含的属性。(2)联系的转换:联系的转换方法是由联系的类型决定的,具体做法如下。①1:1联系的转换②1:n联系的转换③m:n联系的转换二、关系模式的优化1、 确定数据依赖2、消除冗余的联系3、确定所属范式4、数据处理的是否合适5、对关系模式进行必要分解,提高数据操作效率和存储空间的利用率3.4工作过程首先是要选定DBMS,然后将概念结构转换为DBMS支持的数据模型,最后利用规范化原则优化数据模型。逻辑结构设计阶段工作过程,如下图所示:4.物理结构设计4.1阶段目标物理结构设计阶段目标是为逻辑数据结构选取一个最适合应用环境的物理结构,包括存储结构和存取方法等。整体可分为两个部分:一是确定物理结构,二是评价物理结构。4.2工作任务1、存储记录结构设计:定义数据库表结构2、确定数据存放位置:数据库存储设计的基本原则:①同一类文件存放在同一目录。②易变部分和稳定部分应该分开存放。③存取频率搞得部分和低的部分应该分别存放到快速和慢速设备。④根据应用系统的文件类型和应用选修,统一设计文件目录结构。3、存取方法的设计:数据库管理系统一般提供索引方法和聚簇方法。①B+树索引方法:根据应用要求确定对关系的那些属性列建立索引、哪些属性列建立组合索引、哪些索引|要设计唯一索引。②Hash索引方法:如果一个关系的属性主要出现在等值连接条件中或主要出现在等值比较选择条件中,而且满足下列两个条件之一,则此关系可以选择Hash存取方法。③聚簇存取方法:为了提高某个属性(或属性组)的查询速度,把这个或这些属性(称为聚簇码).上具有相同值的元组集中存放在连续的物理块称为聚簇。4、完整性和安全性考虑;5、对物理结构进行评价:①评价内容:存取方法选取的正确性、存储结构设计的合理性、文件存放位置的规范性、存储质选取的标准性。①评价指标:存储空间的利用率、存储数据的速度和维护费用等。②评价方法:根据评价内容,统计存储空间的利用率、数据的存取速度的维护费用指标。6、程序设计:如前台代码的设计等。4.3注意问题物理模型设计注意的问题有以下:1.确定数据的存储结构:设计关系、索弓|等数据库文件的物理存储结构,需注意存取时间、空间效率和维护代价间的平衡;2.选择合适的存取路径:确定哪些关系模式建立索引,索引关键字是什么等等;3.确定数据的存放位置:确定数据存放在一个磁盘上还是多个磁盘上;4.确定存取分布:许多DBMS都提供了一些存储分配参数供设计者使用(如缓冲区的大小和个数、块的长度、块因子的大小等等)4.4工作过程物理结构设计阶段首先要设计存储记录的表结构,然后,确定数据存放位置和存取方法,同时也要设计数据的完整性和安全性。物理结构设计阶段工作过程,如下图所示:5.总结在新时代下,由于在功能和可靠性上优于传统数据库,再加上增强的可伸缩性,云原生分布式数据库无疑代表了数据库的未来。华为云GaussDB数据库的全新升级是数据库行业自身快速发展的又一个里程碑。在整个科技领域快速向前的加速周期中,华为云GaussDB再次指引了数据库行业的发展方向。在新基建大潮中,华为云乘风破浪,以全新的GaussDB数据库赋能千行百业智能升级。我相信,未来的时代属于云时代!本文整理自华为云社区【内容共创】活动第15期。https://bbs.huaweicloud.com/blogs/345822任务19:华为云数据库之数据库设计和建模原文链接:https://bbs.huaweicloud.com/blogs/349456
-
近日,北京太阳塔信息科技有限责任公司(简称:太阳塔科技)旗下LXNDB-RDS私有云数据库产品(后简称“LXNDB-RDS”)获华为鲲鹏Validated认证。太阳塔科技联合四川鲲鹏创新中心对LXNDB-RDS私有云数据库解决方案进行深度全栈优化,通过使用鲲鹏应用使能套件BoostKit,使得LXNDB-RDS总体性能最高提升25.78%。该方案基于鲲鹏硬件、麒麟操作系统以及太阳塔科技自主研发的2地3中心集群架构,支持虚拟化部署,拥有超大规模集群部署能力,单节点高并发能力,已突破金融、航空、交通、医疗等行业场景核心系统,实现方案落地。通过鲲鹏Validated认证的LXNDB-RDS,是太阳塔科技在数据库领域,十余年的实践积累,呕心沥血打造的企业级私有云数据库解决方案,LXNDB-RDS实现了集群自动读写分离、节点失败自动转移、高并发、自动负载,以及智能告警等功能特性,全面提升企业数据库效率和安全性。目前已经成功的应用于证券、交通、医疗等机构的核心交易系统。此次联合鲲鹏生态创新中心深度优化后,LNXDB-RDS使用鲲鹏应用使能套件BoostKit对平台进行全栈调优,在BenchmarkSQL 100和300仓TPCC测试场景下,TPMC在100仓300并发条件下性能提升25.78%,整体较业界主流方案均有较大幅度提升,为金融、交通等行业的大并发,大数据量场景提供了更好的服务能力。联合方案特性实践01 毕昇JDK基础优化毕昇JDK基于OpenJDK开发,是一个高性能、可用于生产环境的OpenJDK发行版。针对ARM架构和大数据场景优化,可以获得更好的性能,提升系统的整体性能明显。02 鲲鹏底座+银河麒麟高级服务器操作系统鲲鹏处理器的多核架构提供高性能、高并发算力;同时基于openEuler内核开发的银河麒麟高级服务器操作系统,在可靠性和安全性等方面针对鲲鹏处理器进行了深度优化,充分发挥了LNXDB-RDS数据库的性能优势。03 NUMA亲和性鲲鹏处理器基于NUMA架构,通过适当的性能调优,既能够达成很好的性能,又能够解决SMP架构下的总线瓶颈问题,提供更强的多核扩展能力。通过CPU绑核和配置NUMA亲和性,提高了数据库读写的缓存命中率。太阳塔科技作为鲲鹏计算产业生态的重要伙伴,与鲲鹏生态创新中心建立长期合作关系。此前已通过鲲鹏服务器认证,实现了与鲲鹏生态的良好融合,今后将与鲲鹏生态创新中心携手实现私有云数据库领域的全方位布局,进一步实现技术和业务的多方面合作,为客户提供更多的优质解决方案,共同为我国企业数字化转型发力。拥抱鲲鹏计算产业,共创行业新价值!关于太阳塔科技北京太阳塔信息科技有限责任公司(简称太阳塔科技),专业的国产数据库解决方案提供商!由知名数据库专家赵振平老师创立于2013年。目前已服务上百家客户,覆盖通信、金融、交通、医疗、制造等多个行业,为众多行业头部客户企业提供包含数据库技术服务、数据库软件产品等一体化解决方案。转自华为计算公众号
-
我们不断探索在指尖,在应用,在云上全面云化时代数据是企业数字化转型的基石数据的价值被深度挖掘华为云GaussDB为企业提供更安全、更稳定、更智能的云上数据库服务华为云数据库GaussDB品牌视频1000+稀缺研发专家800+核心科技专利2000+实践案例 开源开放包容产学研用一体化 华为云GaussDB企业核心数据上云的信赖之选全新品牌主张,持续实力超越长按识别二维码,可以观看华为云数据库GaussDB品牌视频哦!【原视频链接】https://www.huaweicloud.com/product/dbs.html
-
#开发者故事,有奖征集书写代码与修改BUG是开发者大多数的日常:有时探索良久却毫无进展,抓耳挠腮不得其因;有时眉头紧锁间忽地灵光一现,柳暗花明又一村;个中滋味,最有体会。数据库邀你,分享你的故事。让这份分享成为一盏明灯,照亮更多的人。 一、 活动时间投稿期:即日起-2022/12/30审核周期:每月投稿内容,月底审核;每月优秀投稿,年终评比,获优质大奖投稿形式:视频、文章(不用担心你的文笔和表达能力,投稿后我们会协助你优化的哟) 二、奖励规则奖项数量要求奖励投稿奖励(合格)不限故事稿件10000码豆或小礼包(平装套芯笔记本LB-RPZX+新贵族系列中性笔+金属书签)故事稿件&开发者故事视频20000码豆+大礼包【华为云数据库书籍(3选1)+平装套芯笔记本LB-RPZX+新贵族系列中性笔+金属书签】邀请奖励不限邀请好友完成投稿并合格5000码豆年终评选5个(数量可以上下浮动)多位华为云数据库专家评审1.华为云开发者年终盛典典礼上进行荣誉表彰2.奖品:第1名,价值269元HUAWEI FreeLace无线耳机活力版曜石黑1个、第2~3名,价值199元华为手环4 (曜石黑)2个、第4~5名,价值129元HUAWEI mini蓝牙音箱 _绮境森林2个 数据库书籍(3选1:华为数据之道、数据库原理及应用、openGauss数据库核心技术)三、活动要求投稿作者需真实使用或体验过华为云数据库的产品/服务/工具/课程等资源,内容上要与华为云数据库相关,可以是技术分享、实践、案例等,也可以是与数据库相关的故事。故事要求1000字以上,保证真实、原创,拒绝杜撰剽窃;如果未使用过华为云数据库产品,也想参与活动,请点击开发者免费试用专区进行产品体验,如果需要提供相关课程或者学习资料,请添加添加“华为云数据库小助手”微信:18209232786,进行咨询。四、 参与流程思路梳理:参考附件【开发者故事提纲】列出的一些问题,可以帮助你构建故事的框架,进而完成故事的撰写。撰写故事:请根据步骤1中填写的提纲,完善你的“开发者故事”,要求1000字以上,保证真实、原创,拒绝杜撰剽窃。完成投稿:将故事发送给小助手,合格后可获得投稿奖励, 投稿过程中有任何疑问欢迎随时来撩!邀请好友:邀请好友完成投稿,好友投稿给小助手时,说明或者备注邀请人的华为云用户名,即邀请成功,邀请人可获得邀请奖励。审核通过:在投稿后10个工作日内完成审核,审核通过的合格作品可在华为云博客发布并获得优秀开发者礼包。专家评选:年底,我们将对所有合格投稿进行评选,选出优质的前5名(数量可根据具体情况浮动),在华为云开发者年终盛典典礼上进行表彰,同时进行奖品奖励。注意事项请遵守华为云社区常规活动规则: cid:link_0码豆奖励活动规则:什么是码豆>>>码豆会员中心入口<<< 码豆可在码豆会员中心兑换实物礼品;码豆奖励将于活动获奖公示后3个工作日内充值到账,请到会员中心的“查看明细”中查看到账情况;码豆只能用于会员中心的礼品兑换,不得转让,具体规则请到会员中心阅读“码豆规则”;为保证码豆成功发放,如果修改过账号名还请向工作人员提供修改前后的账号名。
-
Hi,等你好久了……数据库论坛,是一个以技术交流、内容分享为导向,为广大开发者提供数据库干货分享、问题求助、热门活动、交流吐槽等的内容平台!2022年5月起,华为云数据库论坛启动开发者激励计划,欢迎来数据库论坛分享干货内容(华为云数据库GaussDB产品技术文章最受欢迎),另外,互动就有奖励哦! 活动内容及奖励活动内容有效动作任务次数奖励码豆(单次)备注基础任务发帖每日任务0/3200码豆,华为云数据库GaussDB产品技术文章100码豆,其他发帖每日上限750数据库相关提问帖每日任务0/325码豆数据库回复/评论每日任务0/325码豆额外奖励活跃天数≥5天 200码豆 活跃天数≥10天 500码豆 年终杰出贡献奖根据发文数量&质量、论坛帖问题解决数量、活跃度等评选为年度数据库优质开发者 20000码豆+数据库GaussDB期刊+数据库书籍(3选1,具体如下)中奖用户数量不限数据库书籍共3本:数据库原理及应用(GaussDB for MySQL)、华为数据之道、openGauss核心技术有问题请添加小助手进行咨询:微信号18209232786规则说明 活跃天数:在数据库论坛有任何互动行为(发帖、回复、评论)当天即为活跃1天。发帖、回复均需发生在数据库论坛,且所互动内容不可为无意义、灌水内容,可通过参与论坛活动参与话题互动。基础任务每天领取码豆上限750,任务次数详见参与步骤说明。每年末根据当年所有开发者活跃情况以及内容质量评选年度优秀开发者。码豆奖励将在次月10日前发放至符合条件的开发者帐号中,请至会员中心查看。本活动自2022年5月1日起开启,活动试行3个月,活动期间将根据大家的意见或建议适当调整。原创保护体系:原创的博客受原创保护,一旦被证实抄袭,管理员立即删帖,且对抄袭博主进行处罚,抄袭次数超过三次进行封号。差评体系:得到别的用户的差评, 被投诉,和其他违法社区规定的行为,一经被投诉三次,经管理员审核属实后,将进行封号处置。 对于滥发博客,评论的用户,参考社区管理规定处罚。码豆奖励活动规则: 什么是码豆>>>码豆会员中心入口<<< 1)码豆可在码豆会员中心兑换实物礼品; 2)码豆奖励将于活动获奖公示后3个工作日内充值到账,请到会员中心的“查看明细”中查看到账情况; 3)码豆只能用于会员中心的礼品兑换,不得转让,具体规则请到会员中心阅读“码豆规则”; 4)为保证码豆成功发放,如果修改过账号名还请向工作人员提供修改前后的账号名。
-
随着信息时代的到来,信息技术高速发展,数据互联互通成为必然。传统的数据库已不能够满足海量数据的需求。因此,基于云计算的云数据库技术应运而生。云数据库是指被优化或部署到一个虚拟计算环境中的数据库。与传统的分布式数据库相比,云数据库具有高可扩展性、高可用性、采用多租形式和支持资源有效分发等特点。因此,云数据库是数据库技术的未来发展方向。云数据库应用在水利管理领域,能弥补基层水利管理中信息互通的短板,降低管理投入成本,优化管理结构。当今社会,数据库被广泛应用于生活的各个领域,服务于每个人的衣食住行,推动并见证着社会的文明与发展。随着信息时代的到来,信息技术高速发展,数据互联互通成为必然。传统的分布式数据库已不能够满足需求。海量数据的传输和运算存在瓶颈。至此,一种分布式计算、网络存储、虚拟化计算环境等计算机技术混合演进的网路计算模式,解决了这一难题,它被称之为“云计算”。同时,基于“云计算”算法模式下的云数据库技术,应运而生。1 云数据库的概念和重要意义1.1 云数据库的概念云数据库是指被优化或部署到一个虚拟计算环境中的数据库。与传统的分布式数据库相比,云数据库具有高可扩展性、高可用性、采用多租形式和支持资源有效分发等特点。在实践中能最大限度处理海量数据,满足大数据处理需求。1.2 云数据库技术应用于水利管理领域的意义水利管理领域涉及灌溉、防洪抗旱,水资源管理等方面,从基层灌区站所到区县河道流域,面临着数据更新滞后,信息互通短板,监督存在盲区现象。云数据库的应用,能解决水利管理中海量数据计算存储,增加数据的完整性,实效性,降低水利管理运行成本。综上所述:云数据库应用在水利管理领域,能弥补基层水利管理中信息互通的短板,降低管理投入成本,优化管理结构,解决好水利管理存在中突出的矛盾,对水利事业的发展,具有深远的意义。2 云数据库技术在水利管理中应用2.1 云数据库技术应用于灌溉管理数据系统基层水利管理模式是将灌溉水量的测算,水费征缴,水资源管理分属不同的管理部门,部门之间信息互通有限。建立完整的云数据库系统,以流域为单位,各层级之间设置相应读写权限,最大程度方便各级部门之间的信息互通,节省了管理成本,简化管理程序。2.2 云数据库应用技术于水费征收系统灌区水利站所承担水费征收任务,历来水费征收按照轮次征收,先灌溉,后缴费,致使部分站所水费征收滞后,费用无法按时足额汇缴。加之管理区域较大,用水户缴费存在诸多不便。云数据库通过互联网存储读取数据,使用水户能及时了解所用水量,方便缴纳水费。从而真正扭转基层水利管理落后的局面。3 云数据库技术应用过程中注意问题3.1 云数据库结构层系统体系架构设计云数据库的系统体系架构多种多样,随着水利管理更加精细化管理的趋势,尤其近年来,诸如将地下水超采,作为基层水利管理所重点工作,这就要求云数据库技术打破传统的非关系型数据存储方式,发挥云数据库可扩展分布式关系的优点,对云数据库结构层系统的架构进行深入研究,保证数据存储类型多样,存储结构逻辑清晰。3.2 云数据库算法优化云数据库能够兼顾分布式和动态更新的数据存储方式,能一改树型查找算法和静态查找算法的弊端。通过适合云数据库的确定性算法,保证在有限的组合中,优化问题导向,找到最优解。在灌溉管理中,云数据库能发挥其为其海量信息处理特点, 在设计算法时从水利管理的全局的出发,考虑到网络的流量、拥塞等问题,保证数据存储的时效性。3.3 云数据库安全云数据库应用于水利管理领域,应着重加强安全管理,尤其注重数据库防火墙建设。水利灌溉数据需要评估和划分放置在云端的数据等级,分级对云端的数据进行加密,同时确保数据读写的安全。4 结 论云数据库应用于水利管理领域,将解决水利管理中数据孤立,信息互动,探索云数据库技术在水利灌溉,水情监测等方面的应用,对于推动水利管理向区域化方向发展具有深远的意义。来自:农业信息化
-
本文介绍RDS for PostgreSQL支持的插件及不同插件的创建、删除或使用方法。PostgreSQL插件简介PostgreSQL是开源数据库中经典的大型关系型数据库之一,它不仅具备经典关系型数据库的功能,而且在不断发展。PostgreSQL的发展不仅受到了很多基于PostgreSQL外部应用的影响,而且发展出了更多基于PostgreSQL的应用,例如PostGIS(GIS领域中重要组件)。从技术角度讲,PostGIS是PostgreSQL的一个扩展(extension),即插件。像PostGIS这样的插件已经在计算机相关的领域中都得到不同程度的应用,它成为PostgreSQL功能延展性的主要特点。PostgreSQL插件的功能不仅体现在新增复杂的数据类型、索引等数据的基本功能上,这些基本功能也是GIS领域所特别需要的,并且PostgreSQL的插件可以完成包括分布式、异构数据访问等的各种高级功能。这使得PostgreSQL数据库不仅仅是一个传统的经典关系型数据库,并且通过插件的扩展功能,它完全可以满足今天互联网对于大数据应用的需求。RDS for PostgreSQL插件列表RDS for PostgreSQL和社区版PostgreSQL一样,也支持通过插件,实现更多的扩展功能。当前RDS for PostgreSQL支持的插件如下表所示:插件名称PostgreSQL 9.5PostgreSQL 9.6PostgreSQL 10PostgreSQL 11PostgreSQL 增强版PostgreSQL 12PostgreSQL 13address_standardizer2.5.12.5.12.5.12.5.12.5.13.0.03.1.0address_standardizer_data_us2.5.12.5.12.5.12.5.12.5.13.0.03.1.0amcheck无无无1.11.11.21.2auto_explain2222222bloom无无无1.01.01.01.0btree_gin1.01.01.21.31.31.31.3btree_gist1.11.21.51.51.51.51.5citext1.11.31.41.51.51.61.6cube1.01.21.21.41.41.41.4dblink1.11.21.21.21.21.21.2dict_int1.01.01.01.01.01.01.0dict_xsyn1.01.01.01.01.01.01.0earthdistance1.01.11.11.11.11.11.1fuzzystrmatch1.01.11.11.11.11.11.1hll2.122.122.122.122.122.142.15.1hstore1.31.41.41.51.51.61.7icu无无无1.01.01.01.0intagg1.01.11.11.11.11.11.1intarray1.01.21.21.21.21.21.3isn1.01.11.11.21.21.21.2ltree1.01.11.11.11.11.11.2mysql_fdw无无无2.5.52.5.52.5.52.5.5oracle_fdw无无2.1.02.1.02.1.02.2.02.3.0orafce3.8.03.8.03.8.03.8.003.8.03.14.0pageinspect1.31.51.61.71.71.71.8passwordcheck2222222pg_bigm无无无1.2_202002281.2_202002281.2_202002281.2_20200228pg_buffercache1.11.21.31.31.31.31.3pg_cron无无无无无1.2.01.3.0pg_freespacemap1.01.11.21.21.21.21.2pg_hint_plan1.1.51.2.01.3.01.3.51.3.51.3.71.3.7pg_jieba1.1.01.1.01.1.01.1.01.1.01.1.02.0.1pg_pathman1.5.81.5.81.5.81.5.81.5.81.5.121.5.12pg_prewarm1.01.11.11.21.21.21.2pg_repack1.4.61.4.61.4.61.4.61.4.61.4.61.4.6pg_roaringbitmap无无无0.5.20.5.20.5.20.5.2pg_stat_statements1.31.41.61.61.61.71.8pg_trgm1.11.31.31.41.41.41.5pg_visibility无无无1.21.21.21.2pgcrypto1.21.31.31.31.31.31.3pglogical无无无2.3.32.3.32.3.32.3.3pg_profile_pro无无无无无1.0无pgrouting无无无3.1.03.1.03.1.03.1.3pgrowlocks1.11.21.21.21.21.21.2pg_sql_history1.01.01.01.01.01.01.0pgsql-ogr-fdw无无无1.0.121.0.121.0.121.0.12pgstattuple1.31.41.51.51.51.51.5plpgsql1.01.01.01.01.01.01.0plperl无无无1.01.01.01.0plproxy无无无2.10.02.10.02.10.02.10.0plv8无无无2.3.152.3.152.3.152.3.15postgis2.5.12.5.12.5.12.5.12.5.13.0.03.1.0postgis_raster集成到postgis集成到postgis集成到postgis集成到postgis集成到postgis3.0.03.1.0postgis_sfcgal2.5.12.5.12.5.12.5.12.5.13.0.03.1.0postgis_tiger_geocoder2.5.12.5.12.5.12.5.12.5.13.0.03.1.0postgis_topology2.5.12.5.12.5.12.5.12.5.13.0.03.1.0postgres_fdw1.01.01.01.01.01.01.0postgres-decoderbufs无无无1.3.11.3.11.3.11.3.1postgresql_anonymizer无无无0.7.10.7.10.7.10.7.1q3c无无无2.0.02.0.02.0.02.0.0rum无无无1.3.701.3.71.3.7sslinfo无无无1.21.21.21.2tablefunc1.01.01.01.01.01.01.0tds_fdw无无2.0.12.0.12.0.12.0.12.0.2test_decoding2222222timescaledb01.3.21.3.21.3.21.3.21.7.02.1.0tsm_system_rows1.01.01.01.01.01.01.0tsm_system_time1.01.01.01.01.01.01.0unaccent1.01.11.11.11.11.11.1uuid-ossp1.01.11.11.11.11.11.1wal2json无无无2.32.32.32.3xml2无无无1.11.11.11.1zhparser1.01.01.01.01.01.01.0表中的数据均来源于PostgreSQL引擎各个版本,最新小版本支持的插件列表。您可以通过SELECT name FROM pg_available_extensions;查看当前实例支持的插件列表。如果当前实例的版本不支持某个插件,您可以将当前实例迁移至新版本实例,迁移方法请参考迁移方案概览。使用mysql_fdw、oracle_fdw、pgsql-ogr-fdw、postgres_fdw和tds_fdw等需要跨数据库实例访问的插件时,需确保两个数据库实例的服务端IP必须在同一个VPC和子网内。具有公测权限的用户才可使用RDS for PostgreSQL 13,您可以提交工单申请。创建RDS for PostgreSQL插件RDS for PostgreSQL插件是数据库级生效,并不是全局生效。因此创建插件时需要在业务所在数据库上进行手动创建。RDS for PostgreSQL的以下插件不需要通过手动创建或删除:auto_explainpasswordcheckpg_profile_propg_sql_historyplpgsqlwal2jsontest_decodingRDS for PostgreSQL 11、RDS for PostgreSQL 增强版、RDS for PostgreSQL 12和RDS for PostgreSQL 13的最新小版本,支持以root用户通过社区的方式来创建(create extension)、删除(drop extension)插件。1. 执行如下命令,以root用户连接数据库,以database1为例,并使用模板库template1创建需要支持插件的数据库。# psql --host=RDS_ADDRESS --port=DB_PORT --dbname=database1 --username=root -c "create database DB_NAME template template1;"RDS_ADDRESS为RDS实例的IP地址。DB_PORT为RDS数据库实例的端口。DB_NAME为需要创建插件的数据库名称。回显如下信息,请输入root用户的密码。Password for user root:如果执行操作为:由普通用户user1创建的数据库db1,您需要先使用普通用户user1登录数据库db1(登录方式参考上述内容),然后执行如下命令将数据库db1的权限授予root用户。GRANT ALL ON DATABASE db1 TO root;示例:创建需要支持插件的数据库my_extension_db# psql --host=192.168.6.141 --port=5432 --dbname=database1 --username=root -c "create database my_extension_db template template1;"Password for user root: CREATE DATABASE2. 以root用户连接需要支持插件的数据库,并创建插件。# psql --host=RDS_ADDRESS --port=DB_PORT --dbname=DB_NAME --username=root -c "select control_extension('create','EXTENSION_NAME');"RDS_ADDRESS为RDS实例的IP地址。DB_PORT为RDS数据库实例的端口。DB_NAME为需要创建插件的数据库名称。EXTENSION_NAME为插件名称,请参见上表。回显如下信息,请输入root用户的密码。Password for user root:示例:在数据库my_extension_db中创建postgis插件# psql --host=192.168.6.141 --port=5432 --dbname=my_extension_db --username=root -c "select control_extension('create','postgis');"Password for user root: control_extension ------------------------------ create postgis successfully. (1 row)删除RDS for PostgreSQL插件RDS for PostgreSQL插件是数据库级生效,并不是全局生效。因此创建插件时需要在业务所在数据库上进行手动创建。RDS for PostgreSQL的以下插件不需要通过手动创建或删除:auto_explainpasswordcheckpg_profile_propg_sql_historyplpgsqlwal2jsontest_decodingRDS for PostgreSQL 11、RDS for PostgreSQL 增强版、RDS for PostgreSQL 12和RDS for PostgreSQL 13的最新小版本,支持以root用户通过社区的方式来创建(create extension)、删除(drop extension)插件。执行如下命令,以root用户连接已创建插件的数据库,并删除插件。# psql --host=RDS_ADDRESS --port=DB_PORT --username=root --dbname=DB_NAME -c "select control_extension ('drop','EXTENSION_NAME');"RDS_ADDRESS为RDS实例的IP地址。DB_PORT为RDS数据库实例的端口。DB_NAME为需要创建插件的数据库名称。EXTENSION_NAME为插件名称,请参见上表。回显如下信息,请输入root用户的密码。Password for user root:示例:# psql --host=192.168.6.141 --port=5432 --dbname=my_extension_db --username=root -c "select control_extension('drop','postgis');"Password for user root: control_extension ---------------------------- drop postgis successfully. (1 row)RDS for PostgreSQL插件说明插件名称插件说明postgis创建postgis插件时,会同步创建以下插件:postgis、postgis_topology、fuzzystrmatch、postgis_tiger_geocoder、address_standardizer及address_standardizer_data_us。创建的postgis插件版本如果大于等于3.0.0,创建postgis插件时会同步创建postgis_raster插件。创建postgis插件时,主备实例的主机创建插件后,请先断开备机已经建立的连接,备机需要重新建立连接更新search_path设置。对于PostgreSQL增强版实例,创建postgis插件前,需要在控制台上将实例参数“empty_is_null”设置为“OFF”。plpgsqlplpgsql 1.0插件支持提供SQL过程语言,默认内置安装,无需手动创建该插件。earthdistance安装earthdistance插件前,请先安装cube插件。cube如果已安装earthdistance插件,删除cube插件会导致earthdistance插件不可用。timescaledbRDS for PostgreSQL的timescaledb插件不支持tsl协议的特性,具体如下:add_compress_chunks_policyadd_drop_chunks_policyadd_reorder_policyalter_job_schedulecompress_chunkdecompress_chunkdrop_chunksinterpolatelocfmove_chunkremove_compress_chunks_policyremove_drop_chunks_policyremove_reorder_policyreorder_chunkset_integer_now_functime_bucket_gapfillwal2json该插件是逻辑复制插件,您可以直接使用该插件,不需要通过control_extension安装。pg_profile_pro因发现插件存在缺陷,现暂时关闭支持,我们会在缺陷修复后重新开放,给您造成不便敬请谅解。pg_repackpg_repack可以使用最小的锁资源来重新整理表和索引的物理页面,从而实现物理页面的碎片整理。相较于使用cluster和vacuumn full重写表,pg_repack不需要在整个处理期间持有表级排他锁,因此能提供近似的在线服务。具体操作请参考使用pg_repack插件。
-
!!!重要提示:本帖是副帖,参与活动请前往主帖,在主帖进行回复,副帖回复不参与活动评奖。主帖入口请戳文末链接或二维码↓↓↓在国际局势动荡且数据量指数级暴增的今天,数据库作为IT行业最重要的基础软件,这颗被誉为软件行业的明珠更是愈发重要。本期实训营通过数据库及行业发展趋势、华为云数据库产品的介绍,让大家对数据库有个全局的认知,为国产数据库的崛起培养优秀的人才。HCSD实训营 第一期欢迎来到数据库的世界活动时间:2022/4/15-2022/5/15活动主题:HCSD实训营第一期——躬身入局,一览华为云数据库活动目的:了解华为云数据库,通过理论和实践相结合的方式,让0基础用户,实现技能提升。活动奖品:华为watchGT2e、筋膜枪、华为手环4、罗技键鼠套装、无线鼠标,和盲盒抽奖(U盘、文件收纳袋、笔记本套装、笔记本散热器、电风扇、数据线、冰箱贴等)参与入口:>>>>HCSD实训营 第一期 数据库【注意事项】1.获奖结果将在活动结束后7个工作日内进行公示,请报名和留言的伙伴关注社区内容,所有奖品将在活动结束后15个工作日内发放,有任何问题,请添加小助手微信18209232786。2.活动奖品颜色随机,且部分奖品数量有限发完将用等值奖品代替;另参与人数不能达到最低楼层,不开奖。3.活动参与需遵守《华为社区常规活动规则》;4.为保证活动的公平公正,华为云有权对恶意刷活动资源(“恶意”是指为获取资源而异常注册账号等**活动公平性的行为),利用资源从事违法违规行为的用户收回抽奖及奖励资格。5.本次活动一个实名认证账号只能对应一个获奖人,如同一账号填写多个不同获奖人,不予发放奖励;6.本活动最终解释权归华为云所有。
-
体验形式:本次体验采用有奖征集体验评测报告+群内交流的反馈的形式。我们将在体验官群内(点击链接申请成为体验官 )筛选体验官若干位,然后按照DevStar体验官体验报告(详见附件文档一)的要求操作和体验产品,最后输出体验报告,并按照华为云账号名+微信昵称+体验报告附件的格式回复至本帖。我们会从中筛选出高质量体验报告,给予礼品奖励和积分奖励。体验产品简介:不用开发代码,不需要关注代码仓创建,编译构建、测试、部署等流水线能力建设以及开发所需环境的搭建等等繁琐的开发准备工作,只需要体验通过DevStar服务的“智能OCR图像文字识别”模板一站式生成应用代码并部署到函数工作流FunctionGraph,实现识别指定图片中的文字信息并显示在页面上。产品体验指导链接:https://bbs.huaweicloud.com/blogs/338233?utm_source=dvecloud活动流程:1.如您已经成为产品体验官,小助手会在群内发布招募公告,直接报名即可。2.如您还未申请成为体验官,请点击链接先申请成为体验官,再参与活动哦~申请链接:https://developer.huaweicloud.com/activity/experience-officer.html 中奖率超高哟~~☆奖励设置如下☆参与奖:若干名活动要求:按照要求完成任务奖励:3体验官积分 优秀奖:若干名活动要求:被专家评为优秀报告奖品:定制无线鼠标1个+5体验官积分 本次体验评测报告交稿时间2021.4.15-2022.5.13
-
近期,各地疫情又一次席卷而来,居家隔离成为常态。不过,外出的不便并没有阻挡莘莘学子求知的渴望,线上课堂成为了大多学生上课的主要形式。在北京邮电大学中,邓芳老师、卢向群老师、杜军平老师、肖晨老师等多名老师所带的计算机学院和国际学院班级中的200多名学生就这样在线开启了本学期数据库课程的学习。 《数据库系统原理》是计算机科学与技术学科知识体系中信息管理领域的核心课程,也是计算机相关专业的核心专业课程。通过此课程的学习,学生可以深入了解数据库系统的基础理论和基本方法、数据库管理系统的核心技术、数据库应用系统设计开发过程、数据库系统操作能力和应用系统设计开发能力,具有对数据库技术领域复杂工程问题采用科学有效的方法进行研究的能力。本学期的《数据库系统原理课程设计》是理论课的后续课程。对学生来说,这更像是一篇毕业论文,因为从确定方向、系统设计、编码、调试、编译、发布,再调试、再学习......每个环节要不断试错、完善,才能完成。这是一场新的探索之旅,将满腹所学皆应用于实践。 校企联合共促数据库产业人才培养所学皆所用,是学习的价值所在。为了让学生们真正将理论应用到实践中,北京邮电大学与华为展开了深入的合作。北京邮电大学是华为与教育部联合建设产学育人“智能基座”项目中的其中一所高校,本着校企联合、产学育人的目的,华为为学校提供教学课件、教学平台等教学资源,并将企业在行业实际应用方面的经验积累、打磨的产品提供给高校,通过双方合作,培养更适用于数据库行业的应用型人才。应北京邮电大学邓芳老师和卢向群老师的邀请,3月16日,华为云数据库技术专家窦德明与北京邮电大学的众多学生相约线上,进行了一次数据库行业知识和技术的分享与交流,目的是让高校的学生们在学习数据库理论的同时,有机会了解数据库行业发展的趋势、动态、新技术探索以及商业环境中的实际应用,为未来有志于从事数据库工作的学生开阔视野,提供实用性的参考和指引。GaussDB走进课堂之数据库行业洞察数据库是“根技术”,一直被誉为基础软件皇冠上的明珠。就像50年代核弹氢弹是高精尖,而在信息时代,信息产业的高精尖主要在基础软硬件的核心控制上,数据库就是其中最重要的软件。从上世纪60年代至今,经历了前关系型数据库、关系型数据库、后关系型数据库三个阶段。二十一世纪一零年代以来,随着互联网与云计算的发展,国产数据库进入快速发展时期,越来越多的厂商在数据库领域进行布局,随之而来的是,数据库相关的各类组织陆续成立,数据库人才培养体系、生态体系也在快速完善。(图片来源:中国信通院发布《数据库发展研究报告(2021年)》)(图片来源:中国信通院发布《数据库发展研究报告(2021年)》)根据中国信通院研究报告数据,2020年全球数据库市场规模为671亿美元,其中中国数据库市场规模为35亿美元(约合241亿元人民币),占全球5.2%。预计到2025年,全球数据库市场规模将达到798亿美元,而中国数据库市场总规模将达到688亿元,市场年复合增长率将达到(CAGR)为23.4%。在数据库发展如火如荼的时代下,上云已经成为数字化时代的一个新标志。从行业角度来说,云是数字化和新基建的关键要素。据预测,到2025年,85%的应用都将运行在云上。软件云化的趋势已经不可逆转,基于云的软件开发也将是未来软件开发的主要形态。云计算也将是各位学子未来的主要职业通道。和IDC或ECS自建数据库相比,使用云数据库可以节省大量的人力和成本,减少繁重和重复的运维工作,客户可以将主要精力聚焦在自己的核心业务上。基于对产业趋势的理解和华为在IT软硬件全栈的长期技术积累,华为云数据库从人才、软硬协同和生态三方面进行战略布局。华为在数据库领域持续研发投入已经有10多个年头,布局全球7大研究所,拥有1000+数据库专业人才;同时,华为积极拥抱开源,并将GaussDB单机主备的核心代码开源,托管到openGauss开源社区,真正做到架构开放、代码开放、技术开放和社区开放;另外,积极推进产、学、研、用相结合,大力投入高校合作,通过校企联合课程培养未来数据库产业人才,与学术界紧密合作,共同开展数据库前沿技术创新及难题公关。GaussDB走进课堂之前沿技术探索在介绍完数据库行业趋势后,窦德明向学生们介绍了华为云数据库——GaussDB的关键特性和核心技术。GaussDB是基于openGauss开源生态打造的企业级分布式数据库,服务于金融政企客户。邓芳老师上学期的数据库课程随堂实验就是基于GaussDB进行,让学生可以专注于学习、实践,学习和了解分布式数据库架构与创新,提前体验商业环境中的数据库形态。在本学期,学生将继续使用GaussDB来进行数据库课程的课程设计。作为新一代金融级分布式数据库,GaussDB是华为全自研产品,应用了多项黑科技核心技术,拥有高性能、高可用、高扩展、高安全、AI-Native自治等诸多核心能力。GaussDB当前已经在1500+金融政企客户规模商用,成功支撑银行核心业务完成系统分布式改造,助力华为消费者云实现智慧化业务运营......越来越多的金融政企客户选择华为云GaussDB作为数字化转型的坚实数据底座。.GaussDB课堂问答两个小时的时间,窦德明为北邮的学生们带来了一场有声有色的数据库知识分享,同时还与学生积极互动,就学生关注的话题做了详细解答,这里我们节选了部分问答:“假定有一个Redis数据库采用AOF作为持久化策略,设定每秒同步一次,如果在同步之前服务器突然宕机,那这一秒的数据改如何恢复呢?”“内存中的数据如果已经写入日志,但日志未写入磁盘的话是恢复不了的。任何数据库都有这个问题,即使跨区域容灾的灾备同步,也无法完全保证这种情况下的数据不丢失。”“对于一些很重要的服务,如何提高数据的可靠性呢?”“这个问题需要从架构上解决,有很多方案。一种是基于存储级的高可靠,在存储与存储之间进行数据备份;一种是数据库级的高可靠,比如华为云分布式数据库支持多副本机制,把数据打散做分片,存储在各个数据节点上,当A节点出现故障后B节点有分片数据,只要存在一个可用数据副本,数据库的状态就是正常的。”“云原生数据库、分布式数据库和大数据技术的区别与联系是什么?”“这是三个不同的维度。云原生数据库主要是和传统数据库进行区分的,传统数据库是客户自己买服务器,自己建机房,硬件资源和数据库只给自己用,就是我们通常所说的“私有云”,云原生数据库是生于云、长于云,从一开始就是基于云的架构体系而孵化出来的数据库,可以理解为面向公有云和混合云场景。分布式数据库是和原来的单机主备数据库进行区分的,比如Oracle、MySQL、DB2这些都是单机主备数据库,数据库实例到达一定数据规模时无法水平扩展,分布式数据库是运用一些新技术,如大集群通信、计算存储分离、数据重分布等实现计算节点、存储节点的弹性扩缩容,解决数据库的扩展性问题。大数据的概念比较泛,通常大家说的大数据是指Hadoop这套体系,比如Spark、Flink等,但远不止这些,数据库、数据仓库、数据湖都是大数据领域的一部分,大数据是相对于传统数据量比较小、数据还没有爆发性增长时而言的,大数据更聚焦于把数据汇集到一起,进行海量数据的分析与挖掘。”“什么叫CN互为主备?如何保证SQL请求只被单个CN节点获取呢?”“CN互为主备就是材料中写的Active-Active,可以理解为断连重连,比如CN 1出现故障, jdbc会自动路由连接CN 2,所有新的SQL请求会通过CN 2下发执行,已经由CN 1下发的SQL将失败回滚。虽然应用连接配置的可能是多个CN,但一条SQL只能通过一个CN下发,只有这个CN故障后,这条SQL重新请求才会走到另外一个CN,以此保证SQL请求只被单个CN获取。”“老师,能不能直接在裸机上开发数据库内核,绕过操作系统呢?”“单纯的数据库内核编译可以绕过操作系统,但调试、部署这些是绕不过的,因为数据库底下就是操作系统,必须跑在操作系统上,还要解决不同操作系统的兼容性问题,所以是没办法绕过去的。”从学生的互动中可以感受到,北京邮电大学数据库课程的学生,不仅仅限于对数据库课堂内容的学习,还对数据库的可靠性、架构以及未来可能的创新点有进一步研究和探索。数据库是讲究生态的产业,生态需要耐心持续的投入。一直以来,华为云GaussDB积极参与和推进产业生态,与高校、开发者、合作伙伴共建生态,并已与国内80+所院校建立起合作关系。未来,华为云GaussDB也将继续携手北京邮电大学以及更多高校,积极推进校企联合,为学生们输送更多行业前沿动态和技术探索,持续完善华为云GaussDB数据库的人才培养体系,保障数据库产业未来人才供给。华为云数据库团队2023届实习岗位已经开放,向想要步入数据库行业的人才张开了怀抱。如果你对数据库充满热爱和好奇,快来和我们一起探索代码奥秘吧!HR专员:zhaochao1@huawei.com
-
开年好物推荐——云数据库RDS for MySQL,简单易用,广泛运用于游戏、电商等行业。18元/1年秒杀,热门规格包年1.5折起,助力用户轻松上云。→https://activity.huaweicloud.com/dbs_Promotion/index.html
-
相信很多用户在实际业务中都会碰到用户会话被中断这样的痛点,这时候其应用程序需要感知到会话变化,并提供复杂的应对措施来解决故障,比如判断数据库连接是否中断,进行事务补偿以及重建数据库会话上下文等。故障背后的原因其实主要是由主备模式的数据库系统在进行主备倒换、小版本升级和规格变更时造成的,但体现在用户层面上则会对业务造成一定的影响。 华为云RDS for MySQL云数据库新特性重磅发布遇到故障后再采取措施明显不利于业务的连续性,也是企业最不想遇到的情况。华为云RDS for MySQL云数据库最新特性——应用无损透明(ALT)重磅发布,专为解决该痛点而打造,能完好地就业务中断问题对症下药,在进行数据库系统切换与故障转移时,可以提供无损的应用连续性,保证企业业务不中断。该功能主要从三个方面来实现:避免连接和事务中断无需用户对事务进行补偿无需恢复和重建会话上下文 应用无损透明(ALT)的功能实现那么,应用无损透明(ALT)为什么能这么厉害?到底是怎么实现业务连续性的呢?我们不妨从它的技术架构上了解一下。应用无损透明(ALT)功能以用户连接为粒度,用户可以连接到数据库代理(Proxy),在进行主备切换、规格变更或者小版本升级时,系统会复制用户的后台会话,在达到安全的事务边界后,确保后端Session操作上下文被完整克隆至目的节点,从而完成主备切换,保证业务无影响。其中,安全的事务边界是指当前会话上的事务提交完成,开启下一个事务之前的状态,例如:开启autocommit的事务块每个语句执行完成时,单独DML、DDL语句,执行完成,都可以达到事务边界。会话克隆能够拷贝和转移会话状态,包括会话系统变量、用户自定义变量和其他上下文,例如`db_name`,`Prepared Statements`等。应用无损透明(ALT)已通过成功验证目前,该功能已经经过完备的测试。使用了该功能,用户可以通过Sysbench,Tpcc-MySQL或MySQL客户端等各种工具链接到读写分离地址,进行主备切换,从而保障用户的业务不会被突然中断。以下分别是使用Sysbench,Tpcc-MySQL和MySQL客户端工具进行主备切换的效果示意,可以看出,不管哪种工具,都可以保证业务的连续性。使用Sysbench进行主备切换的示例使用Tpcc-MySQL进行主备切换的示例非ALT模式下使用Tpcc-MySQL进行主备切换的示例使用MySQL命令行工具主备切换的示例如下图所示,用户自定义变量、会话变量,数据库在主备切换前后均保持一致。为保证主备切换的可靠性,在开通使用应用无损透明(ALT)的同时,可开通Proxy读写分离,通过读写分离地址连接实例,来保证主备切换的可靠性。业务的高安全和高可靠是每个企业的硬性需求。在应用无损透明(ALT)的加持下,华为云RDS for MySQL云数据库将以更优越的容灾能力满足企业多种可用性需求,实时为企业业务保驾护航!【重磅推荐】开年采购享好价!华为云数据库MySQL、GaussDB(for Redis)18元/年限量秒杀,不限新老用户包年3折起。活动期间还有8000元大礼包、满额赠华为笔记本、0门槛抽奖等多重福利!https://activity.huaweicloud.com/dbs_Promotion/index.html
-
开年采购季倒计时7天!MySQL18元秒杀不容错过,热门规格包年1.5折起,搭配ECS、企业级Redis一起下单,优惠更多。活动期间还有8000元大礼包、满额赠华为笔记本、0门槛抽奖等多重福利!点击查看活动详情→https://activity.huaweicloud.com/dbs_Promotion/index.html
-
说明:本文中的MySQL,如果不做特殊说明,指的是开源社区版MySQL。华为云数据库新版本在发布之前,会面临一系列严苛的测试规则,除了要求通过MySQL的所有测试用例之外,还需要通过由华为百万级更丰富、更贴近用户业务场景的测试用例构筑的测试防护网,以此充分验证新版本是否满足用户经典场景的稳定性。 正是在这样严苛的验证过程中,我们发现了MySQL的一个潜在Bug。 Bug描述测试环境: 基于相同的测试用例、数据集,分别测试MySQL 8.0.22, MySQL 8.0.26,与华为云GaussDB(for MySQL)的返回结果。 测试语句: select subq_0.c2 as c0 from (select ref_6.C_STATE asc0, case whenref_6.C_PHONE is not NULL then ref_5.C_ID else ref_5.C_ID end asc1, floor( ref_3.c_id)as c2 from sqltester.t0_hash_partition_p1_view as ref_0 right join sqltester.t4 as ref_1 on (EXISTS ( select ref_1.c_middle as c0 from sqltester.t1 as ref_2 where ((false) and ((true) or (true))) or (false) )) innerjoin sqltester.t0_range_key_subpartition_sub_view as ref_3 on(EXISTS ( select ref_0.c_credit as c0, ref_1.c_street_1 as c1, ref_4.c_credit_lim as c2, ref_3.c_credit as c3 from sqltester.t0_hash_partition_p1 as ref_4 where true )) left joinsqltester.t10 as ref_5 innerjoin sqltester.t11 as ref_6 on(true) on (((pi() isnot NULL)) and (false)) where (((ref_5.C_D_ID isnot NULL) or(ref_3.c_middle is not NULL)) )) as subq_0 where (EXISTS ( select subq_0.c0 as c0, pi() as c1, ref_11.c_street_1 as c2, ref_11.c_discount as c3, pi() as c4 from sqltester.t0_partition_sub_view_mixed_001 as ref_11)) group by 1 order by 1;返回结果: 如下图所示,MySQL 8.0.22、MySQL8.0.26与华为云GaussDB(for MySQL)的返回结果不一致,也就是说产生了Bug,如下图红色部分。 Bug分析首先确定哪一个执行结果是正确的。当前这个语句执行的execution plan是Hash Join,而MySQL8.0里面引入了Hash Join,由此推论开源版本可能存在问题。接下来我们从MySQL成熟版本以及非MySQL数据库两个方面来进行验证。 验证过程:使用相对成熟的版本MySQL 5.6进行验证,返回结果与GaussDB(for MySQL)相同,但与MySQL 8.0不同。使用PostgreSQL进行验证,执行结果与MySQL 5.6、GaussDB(for MySQL)相同,但与MySQL 8.0及更高版本不同。 由此可以确定:MySQL 8.0以及更高版本存在问题。 那么,是什么原因引起了这一Bug呢? 1. 首先精简查询,以方便后面分析。经过多次验证,将查询简化如下: SELECT count(*) FROM (SELECT 1 FROM sqltester.t4 AS ref_1 INNER JOIN sqltester.t4 AS ref_3 ON (EXISTS (SELECT 1 FROMsqltester.t4 AS ref_4 WHERE TRUE )) LEFT JOIN sqltester.t10 AS ref_5 ON (FALSE) WHERE (((ref_5.C_D_ID IS NOT NULL) OR (ref_3.c_middle IS NOT NULL))))AS subq_0 执行计划如下: -> Aggregate: count(0) (cost=2.75 rows=0) -> Filter: ((ref_5.C_D_ID is not null) or(ref_3.c_middle is null)) (cost=2.75 rows=0) -> Inner hash join(no condition) (cost=2.75 rows=0) -> Index scan on ref_3 using ndx_c_middle (cost=0.13 rows=50) -> Hash -> Inner hash join (no condition) (cost=1.50 rows=0) -> Index scan on ref_1 using ndx_c_id (cost=6.25 rows=50) -> Hash -> Left hash join (no condition) (cost=0.25 rows=0) -> Limit: 1 row(s) (cost=312.50 rows=1) ->Index scan on ref_4 using ndx_c_id (cost=312.50 rows=50) -> Hash -> Zero rows (Impossible filter) (cost=0.00..0.00 rows=0)从上面的执行计划可以看出,ref_5被优化器进行了优化,转换成了Zero rows,而且ref_5是Left Hash Join的内表。作为Left Join的内表,如果内表没有匹配条件的记录(这里已经是Impossible条件了,也就是说连接条件始终是False),则需要内表生成NULL行来和外表进行外表连接。 2. 在MySQL 8.0.22版本上执行问题查询,语句和执行结果如下: SELECT count(*) FROM (SELECT 1 FROM sqltester.t4 AS ref_1 INNER JOIN sqltester.t4 AS ref_3 ON (EXISTS (SELECT 1 FROM sqltester.t4 AS ref_4 WHERE TRUE )) LEFT JOIN sqltester.t10 AS ref_5 ON (FALSE) WHERE (((ref_5.C_D_ID IS NOT NULL) or(ref_3.c_middle IS NOT NULL))))AS subq_0; + + | count(*) | + + | 2500 | + + 1 row in set (0.00 sec)3. 对问题查询进行修改:去掉Where条件里面的另外一个条件(ref_3.c_middleis NULL)。 现在Where条件只包含了(ref_5.C_D_IDIS NOT NULL)一个条件,要求当前查询过滤掉所有ref_5没有匹配的连接记录。 则SQL语句和执行结果如下: SELECT count(*) FROM (SELECT 1 FROM sqltester.t4 AS ref_1 INNER JOIN sqltester.t4 AS ref_3 ON (EXISTS (SELECT 1 FROM sqltester.t4 AS ref_4 WHERE TRUE )) LEFT JOIN sqltester.t10 AS ref_5 ON (FALSE) WHERE (((ref_5.C_D_ID IS NOT NULL))))assubq_0; + + | count(*) | + + | 2500 | + + 1 row in set (0.01 sec)对比修改前后的语句和执行结果可以看出:执行结果与条件(ref_3.c_middle is NULL)没有关系,只与(ref_5.C_D_ID IS NOT NULL)这个条件有关。正常情况下对ref_5表来说,因为是Impossible条件,所以ref_5被优化成了Zero rows。那么如果只剩(ref_5.C_D_ID IS NOT NULL)这个条件,正常的结果应该是空集(count返回0)。但现在开源版本的结果集却不是,这再次说明了开源版本出现了问题。 对于Left Join来说,如果Join条件不匹配,内表需要设置为NULL行来连接外表。而这里执行计划使用的是Zero rows,也就是说MySQL 8.0使用的是ZeroRowsIterator来执行的。执行器需要调用ZeroRowsIterator::SetNullRowFlag来设置Nullflag。 4. 通过gdb来查看设置是否正确: Breakpoint 1, ZeroRowsIterator::SetNullRowFlag(this=0x7f92a413d510, is_null_row=false) at /mywork/mysql-sql/sql/basic_row_iterators.h:398 398 assert(m_child_iterator != nullptr); (gdb) n 399 m_child_iterator->SetNullRowFlag(is_null_row); (gdb) s std::unique_ptr<RowIterator,Destroy_only<RowIterator> >::operator-> (this=0x7f92a413d520) at/opt/simon/taurus/mysql-root/src/tools/gcc-9.3.0/include/c++/9.3.0/bits/unique_ptr.h:355 355 returnget(); (gdb) fin Run till exit from #0 std::unique_ptr<RowIterator,Destroy_only<RowIterator> >::operator-> ( this=0x7f92a413d520) at/opt/simon/taurus/mysql-root/src/tools/gcc-9.3.0/include/c++/9.3.0/bits/unique_ptr.h:355 ZeroRowsIterator::SetNullRowFlag (this=0x7f92a413d510,is_null_row=false) at/home/simon/mywork/mysql-sql/sql/basic_row_iterators.h:399 399 m_child_iterator->SetNullRowFlag(is_null_row); Value returned is $1 = (RowIterator *) 0x7f92a413d4d0 (gdb) s TableRowIterator::SetNullRowFlag (this=0x7f92a413d4d0,is_null_row=false) at/home/simon/mywork/mysql-sql/sql/records.cc:229 229 if(is_null_row) { (gdb) n 232 m_table->reset_null_row(); (gdb) 234 }从上面的gdb来看,断点处利用ZeroRowsIterator::SetNullRowFlag将表的Nullflag设置为了False。后面的gdb信息也证明了这一点。 可以确定,导致此Bug的原因是:ZeroRowsIterator::SetNullRowFlag设置为False这里是不正确的。因为如果把ZeroRowsIterator::SetNullRowFlag设置为False,那就会导致内表为ZeroRows的Left Join生成内表非NULL的结果集。 如何解决既然上面的Bug分析已经非常清楚了,那么修复起来也就比较简单了。只需要将ZeroRowsIterator::SetNullRowFlag始终设置为True就可以了。因为ZeroRowIterator只能产生两种结果,一种是空集,另一种就是作为外连接的内表产生NULL行。 对MySQL-8.0.26进行修复后,执行结果如下: 从返回的结果可以看出查询结果正确,也就是说问题得到了修复。 为了保障华为云GaussDB产品的可靠性,每一款产品发布前都要通过多轮严苛的测试用例。在发现问题后,华为云数据库团队以缜密的思路去逐步确定问题、分析问题,并第一时间修复Bug,解决问题,以确保客户的数据安全和业务结果的准确性。华为云数据库团队荟聚了业内50%以上的数据库内核专家,以专业技术实时保障客户业务安全,助力企业业务安全上云!
上滑加载中
推荐直播
-
GaussDB管理平台TPOPS,DBA高效运维的一站式解决方案
2024/12/24 周二 16:30-18:00
Leo 华为云数据库DTSE技术布道师
数据库的复杂运维,是否让你感到头疼不已?今天,华为云GaussDB管理平台将彻底来改观!本期直播,我们将深入探索GaussDB管理平台的TPOPS功能,带你感受一键式部署安装的便捷,和智能化运维管理的高效,让复杂的运维、管理变得简单,让简单变得可靠。
回顾中 -
DTT年度收官盛典:华为开发者空间大咖汇,共探云端开发创新
2025/01/08 周三 16:30-18:00
Yawei 华为云开发工具和效率首席专家 Edwin 华为开发者空间产品总监
数字化转型进程持续加速,驱动着技术革新发展,华为开发者空间如何巧妙整合鸿蒙、昇腾、鲲鹏等核心资源,打破平台间的壁垒,实现跨平台协同?在科技迅猛发展的今天,开发者们如何迅速把握机遇,实现高效、创新的技术突破?DTT 年度收官盛典,将与大家共同探索华为开发者空间的创新奥秘。
回顾中
热门标签