- 开发者
- 数据库处理
#数据库处理#
-
css导入公共样式不起作用@import '../../common/style.css';
-
近日,前瞻产业研究院发布《大国算力——2022年东数西算机遇展望》,对东数西算布局现状和产业链机遇进行深度解析。 报告指出,2022年是“东数西算”元年,既是数字经济的本身需求,也是碳中和、碳达峰的“3060”框架指引。 “东数西算”工程开启我国国土空间算力资源跨区域统筹布局的新篇章。“东数西算”通过算力枢纽和数据中心集群建设,将有力带动产业上下游投资。国家以10个国家级算力枢纽节点的建设打响第一枪,最终要实现“网络无所不达、算力无所不在、智能无所不及”的全国性算力网络。何谓“东数西算” “数”指数据。在数据时代,数据的使用按使用频率可分为冷数据、温数据、热数据。热数据指使用频率高,对时延要求高的数据,多用于需精密操作的行业如医疗、高频交易、工业制造等;冷数据指使用频率低的数据,多为离线存储、灾备数据;温数据同样使用频繁,但对于时延要求低,如人工智能的模型训练。 “算”是算力。近年来,全社会数据总量呈爆发式增长,我国数据增量年均增速超过30%,算力设施的建设也将持续高速增长,而东西部算力资源差距不断拉大。“东数西算”即将东部海量数据,通过全国一体化的算力网络输送到西部,解决对东西部对数据处理需求和供给的不平衡问题,绝大部分的温数据、冷数据储存及相应处理需求均可转移至西部。东数西算产业链机遇 “东数西算”工程带动的产业链条多,带动效益大。从产业链分类角度看,“东数西算”工程设计的产业链上游是数据中心和算网基础设施提供方,中游包括云计算、数据中心和通信网络运营方,下游为算力服务的使用方。 数据中心产业链充分受益“东数西算”工程 数据中心产业从上至下有望充分受益“东数西算”工程。数据中心是用于在网络上传递、加速、展示、计算和储存数据信息的物理场所,主要应用于对数据计算和储存有较大需求的组织。一个完整的数据中心由IT设备和基础设施共同构成。数据中心基础设施是支撑数据中心正常运行的各类系统的统称,具体包括制冷、配电、机柜、布线、监控等系统。 算力网络产业链为“东数西算”工程提供基础保障 “东数西算”涉及的产业链并不局限于数据中心业务。从算力网络的构成看可拆解为算王基础设施层、编排管理层、运营服务层三层。算力网络发展需要超大规模数据中心来保证算力供给,还需要高效计算优先网络来进行算力管理。 东数西算”工程驱动光通信产业链的发展 “东数西算”工程驱动光通信产业链的发展,有效改善时延问题,提高数据传输质量。数据互联互通有赖于光通信,而光通信网络是算力网络的基础。“东数西算”工程背景下,网络质量是实现算力均衡布局前提,光通信产业链增量最为明确,网络建设是当前西部地区首要任务,无论是将数据传输到西部地区进行计算,还是把数据传输到西部地区进行存储,前提都是建设数据中心之间的高速网络通道,将带动西部地区网络建设需求增加。光通信器件按照物理形态的不同,产业链可以分为光组件、光芯片、光器件(无源和有源)、光模块、光通信设备。光模块在“东数西算”工程中承担信号转换任务,可实现光信号的产生、信号调制、探测、光路转换、光电转换等功能。 行业:科技、绿色双主线,经济和生态共发展 “东数西算”具有经济和生态的双重意义,围绕“科技”、“绿色”两条主线,“科技”主线对应数据中心等产业链核心硬件设备国产化替代,“绿色”主线对应绿色降碳,液冷分布式供电、模块化机房、可再生能源等绿色先进的节能减碳技术。 行业:科技主线东数西算建设拉动服务器采购需求 服务器在数据中心硬件成本中占比70%左右,是数据中心IT设备的重要组成部分。服务器作为数字经济的算力基础设施,受益于我国数字经济的蓬勃发展,中国服务器出货量规模整体保持平稳增长。统计数据显示,中国服务器市场出货量为350万台,同比增长9.8%。东数西算规划10个国家数据中心集群,后续建设拉动服务器采购需求。 绿色主线:对应数据中心减碳需求 数据中心具有高耗能的属性,带来减碳需求。在数据中心的运营成本中,70%的成本来自于电力,因此碳排放强度也成为重点关注目标,通过“东数西算”能够将高耗电的数据中心放置在西部具有丰富风、光、水电资源的地区,从而实现减碳目标,也能够拉动新能源及配套设施的建设需求。 绿色主线:温控设备助力数据中心降低PUE 温控系统是数据中心产业链必不可少的环节,数据中心内放置大多为服务器、交换机等大型大功率企业级IT设备,设备在运转过程中会产生大量的热量,为了确保数据中心正常运转,需要保证数据中心处于恒温恒压之中。温控系统供应商可分为风冷系统与水冷系统。同时,降PUE将成为未来发展趋势,温控系统温控设备上游主要为核心零部件,包括压缩机、风机、水蒸发器等占数据中心能耗40%。因此,温控系统的能耗是PUE是否能降低到合理水平的关键因素之一。 IDC服务—电信运营商、第三方IDC厂商为主要参与者 IDC服务行业以三大运营商为主,中国IDC市场份额仍然以三大基础电信运营商为主。电信运营商布局较早,拥有网络和土地资源等行业优势,当前在我国数据中心市场占据主导地位。近年来以万国数据、奥飞数据等第三方服务运营商发展迅猛。 云计算——东数西算关键载体,迎来新一轮发展机遇 云计算作为算力输出的重要方式,是“东数西算”工程算力的关键载体,随着“东数西算”工程的开展,云计算行业将迎来新的发展机遇。从业务形态来看,云计算业务可分为laaS、PaaS和SaaS三类。国内云服务商以阿里/腾讯等互联网厂商、华为等服务器厂商为主。来源:前瞻产业研究院 ,如有涉及侵权, 请联系删除~
-
夏去秋来清风至,榜首前三起涟漪。 2022年9月的 墨天轮中国数据库流行度排行榜 火热出炉,相比上月新增两个数据库, 本月榜单前十名可以用一句话概括为:OceanBase新版发布先声夺人,达梦低调做事暂退第四。目录一、榜单前十高手过招二、赛道黑马此起彼伏三、墨天轮数据库大盘点四、总结一、榜单前十高手过招在本月排行榜上,前十名出现了显著的变化,OceanBase强势反超openGauss、达梦,排名跃升两位夺榜眼。榜单前十中,相继有两位在上月发布产品新版本,拥有了先声夺人的优势。接下来将具体分析榜单前十各国产明星数据库的最新进展。8月,TiDB喜事连连。其本月得分580.95分,较上月虽下降16.79分,但本月依旧保持榜首的优势。 PingCAP作为业内具有活力的公司,广受认可。8月12日,PingCAP 入选福布斯中国 “2022 中国创新力企业50 强”。过去两年,PingCAP 在 2021 全球数据库开源项目活跃度排名中,位列中国第一、全球第三,这些排名都证明了PingCAP的实力。好的名声也需要源源不竭的创新力作为支撑。8月23日,PingCAP 发布 TiDB v6.2 版本,也吸引了一波关注度。上月排名第四的OceanBase势如破竹,本月排名取得了里程碑式的突破。其本月得分536.72分,较上月大幅上扬10%,这也是时隔一年OceanBase重回第二名宝座的高光时刻。 这种阶段性的胜利与其最近的产品发布有关。8月10日, OceanBase 4.0重磅发布,这是业内首个单机分布式一体化数据库,RTO 从 30 秒迈入 8 秒,进入真正的秒级容灾时代,这款产品能紧跟市场趋势,迅速抢占市场。openGauss本月排名下降一位至第三,以1.02分的微弱劣势被反超。近期,观测云、图尔兹、易宝等一批新的伙伴公司纷纷入驻openGauss社区,社区伙伴的入驻一方面是对其社区的认可,另一方面也能更好地服务社区用户。借着开源东风,openGauss企业级开源数据库一举摘得中国电子信息博览会最高奖项金奖 (CITE 2022“金奖”)。无论是荣誉傍身,还是社区建设的如火如荼,都能表明openGauss将会有更好的发展。达梦本月得分535.22分,顺次下降至榜单第四。自达梦7月申请科创板上市以来,可谓是步履稳健,在市场上开辟了一番新天地。近日,赣州市某单位单一来源采购达梦数据库V7.0,市场范围进一步扩大,距离成功上市也是越来越近。GaussDB本月得分上涨27.55,但是排名却没有变化,仍旧稳居第五。 这表明榜单前三这一梯度竞争激烈,需要深厚的积累才可“攻略”。其作为云原生数据库,定位于企业级的KV缓存,在数据激增的环境中,依然能成为佼佼者。近日,华为云与中国信通院云计算与大数据研究所共同发布了业界首个《云原生数据库白皮书》,这是业内权威机构对GaussDB的赞赏和认可。PolarDB本月以441.38分稳居榜单第六,较上月分数上涨5.3%。 其作为云原生数据库,借助阿里云深厚的技术底蕴,广泛的市场,凭借优秀的产品力,一路过关斩将,为公司作出了杰出贡献。日前,市场研究机构IDC发布《2021年下半年中国关系型数据库软件市场跟踪报告》,阿里云市场份额(传统部署+公有云模式)位居第一,其中,在公有云市场上,阿里云已连续3年以绝对优势蝉联榜首。人大金仓作为传统数据库的“四朵金花”之一,继续高歌猛进。本月得分较上月上涨23.27分,排名依旧居第七。 近日,人大金仓基于KingbaseES数据库高可用解决方案荣获2020-2021年度长三角智慧城市建设“突出贡献奖”、人大金仓 Kingbase获得CITE 2022“创新奖”,两项殊荣,实力可嘉。创立于2004年的GBase,同样也是国产数据库的先行者。其本月得分下降21.47分,仍居第八。 南大通用专注数据库研发,是国内产品线较全的国产数据库厂商,包括分析型数据库GBase 8a、交易型数据库GBase 8s、目录数据库GBase 8d、金融级分布式交易型数据库GBase 8c,以及大数据平台GBase UP。近日,GBASE南大通用作为首批入选的国家级专精特新企业成功通过复核。TDSQL相较于榜单前十中的其他数据库,实际上是新兴力量,但是实力却不容小觑。其本月得分较上月上涨26.31分至277.26分,排名第九。 自2020年12月,腾讯云数据库顺利完成某银行核心系统的改造后,就在金融领域站稳了脚跟。8月8日,国际权威行业研究与咨询机构Forrester发布全球Translytical数据平台厂商选型报告,腾讯云数据库成功入选。这表明国产数据库在国际上的影响力进一步提高。AnalyticDB本月得分较上月微增4.83分,连续一年蝉联墨天轮排行榜第十名。 其是阿里云自主研发的一款实时分析数据库,可以毫秒级针对千亿级数据进行即时的多维分析透视。新的技术背景下,AnalyticDB也一直在打磨产品,在市场中迎接挑战。 二、赛道黑马此起彼伏 本月排行榜中也涌现了一批黑马,他们在8月表现不俗,分散在各个领域发光发热。 SequoiaDB是巨杉数据库旗下的一款金融级分布式关系型数据库,巨杉数据库自2011年成立以来,连续三年入榜 Gartner报告。此次排名是其时隔7个月后重归第11名。在面向客户对湖仓一体各个场景的不同需求,巨杉数据库细分出四大产品线,能够满足客户不同的需求。 近日,巨杉数据库荣获“2021年广州独角兽创新企业”奖,是其特有的产品竞争力得到行业的认可。稳坐墨天轮数据库排行榜时序数据库第一名的TDengine,他是涛思数据推出的一款开源的专为物联网、车联网、工业互联网、IT运维等设计和优化的大数据平台。其本月得分较上月增加10.12分,排名上升一位至第12名。8月,涛思数据迎来了里程碑式的事件,重磅发布了 TDengine 3.0,“开源产品+众多核心功能”也为热度进一步加持。GaussDB(DWS)是华为云推出的一种在线数据处理数据库,今年6月开始参与排名。从第233名一路跃升至第15名,这不仅是实力的证明,也与当今热点不谋而合。近日,招商银行正式完成向华为云GaussDB(DWS)的全部迁移,成功建立了国内首个大规模金融云数仓。迄今为止,已有10余家银行选用GaussDB(DWS),其在金融领域广拓疆土。始于2008年的AntDB是亚信科技旗下通用型企业级数据库产品。其本月排名上升两位,现排名第16。近日,AntDB数据库配备了AMD采用最新架构的第三代EPYC(霄龙)处理器,单路EPYC服务器运行AntDB单数据库实例达到原双路20核配置单实例性能的1.65倍,性能成倍增长。这更强算力、更省成本、更低能耗的产品,也是用户们正在寻找的产品。OushuDB是一款高性能云原生数据库,本月排名上升两位。8月的最后一天,偶数科技发布 OushuDB 5.0。OushuDB 5.0通过多种创新的技术,可以支持超高并发和超大规模集群,存算分离,解决了传统数据库由于复杂查询并发的限制,集群规模的限制或者支持的表数目的限制等等而导致的分库分表。大数据时代下,OushuDB也能顺势而为,奋勇向前。深圳计算科学研究院从理论到系统全自研的分析型数据库系统YashanDB,本月排名突飞猛进至第37名,上升了33个位次。这是一款2022年才正式面世的数据库产品,由于有多位院士的潜心专研,精心打磨,产品性能优越。在今年7月,其通过了信通院“可信数据库”集中式事务型测评,YashanDB正在不断破圈,影响力辐射整个行业。三、墨天轮数据库大盘点墨天轮中国数据库流行度排行榜本月在页面上新增筛选栏,将数据库按照模型划分为关系型、键值、列簇、图形、空间、向量、时序以及搜索等八类,进行筛选展示。“报告统计”一栏,将各模型总数、得分趋势进行统计。“分类统计”中主要是针对现有数据库的属性进行数量统计。此页面的改进是为了方便大家可以从不同的维度了解各个数据库的流行度趋势。(一)中国数据库各模型数本月排行榜共有238个数据库参与排名,相比上月新增两个。参与排名的数据库中,关系型数据库共有152个,占比63.8%,其次则是时序数据库占比13.4%。各模型具体数量如下图所示:(二)中国数据库OLTP/OLAP/HTAP数量在152个关系型数据库中,OLTP数据库108个,占比71%。HTAP和OLAP分别有25和23个,当前业内仍然以在线事物处理OLTP关系型数据库为主,未来混合负载数据库HTAP会成为复杂应用的首选,能够同时支持在线事务处理和复杂数据分析。(三)中国数据库集中式/分布式数量汇总目前分布式和集中式数据库数量相当,分布式数据库仅比集中式数据库多出1个。分布式架构一般采用横向扩展的方式,即通过增加服务器的数量来提升系统的处理能力,每个节点都是一个可独立运行的单元,失效时也不会影响应用整体的可用性,更能满足当今时代和用户的需求。(四)中国数据库本地部署/云原生数量墨天轮排行榜上的数据库以本地部署的数据库居多,有199个。近年来,随着云原生成为数据库发展的主流技术趋势,用户可以在云上搭建自己的数据库,云原生数据库也不断涌现。(五)中国数据库开源/商业数量排行榜上商业数据库的数量是开源数据库的五倍左右,商业数据库占比81.9%。在排行榜前十中,开源与商业各占一半,这说明开源为数据库能带来极大的热度,相信未来也会有更多开源的中国数据库出现。四、总结千淘万漉虽辛苦,吹尽黄沙始到金。众多国产数据库济济一堂,各自彰显其能,不断在“深水区”打磨产品。市场需求的迭代,厂商们积累的日益深厚的产品力,产品升级更新,不断从用户到产品、产品到用户、周而复始的过程,最终用惊艳的产品回馈用户。国产数据库的存在不仅是红利下诞生的产物,更是民族的希望、国家的未来。
-
目录 一、什么是SQL?1、SQL的概念2、SQL的特点3、SQL发展简史二、openGauss数据库的“SQL”1、数据类型(常用)数值类型货币类型布尔类型字符类型日期/时间类型2、openGauss数据库SQL基本语法创建用户(CREATE USER)创建和管理数据库创建表(CREATE TABLE)向表中插入数据更新表中数据查看数据删除表中数据三、参考资料--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------一、什么是SQL?1、SQL的概念结构化查询语言(SQL)是用于访问和处理关系型数据库的标准计算机语言。SQL提供了各种任务的语句,包括:查询数据。在表中插入,更新和删除行。创建,替换,更改和删除对象。控制对数据库及其对象的访问。保证数据库的一致性和完整性。SQL语言由用于处理数据库和数据库对象的命令和函数组成:DDL(data definition language)数据定义语言,用户定义和管理sql数据库中所有对象的语言。 主要命令:create、alter、drop等DML(data manipulation language)数据操作语言。 主要命令:select、update、insert、delete等DCL(date control language)数据库控制功能。主要命令:grant、deny、revoke、commit、savepoint、rollback等2、SQL的特点SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体面向集合的语言非过程语言类似自然语言,简洁易用自含式语言,又是嵌入式语言。可独立使用,也可嵌入到宿主语言中。3、SQL发展简史SQL发展简史如下:1986年,ANSI X3.135-1986,ISO/IEC 9075:1986,SQL-861989年,ANSI X3.135-1989,ISO/IEC 9075:1989,SQL-891992年,ANSI X3.135-1992,ISO/IEC 9075:1992,SQL-92(SQL2)1999年,ISO/IEC 9075:1999,SQL:1999(SQL3)2003年,ISO/IEC 9075:2003,SQL:2003(SQL4)2011年,ISO/IEC 9075:200N,SQL:2011(SQL5)//注:ANSI是美国国家标准学会(American National Standards Institute)的英文简称,成立于1918年。ISO:国际标准化组织(International Organization for Standardization)。IEC:国际电工委员会(International Electrotechnical Commission)。//二、openGauss数据库的“SQL”openGauss数据库支持的SQL标准,默认支持SQL2、SQL3和SQL4的主要特性。当然了, 一般说到数据库的SQL语句,就离不开两个方面: 一是数据类型,二是sql语句基本语法。下文就此简单阐述一下:1、数据类型(常用)openGauss数据库支持的数据类型涵盖非常广, 几乎包含所有形式的数据类型,如:数值类型、货币类型、布尔类型、字符类型、二进制类型、日期/时间类型、几何类型、网络地址类型、位串类型、文本搜索类型、UUID类型、JSON/JSONB类型、HLL数据类型、范围类型、对象标识符类型、伪类型、列存表支持的数据类型、XML类型、账本数据库使用的数据类型等。 但是实际业务场景中大部分类型用到的比较少,具体遇到时可参考官方文档说明。下文参考并整理了日常应用开发中常用的主要数据类型,主要包含:数值类型、货币类型、布尔类型、字符类型、日期/时间类型等。数值类型表1:整数数据类型名称描述存储空间范围TINYINT微整数,别名为INT1。1字节0 ~ 255SMALLINT小范围整数,别名为INT2。2字节-32,768 ~ +32,767INTEGER常用的整数,别名为INT4 / BINARY_INTEGER。4字节-2,147,483,648 ~ +2,147,483,647BIGINT大范围的整数,别名为INT8。8字节-9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807int16十六字节的大范围证书,目前不支持用户用于建表等使用。16字节-170,141,183,460,469,231,731,687,303,715,884,105,728 ~+170,141,183,460,469,231,731,687,303,715,884,105,727说明:TINYINT、SMALLINT、INTEGER、BIGINT和INT16类型存储各种范围的数字,也就是整数。试图存储超出范围以外的数值将会导致错误。常用的类型是INTEGER,因为它提供了在范围、存储空间、性能之间的最佳平衡。一般只有取值范围确定不超过SMALLINT的情况下,才会使用SMALLINT类型。而只有在INTEGER的范围不够的时候才使用BIGINT,因为前者相对快得多。表2:任意精度型名称描述存储空间范围NUMERIC[(p[,s])],DECIMAL[(p[,s])]精度p取值范围为[1,1000],标度s取值范围为[0,p]。说明:p为总位数,s为小数位数。用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。NUMBER[(p[,s])]NUMERIC类型的别名。用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。说明:与整数类型相比,任意精度类型需要更大的存储空间,其存储效率、运算效率以及压缩比效果都要差一些。在进行数值类型定义时,优先选择整数类型。当且仅当数值超出整数可表示最大范围时,再选用任意精度类型。使用Numeric/Decimal进行列定义时,建议指定该列的精度p以及标度s。表3:序列整型名称描述存储空间范围SMALLSERIAL二字节序列整型。2字节-32,768 ~ +32,767SERIAL四字节序列整型。4字节-2,147,483,648 ~ +2,147,483,647BIGSERIAL八字节序列整型。8字节-9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807LARGESERIAL默认插入十六字节序列整形,实际数值类型和numeric相同。变长类型,每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。小数点前最大131,072位,小数点后最大16,383位。说明:SMALLSERIAL、SERIAL、BIGSERIAL和LARGESERIAL类型不是真正的类型,只是为在表中设置唯一标识做的概念上的便利。因此,创建一个整数字段,并且把它的缺省数值安排为从一个序列发生器读取。应用了一个NOT NULL约束以确保NULL不会被插入。在大多数情况下用户可能还希望附加一个UNIQUE或PRIMARY KEY约束避免意外地插入重复的数值,但这个不是自动的。最后,将序列发生器从属于那个字段,这样当该字段或表被删除的时候也一并删除它。目前只支持在创建表时候指定SERIAL列,不可以在已有的表中,增加SERIAL列。另外临时表也不支持创建SERIAL列。因为SERIAL不是真正的类型,也不可以将表中存在的列类型转化为SERIAL。表4:浮点类型名称描述存储空间范围REAL,FLOAT4单精度浮点数,不精准。4字节-3.402E+38~3.402E+38,6位十进制数字精度。DOUBLE PRECISION,FLOAT8双精度浮点数,不精准。8字节-1.79E+308~1.79E+308,15位十进制数字精度。FLOAT[(p)]浮点数,不精准。精度p取值范围为[1,53]。说明:p为精度,表示总位数。4字节或8字节根据精度p不同选择REAL或DOUBLE PRECISION作为内部表示。如不指定精度,内部用DOUBLE PRECISION表示。BINARY_DOUBLE是DOUBLE PRECISION的别名。8字节-1.79E+308~1.79E+308,15位十进制数字精度。DEC[(p[,s])]精度p取值范围为[1,1000],标度s取值范围为[0,p]。说明:p为总位数,s为小数位位数。用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。未指定精度的情况下,小数点前最大131,072位,小数点后最大16,383位。INTEGER[(p[,s])]精度p取值范围为[1,1000],标度s取值范围为[0,p]。用户声明精度。每四位(十进制位)占用两个字节,然后在整个数据上加上八个字节的额外开销。-货币类型货币类型存储带有固定小数精度的货币金额名称存储容量描述范围money8 字节货币金额-92233720368547758.08 到 +92233720368547758.07布尔类型名称描述存储空间取值BOOLEAN布尔类型1字节。true:真false:假null:未知(unknown)说明:“真”值的有效文本值是:TRUE、't'、'true'、'y'、'yes'、'1' 、'TRUE'、true、整数范围内1~2^63-1、整数范围内-1~-2^63。“假”值的有效文本值是:FALSE、'f'、'false'、'n'、'no'、'0'、0、'FALSE'、false。使用TRUE和FALSE是比较规范的用法(也是SQL兼容的用法)。字符类型名称描述存储空间CHAR(n)CHARACTER(n)NCHAR(n)定长字符串,不足补空格。n是指字节长度,如不带精度n,默认精度为1。最大为10MB。VARCHAR(n)CHARACTER VARYING(n)变长字符串。PG兼容模式下,n是字符长度。其他兼容模式下,n是指字节长度。最大为10MB。VARCHAR2(n)变长字符串。是VARCHAR(n)类型的别名。n是指字节长度。最大为10MB。NVARCHAR2(n)变长字符串。n是指字符长度。最大为10MB。NVARCHAR(n)变长字符串。是NVARCHAR2(n)类型的别名。n是指字符长度。最大为10MB。TEXT变长字符串。最大为1GB-1,但还需要考虑到列描述头信息的大小, 以及列所在元组的大小限制(也小于1GB-1),因此TEXT类型最大大小可能小于1GB-1。CLOB文本大对象。是TEXT类型的别名。最大为1GB-1,但还需要考虑到列描述头信息的大小, 以及列所在元组的大小限制(也小于1GB-1),因此CLOB类型最大大小可能小于1GB-1。日期/时间类型名称描述存储空间DATE日期和时间。4字节(兼容模式A下存储空间大小为8字节)TIME [(p)] [WITHOUT TIME ZONE]只用于一日内时间。p表示小数点后的精度,取值范围为0~6。8字节TIME [(p)] [WITH TIME ZONE]只用于一日内时间,带时区。p表示小数点后的精度,取值范围为0~6。12字节TIMESTAMP[(p)] [WITHOUT TIME ZONE]日期和时间。p表示小数点后的精度,取值范围为0~6。8字节TIMESTAMP[(p)][WITH TIME ZONE]日期和时间,带时区。TIMESTAMP的别名为TIMESTAMPTZ。p表示小数点后的精度,取值范围为0~6。8字节SMALLDATETIME日期和时间,不带时区。精确到分钟,秒位大于等于30秒进一位。8字节INTERVAL DAY (l) TO SECOND (p)时间间隔,X天X小时X分X秒。l:天数的精度,取值范围为0~6。兼容性考虑,目前未实现具体功能。p:秒数的精度,取值范围为0~6。小数末尾的零不显示。16字节INTERVAL [FIELDS] [ (p) ]时间间隔。fields:可以是YEAR、MONTH、DAY、HOUR、MINUTE、SECOND、DAY TO HOUR、DAY TO MINUTE、DAY TO SECOND、HOUR TO MINUTE、HOUR TO SECOND、MINUTE TO SECOND。p:秒数的精度,取值范围为0~6,且fields为SECOND、DAY TO SECOND、HOUR TO SECOND或MINUTE TO SECOND时,参数p才有效。小数末尾的零不显示。12字节reltime相对时间间隔。格式为:X years X mons X days XX:XX:XX。采用儒略历计时,规定一年为365.25天,一个月为30天,计算输入值对应的相对时间间隔,输出采用POSTGRES格式。4字节abstime日期和时间。格式为:YYYY-MM-DD hh:mm:ss+timezone取值范围为1901-12-13 20:45:53 GMT~2038-01-18 23:59:59 GMT,精度为秒。4字节2、openGauss数据库SQL基本语法SQL 语法主要分为三个类型DDL、DML、DCL,对应13个动词:DDL(data definition language)数据定义语言,用户定义和管理sql数据库中所有对象的语言。 主要命令:create、alter、drop等DML(data manipulation language)数据操作语言。 主要命令:select、update、insert、delete等DCL(date control language)数据库控制功能。主要命令:grant、deny、revoke、commit、savepoint、rollback等常见语法示例,主要包括: 创建用户、创建和管理数据库、创建表、插入数据、更新数据、查看数据、删除数据等创建用户(CREATE USER)--创建用户jim,登录密码为xxxxxxxxx。openGauss=# CREATE USER jim PASSWORD 'xxxxxxxxx';说明:必须至少8个字符,且至少包含3种字符(要符合常规密码安全度设置要求)。--下面语句与上面的等价。openGauss=# CREATE USER kim IDENTIFIED BY 'xxxxxxxxx';--如果创建有“创建数据库”权限的用户,则需要加CREATEDB关键字。openGauss=# CREATE USER dim CREATEDB PASSWORD 'xxxxxxxxx';--将用户jim的登录密码由xxxxxxxxx修改为Abcd@123。openGauss=# ALTER USER jim IDENTIFIED BY 'Abcd@123' REPLACE 'xxxxxxxxx';说明:新密码不能使用之前用过的密码。--为用户jim追加CREATEROLE权限。openGauss=# ALTER USER jim CREATEROLE;--将enable_seqscan的值设置为on, 设置成功后,在下一会话中生效。openGauss=# ALTER USER jim SET enable_seqscan TO on;--重置jim的enable_seqscan参数。openGauss=# ALTER USER jim RESET enable_seqscan;--锁定jim帐户。openGauss=# ALTER USER jim ACCOUNT LOCK;--删除用户。openGauss=# DROP USER kim CASCADE;openGauss=# DROP USER jim CASCADE;openGauss=# DROP USER dim CASCADE;说明:CASCADE,删除用户关联的所有对象。创建和管理数据库--使用如下命令创建一个新的数据库db_tpcc。openGauss=# CREATE DATABASE db_tpcc;--查看数据库使用\l元命令查看数据库系统的数据库列表。openGauss=# \l使用如下命令通过系统表pg_database查询数据库列表。openGauss=# SELECT datname FROM pg_database;注:数据库名称遵循SQL标识符的一般规则。当前角色自动成为此新数据库的所有者。如果一个数据库系统用于承载相互独立的用户和项目,建议把它们放在不同的数据库里。如果项目或者用户是相互关联的,并且可以相互使用对方的资源,则应该把它们放在同一个数据库里,但可以规划在不同的模式中。模式只是一个纯粹的逻辑结构,某个模式的访问权限由权限系统模块控制。创建数据库时,若数据库名称长度超过63字节,server端会对数据库名称进行截断,保留前63个字节,因此建议数据库名称长度不要超过63个字节。--修改数据库用户可以使用如下命令修改数据库属性(比如:owner、名称和默认的配置属性)。使用以下命令为数据库设置默认的模式搜索路径。openGauss=# ALTER DATABASE db_tpcc SET search_path TO pa_catalog,public;--使用如下命令为数据库重新命名。openGauss=# ALTER DATABASE db_tpcc RENAME TO human_tpcds;--删除数据库用户可以使用DROP DATABASE命令删除数据库。这个命令删除了数据库中的系统目录,并且删除了磁盘上带有数据的数据库目录。用户必须是数据库的owner或者系统管理员才能删除数据库。当有人连接数据库时,删除操作会失败。删除数据库时请先连接到其他的数据库。使用如下命令删除数据库:openGauss=# DROP DATABASE db_tpcc;创建表(CREATE TABLE)--表是建立在数据库中的,在不同的数据库中可以存放相同的表。甚至可以通过使用模式在同一个数据库中创建相同名称的表。创建表前请先规划存储模型。openGauss=# CREATE TABLE customer_t1(c_customer_sk integer,c_customer_id char(5),c_first_name char(6),c_last_name char(8));当结果显示为如下信息,则表示创建成功。CREATE TABLE其中c_customer_sk 、c_customer_id、c_first_name和c_last_name是表的字段名,integer、char(5)、char(6)和char(8)分别是这四字段名称的类型。向表中插入数据--向表中插入数据前,意味着表已创建成功。向表customer_t1中插入一行:数据值是按照这些字段在表中出现的顺序列出的,并且用逗号分隔。通常数据值是文本(常量),但也允许使用标量表达式。openGauss=# INSERT INTO customer_t1(c_customer_sk, c_customer_id, c_first_name) VALUES (3769, 'hello', 'Grace');如果用户已经知道表中字段的顺序,也可无需列出表中的字段。例如以下命令与上面的命令效果相同。openGauss=# INSERT INTO customer_t1 VALUES (3769, 'hello', 'Grace');如果用户不知道所有字段的数值,可以忽略其中的一些。没有数值的字段将被填充为字段的缺省值。例如:openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_first_name) VALUES (3769, 'Grace');openGauss=# INSERT INTO customer_t1 VALUES (3769, 'hello');用户也可以对独立的字段或者整个行明确缺省值:openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES (3769, 'hello', DEFAULT);openGauss=# INSERT INTO customer_t1 DEFAULT VALUES;如果需要在表中插入多行,请使用以下命令:openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES(6885, 'maps', 'Joes'),(4321, 'tpcds', 'Lily'),(9527, 'world', 'James');如果需要向表中插入多条数据,除此命令外,也可以多次执行插入一行数据命令实现。但是建议使用此命令可以提升效率。如果从指定表插入数据到当前表,例如在数据库中创建了一个表customer_t1的备份表customer_t2,现在需要将表customer_t1中的数据插入到表customer_t2中,则可以执行如下命令。openGauss=# CREATE TABLE customer_t2(c_customer_sk integer,c_customer_id char(5),c_first_name char(6),c_last_name char(8));openGauss=# INSERT INTO customer_t2 SELECT * FROM customer_t1;从指定表插入数据到当前表时,若指定表与当前表对应的字段数据类型之间不存在隐式转换,则这两种数据类型必须相同。删除备份表openGauss=# DROP TABLE customer_t2 CASCADE;在删除表的时候,若当前需删除的表与其他表有依赖关系,需先删除关联的表,然后再删除当前表。更新表中数据修改已经存储在数据库中数据的行为叫做更新。用户可以更新单独一行,所有行或者指定的部分行。还可以独立更新每个字段,而其他字段则不受影响。使用UPDATE命令更新现有行,需要提供以下三种信息:表的名称和要更新的字段名字段的新值要更新哪些行SQL通常不会为数据行提供唯一标识,因此无法直接声明需要更新哪一行。但是可以通过声明一个被更新的行必须满足的条件。只有在表里存在主键的时候,才可以通过主键指定一个独立的行。建立表和插入数据的步骤请参考创建表和向表中插入数据。需要将表customer_t1中c_customer_sk为9527的地域重新定义为9876:openGauss=# UPDATE customer_t1 SET c_customer_sk = 9876 WHERE c_customer_sk = 9527;这里的表名称也可以使用模式名修饰,否则会从默认的模式路径找到这个表。SET后面紧跟字段和新的字段值。新的字段值不仅可以是常量,也可以是变量表达式。比如,把所有c_customer_sk的值增加100:openGauss=# UPDATE customer_t1 SET c_customer_sk = c_customer_sk + 100;在这里省略了WHERE子句,表示表中的所有行都要被更新。如果出现了WHERE子句,那么只有匹配其条件的行才会被更新。在SET子句中的等号是一个赋值,而在WHERE子句中的等号是比较。WHERE条件不一定是相等测试,许多其他的操作符也可以使用。用户可以在一个UPDATE命令中更新更多的字段,方法是在SET子句中列出更多赋值,比如:openGauss=# UPDATE customer_t1 SET c_customer_id = 'Admin', c_first_name = 'Local' WHERE c_customer_sk = 4421;批量更新或删除数据后,会在数据文件中产生大量的删除标记,查询过程中标记删除的数据也是需要扫描的。故多次批量更新/删除后,标记删除的数据量过大会严重影响查询的性能。建议在批量更新/删除业务会反复执行的场景下,定期执行VACUUM FULL以保持查询性能。查看数据使用系统表pg_tables查询数据库所有表的信息。openGauss=# SELECT * FROM pg_tables;使用gsql的\d+命令查询表的属性。openGauss=# \d+ customer_t1;执行如下命令查询表customer_t1的数据量。openGauss=# SELECT count(*) FROM customer_t1;执行如下命令查询表customer_t1的所有数据。openGauss=# SELECT * FROM customer_t1;说明:插数据时,没有数值的字段将被填充为字段的缺省值。执行如下命令只查询字段c_customer_sk的数据。openGauss=# SELECT c_customer_sk FROM customer_t1;执行如下命令过滤字段c_customer_sk的重复数据。openGauss=# SELECT DISTINCT( c_customer_sk ) FROM customer_t1;执行如下命令查询字段c_customer_sk为3869的所有数据。openGauss=# SELECT * FROM customer_t1 WHERE c_customer_sk = 3869;执行如下命令按照字段c_customer_sk进行排序。openGauss=# SELECT * FROM customer_t1 ORDER BY c_customer_sk;删除表中数据在使用表的过程中,可能会需要删除已过期的数据,删除数据必须从表中整行的删除。SQL不能直接访问独立的行,只能通过声明被删除行匹配的条件进行。如果表中有一个主键,用户可以指定准确的行。用户可以删除匹配条件的一组行或者一次删除表中的所有行。使用DELETE命令删除行,如果删除表customer_t1中所有c_customer_sk为3869的记录:openGauss=# DELETE FROM customer_t1 WHERE c_customer_sk = 3869;如果执行如下命令之一,会删除表中所有的行。openGauss=# DELETE FROM customer_t1;或openGauss=# TRUNCATE TABLE customer_t1;全表删除的场景下,建议使用truncate,不建议使用delete。删除创建的表:openGauss=# DROP TABLE customer_t1;三、参考资料:1.openGauss官方文档3.0.0 开发指南:cid:link_02.SQL实践操作经验作者:酷哥;转载:Gauss松鼠会
-
随着《数据安全法》《个人信息保护法》《网络数据安全管理条例》等法律法规相继出台,数据安全保障工作的进度和力度也随之加快和提升。数据库作为数据处理与分析的核心引擎,成为数据安全的主要切入口。作为主流数据库产品之一的关系型数据库,广泛应用在金融、政务、电信、物流、互联网等领域,然而目前却存在安全能力参差不齐的状况。为进一步提升关系型数据库的安全能力,帮助解决大数据时代的数据安全问题,由中国信通院牵头,依托中国通信标准化协会大数据技术标准推进委员会(CCSA TC601),召集中国农业银行、中国建设银行、联通软研院、中移苏研、新炬网络、华为、偶数科技、云和恩墨、南大通用、中兴通讯、达梦、融信数联、信大捷安、人大金仓、阿里云、百度云、神舟通用、蚂蚁科技、巨杉、腾讯云、深圳计算科学研究院、甲骨文、创邻科技等二十余家企业专家参与编制,充分参考国内外产品能力与知识体系,共同完成了《大数据 关系型数据库安全能力技术要求》。《大数据 关系型数据库安全能力技术要求》依托学术界与产业界的深度融合,经过二十余家参与单位,近半年10次会议讨论形成的标准。本标准包含用户标识与身份鉴别、访问控制、数据存储安全、数据通信安全和安全审计五大能力域,共计29个测试项。为各行业组织评估关系型数据库产品的安全能力提供参考。关系型数据库安全能力标准框架:来源:中国信通院
-
今天就跟大家一起聊聊,数据库建表的15个小技巧,希望对你会有所帮助。前言对于后端开发同学来说,访问数据库,是代码中必不可少的一个环节。系统中收集到用户的核心数据,为了安全性,我们一般会存储到数据库,比如:mysql,oracle等。后端开发的日常工作,需要不断的建库和建表,来满足业务需求。通常情况下,建库的频率比建表要低很多,所以,我们这篇文章主要讨论建表相关的内容。如果我们在建表的时候不注意细节,等后面系统上线之后,表的维护成本变得非常高,而且很容易踩坑。今天就跟大家一起聊聊,数据库建表的15个小技巧,希望对你会有所帮助。一、名字建表的时候,给表、字段和索引起个好名字,真的太重要了。1、见名知意名字就像表、字段和索引的一张脸,可以给人留下第一印象。好的名字,言简意赅,见名知意,让人心情愉悦,能够提高沟通和维护成本。坏的名字,模拟两可,不知所云。而且显得杂乱无章,看得让人抓狂。反例:复制用户名称字段定义成:yong_hu_ming、用户_name、name、user_name_1234567891.你看了可能会一脸懵逼,这是什么骚操作?正例:复制用户名称字段定义成:user_name1.温馨提醒一下,名字也不宜过长,尽量控制在30个字符以内。2、大小写名字尽量都用小写字母,因为从视觉上,小写字母更容易让人读懂。反例:复制字段名:PRODUCT_NAME、PRODUCT_name1.全部大写,看起来有点不太直观。而一部分大写,一部分小写,让人看着更不爽。正例:复制字段名:product_name1.名字还是使用全小写字母,看着更舒服。3、分隔符很多时候,名字为了让人好理解,有可能会包含多个单词。那么,多个单词间的分隔符该用什么呢?反例:复制字段名:productname、productName、product name、product@name1.单词间没有分隔,或者单词间用驼峰标识,或者单词间用空格分隔,或者单词间用@分隔,这几种方式都不太建议。正例:复制字段名:product_name1.强烈建议大家在单词间用_分隔。4、表名对于表名,在言简意赅,见名知意的基础之上,建议带上业务前缀。如果是订单相关的业务表,可以在表名前面加个前缀:order_。例如:order_pay、order_pay_detail等。如果是商品相关的业务表,可以在表名前面加个前缀:product_。例如:product_spu,product_sku等。这样做的好处是为了方便归类,把相同业务的表,可以非常快速的聚集到一起。另外,还有有个好处是,如果哪天有非订单的业务,比如:金融业务,也需要建一个名字叫做pay的表,可以取名:finance_pay,就能非常轻松的区分。这样就不会出现同名表的情况。5、字段名称字段名称是开发人员发挥空间最大,但也最容易发生混乱的地方。比如有些表,使用flag表示状态,另外的表用status表示状态。可以统一一下,使用status表示状态。如果一个表使用了另一个表的主键,可以在另一张表的名后面,加_id或_sys_no,例如:在product_sku表中有个字段,是product_spu表的主键,这时候可以取名:product_spu_id或product_spu_sys_no。还有创建时间,可以统一成:create_time,修改时间统一成:update_time。删除状态固定为:delete_status。其实还有很多公共字段,在不同的表之间,可以使用全局统一的命名规则,定义成相同的名称,以便于大家好理解。6、索引名在数据库中,索引有很多种,包括:主键、普通索引、唯一索引、联合索引等。每张表的主键只有一个,一般使用:id或者sys_no命名。普通索引和联合索引,其实是一类。在建立该类索引时,可以加ix_前缀,比如:ix_product_status。唯一索引,可以加ux_前缀,比如:ux_product_code。二、字段类型在设计表时,我们在选择字段类型时,可发挥空间很大。时间格式的数据有:date、datetime和timestamp等等可以选择。字符类型的数据有:varchar、char、text等可以选择。数字类型的数据有:int、bigint、smallint、tinyint等可以选择。说实话,选择很多,有时候是一件好事,也可能是一件坏事。如何选择一个合适的字段类型,变成了我们不得不面对的问题。如果字段类型选大了,比如:原本只有1-10之间的10个数字,结果选了bigint,它占8个字节。其实,1-10之间的10个数字,每个数字1个字节就能保存,选择tinyint更为合适。这样会白白浪费7个字节的空间。如果字段类型择小了,比如:一个18位的id字段,选择了int类型,最终数据会保存失败。所以选择一个合适的字段类型,还是非常重要的一件事情。以下原则可以参考一下:尽可能选择占用存储空间小的字段类型,在满足正常业务需求的情况下,从小到大,往上选。如果字符串长度固定,或者差别不大,可以选择char类型。如果字符串长度差别较大,可以选择varchar类型。是否字段,可以选择bit类型。枚举字段,可以选择tinyint类型。主键字段,可以选择bigint类型。金额字段,可以选择decimal类型。时间字段,可以选择timestamp或datetime类型。三、字段长度前面我们已经定义好了字段名称,选择了合适的字段类型,接下来,需要重点关注的是字段长度了。比如:varchar(20),biginit(20)等。那么问题来了,varchar代表的是字节长度,还是字符长度呢?答:在mysql中除了varchar和char是代表字符长度之外,其余的类型都是代表字节长度。biginit(n) 这个n表示什么意思呢?假如我们定义的字段类型和长度是:bigint(4),bigint实际长度是8个字节。现在有个数据a=1,a显示4个字节,所以在不满4个字节时前面填充0(前提是该字段设置了zerofill属性),比如:0001。当满了4个字节时,比如现在数据是a=123456,它会按照实际的长度显示,比如:123456。但需要注意的是,有些mysql客户端即使满了4个字节,也可能只显示4个字节的内容,比如会显示成:1234。所以bigint(4),这里的4表示显示的长度为4个字节,实际长度还是占8个字节。四、字段个数我们在建表的时候,一定要对字段个数做一些限制。我之前见过有人创建的表,有几十个,甚至上百个字段,表中保存的数据非常大,查询效率很低。如果真有这种情况,可以将一张大表拆成多张小表,这几张表的主键相同。建议每表的字段个数,不要超过20个。五、主键在创建表时,一定要创建主键。因为主键自带了主键索引,相比于其他索引,主键索引的查询效率最高,因为它不需要回表。此外,主键还是天然的唯一索引,可以根据它来判重。在单个数据库中,主键可以通过AUTO_INCREMENT,设置成自动增长的。但在分布式数据库中,特别是做了分库分表的业务库中,主键最好由外部算法(比如:雪花算法)生成,它能够保证生成的id是全局唯一的。除此之外,主键建议保存跟业务无关的值,减少业务耦合性,方便今后的扩展。不过我也见过,有些一对一的表关系,比如:用户表和用户扩展表,在保存数据时是一对一的关系。这样,用户扩展表的主键,可以直接保存用户表的主键。六、存储引擎在mysql8以前的版本,默认的存储引擎是myslam,而mysql8以后的版本,默认的存储引擎变成了innodb。之前我们还在创建表时,还一直纠结要选哪种存储引擎?myslam的索引和数据分开存储,而有利于查询,但它不支持事务和外键等功能。而innodb虽说查询性能,稍微弱一点,但它支持事务和外键等,功能更强大一些。以前的建议是:读多写少的表,用myslam存储引擎。而写多读多的表,用innodb。但虽说mysql对innodb存储引擎性能的不断优化,现在myslam和innodb查询性能相差已经越来越小。所以,建议我们在使用mysql8以后的版本时,直接使用默认的innodb存储引擎即可,无需额外修改存储引擎。七、NOT NULL在创建字段时,需要选择该字段是否允许为NULL。我们在定义字段时,应该尽可能明确该字段NOT NULL。为什么呢?我们主要以innodb存储引擎为例,myslam存储引擎没啥好说的。主要有以下原因:在innodb中,需要额外的空间存储null值,需要占用更多的空间。null值可能会导致索引失效。null值只能用is null或者is not null判断,用=号判断永远返回false。因此,建议我们在定义字段时,能定义成NOT NULL,就定义成NOT NULL。但如果某个字段直接定义成NOT NULL,万一有些地方忘了给该字段写值,就会insert不了数据。这也算合理的情况。但有一种情况是,系统有新功能上线,新增了字段。上线时一般会先执行sql脚本,再部署代码。由于老代码中,不会给新字段赋值,则insert数据时,也会报错。由此,非常有必要给NOT NULL的字段设置默认值,特别是后面新增的字段。例如:复制alter table product_sku add column brand_id int(10) not null default 0;1.八、外键在mysql中,是存在外键的。外键存在的主要作用是:保证数据的一致性和完整性。例如:复制create table class ( id int(10) primary key auto_increment, cname varchar(15) );1.2.3.4.有个班级表class。然后有个student表:复制create table student( id int(10) primary key auto_increment, name varchar(15) not null, gender varchar(10) not null, cid int, foreign key(cid) references class(id) );1.2.3.4.5.6.7.其中student表中的cid字段,保存的class表的id,这时通过foreign key增加了一个外键。这时,如果你直接通过student表的id删除数据,会报异常:复制a foreign key constraint fails1.必须要先删除class表对于的cid那条数据,再删除student表的数据才行,这样能够保证数据的一致性和完整性。顺便说一句:只有存储引擎是innodb时,才能使用外键。如果只有两张表的关联还好,但如果有十几张表都建了外键关联,每删除一次主表,都需要同步删除十几张子表,很显然性能会非常差。因此,互联网系统中,一般建议不使用外键。因为这类系统更多的是为了性能考虑,宁可牺牲一点数据一致性和完整性。除了外键之外,存储过程和触发器也不太建议使用,他们都会影响性能。九、索引在建表时,除了指定主键索引之外,还需要创建一些普通索引。例如:复制create table product_sku( id int(10) primary key auto_increment, spu_id int(10) not null, brand_id int(10) not null, name varchar(15) not null );1.2.3.4.5.6.在创建商品表时,使用spu_id(商品组表)和brand_id(品牌表)的id。像这类保存其他表id的情况,可以增加普通索引:复制create table product_sku ( id int(10) primary key auto_increment, spu_id int(10) not null, brand_id int(10) not null, name varchar(15) not null, KEY `ix_spu_id` (`spu_id`) USING BTREE, KEY `ix_brand_id` (`brand_id`) USING BTREE );1.2.3.4.5.6.7.8.后面查表的时候,效率更高。但索引字段也不能建的太多,可能会影响保存数据的效率,因为索引需要额外的存储空间。建议单表的索引个数不要超过:5个。如果在建表时,发现索引个数超过5个了,可以删除部分普通索引,改成联合索引。顺便说一句:在创建联合索引的时候,需要使用注意最左匹配原则,不然,建的联合索引效率可能不高。对于数据重复率非常高的字段,比如:状态,不建议单独创建普通索引。因为即使加了索引,如果mysql发现全表扫描效率更高,可能会导致索引失效。如果你对索引失效问题比较感兴趣,可以看看我的另一篇文章《聊聊索引失效的10种场景,太坑了》,里面有非常详细的介绍。十、时间字段时间字段的类型,我们可以选择的范围还是比较多的,目前mysql支持:date、datetime、timestamp、varchar等。varchar类型可能是为了跟接口保持一致,接口中的时间类型是String。但如果哪天我们要通过时间范围查询数据,效率会非常低,因为这种情况没法走索引。date类型主要是为了保存日期,比如:2020-08-20,不适合保存日期和时间,比如:2020-08-20 12:12:20。而datetime和timestamp类型更适合我们保存日期和时间。但它们有略微区别。timestamp:用4个字节来保存数据,它的取值范围为1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07。此外,它还跟时区有关。datetime:用8个字节来保存数据,它的取值范围为1000-01-01 00:00:00 ~ 9999-12-31 23:59:59。它跟时区无关。优先推荐使用datetime类型保存日期和时间,可以保存的时间范围更大一些。温馨提醒一下,在给时间字段设置默认值是,建议不要设置成:0000-00-00 00:00:00,不然查询表时可能会因为转换不了,而直接报错。十一、金额字段mysql中有多个字段可以表示浮点数:float、double、decimal等。而float和double可能会丢失精度,因此推荐大家使用decimal类型保存金额。一般我们是这样定义浮点数的:decimal(m,n)。其中n是指小数的长度,而m是指整数加小数的总长度。假如我们定义的金额类型是这样的:decimal(10,2),则表示整数长度是8位,并且保留2位小数。十二、唯一索引唯一索引在我们实际工作中,使用频率相当高。你可以给单个字段,加唯一索引,比如:组织机构code。也可以给多个字段,加一个联合的唯一索引,比如:分类编号、单位、规格等。单个的唯一索引还好,但如果是联合的唯一索引,字段值出现null时,则唯一性约束可能会失效。创建唯一索引时,相关字段一定不能包含null值,否则唯一性会失效。十三、字符集mysql中支持的字符集有很多,常用的有:latin1、utf-8、utf8mb4、GBK等。这4种字符集情况如下:latin1容易出现乱码问题,在实际项目中使用比较少。而GBK支持中文,但不支持国际通用字符,在实际项目中使用也不多。从目前来看,mysql的字符集使用最多的还是:utf-8和utf8mb4。其中utf-8占用3个字节,比utf8mb4的4个字节,占用更小的存储空间。但utf-8有个问题:即无法存储emoji表情,因为emoji表情一般需要4个字节。由此,使用utf-8字符集,保存emoji表情时,数据库会直接报错。所以,建议在建表时字符集设置成:utf8mb4,会省去很多不必要的麻烦。十四、排序规则不知道,你关注过没,在mysql中创建表时,有个COLLATE参数可以设置。例如:复制CREATE TABLE `order` ( `id` bigint NOT NULL AUTO_INCREMENT, `code` varchar(20) COLLATE utf8mb4_bin NOT NULL, `name` varchar(30) COLLATE utf8mb4_bin NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `un_code` (`code`), KEY `un_code_name` (`code`,`name`) USING BTREE, KEY `idx_name` (`name`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin1.2.3.4.5.6.7.8.9.它是用来设置排序规则的。字符排序规则跟字符集有关,比如:字符集如果是utf8mb4,则字符排序规则也是以:utf8mb4_开头的,常用的有:utf8mb4_general_ci、utf8mb4_bin等。其中utf8mb4_general_ci排序规则,对字母的大小写不敏感。说得更直白一点,就是不区分大小写。而utf8mb4_bin排序规则,对字符大小写敏感,也就是区分大小写。说实话,这一点还是非常重要的。假如order表中现在有一条记录,name的值是大写的YOYO,但我们用小写的yoyo去查,例如:复制select * from order where name='yoyo';1.如果字符排序规则是utf8mb4_general_ci,则可以查出大写的YOYO的那条数据。如果字符排序规则是utf8mb4_bin,则查不出来。由此,字符排序规则一定要根据实际的业务场景选择,否则容易出现问题。十五、大字段我们在创建表时,对一些特殊字段,要额外关注,比如:大字段,即占用较多存储空间的字段。比如:用户的评论,这就属于一个大字段,但这个字段可长可短。但一般会对评论的总长度做限制,比如:最多允许输入500个字符。如果直接定义成text类型,可能会浪费存储空间,所以建议将这类字段定义成varchar类型的存储效率更高。当然,我还见过更大的字段,即该字段直接保存合同数据。一个合同可能会占几Mb。在mysql中保存这种数据,从系统设计的角度来说,本身就不太合理。像合同这种非常大的数据,可以保存到mongodb中,然后在mysql的业务表中,保存mongodb表的id。作者:苏三呀 来源: 苏三说技术
-
通过 PG_TABLESPACE_SIZE 查询表空间的当前使用情况,得到的是表空间在所有DN上占用空间的总和么?那每个DN上的占用情况要怎么获取?谢谢!!!
-
StoneDB是由石原子科技自主设计、研发的国内首款基于MySQL的一体化实时HTAP开源数据库,具有超高性价比的一体化架构设计,是一款同时支持在线事务处理与在线分析处理的融合型分布式数据库产品,可帮助MySQL用户实现平滑升级,获得真正实时的数据分析能力。StoneDB具备超高性能、金融级高可用、实时分析、分布式数据库、兼容MySQL5.6、MySQL5.7协议和MySQL生态等重要特性。其目标是通过插件化的方式解决MySQL数据库本身不具备分析能力的问题,为用户提供一站式OLTP+OLAP解决方案。StoneDB已于2022年6月29日正式开源,并启动开源社区建设。作为新近开源的国产数据库产品,StoneDB开发团队深知开源社区建设与合作的重要性,社区生态建设可以达到1+1远大于2的效果。因此在社区建立初期就积极参与国产数据库行业生态活动,希望与国内数据库行业及开源领域上下游伙伴共同建设健康的数据库生态。华为openGauss是一款开源的关系型数据库管理系统,它具有多核高性能、全链路安全性、智能运维等企业级特性。openGauss内核早期源自开源数据库PostgreSQL,融合了华为在数据库领域多年的内核经验,在架构、事务、存储引擎、优化器及ARM架构上进行了适配与优化。作为一个开源数据库,openGauss 期望与广泛的开发者共同构建一个多元化技术的开源数据库社区。8月4日,StoneDB社区携手华为openGauss社区,互相签署贡献者协议(CLA),正式形成开源共建合作伙伴关系。目的是共同建设国产开源数据库大生态,相互支持,数据互通,赋能数据库产业,实现自主可控的国产化替代。在如今的国际环境下,国产数据库必须要成功,也一定能成功,这已经成为整个行业的共识。国产数据库的成功,一定是建立在开源开放的基础上。这一点是开源社区的共识。中国的数据库领域,非常缺乏内核研发人才,要想形成合力加速发展,就必须开源、合作。通过开源去吸引人才,影响用户,才会有越来越多的人加入社区,集中攻关、合作突破,进而超越产业上的领先者。后续,双方社区将在数据库迁移、语法兼容等方面展开合作,还将共同举办各类开源社区交流活动,请大家拭目以待!
-
图计算作为人工智能领域前沿技术,正悄然成为产业界,乃至学术界的关注重点。财联社《TMT时报》8月28日讯(记者 郭辉),图计算作为人工智能领域前沿技术,正悄然成为产业界,乃至学术界的关注重点。在产业应用方面,华为、蚂蚁、阿里、腾讯、AWS等公有云、数据库等领域的巨头,正在大步推进图计算的商业化与应用场景探索。《科创板日报》记者了解到,蚂蚁集团早在2015年就开始布局图计算技术,设置了专门研发团队,并在此前联合清华大学,高调发布国内业界首个在大规模图上提供实时服务的图计算平台TuGraph。华为则与华中科技大学进行合作,成立数据中心架构创新中心,推出新型高性能图计算平台图引擎EGS。一级市场近年掀起一股图计算的创业与投资热潮。根据CB Insights数据,过去三年时间国内外共有近15家企业获得了超过20笔融资,其中海外知名图数据库企业Neo4j在2021年6月的F轮融资中获得3.25亿美元投资,成为数据库历史上最大的一笔投资。国内来看,则有欧拉认知、Ultipa、创邻科技、欧若数网等多家初创企业,获得招银国际、经纬创投、红点中国等多家知名机构青睐。在学术研究领域,《科创板日报》记者从一位国内Top级高校计算机学院青年学者了解到,围绕图计算技术,学界已经形成AI制药、AI预训练技术等学术热点。图计算是什么?有哪些商业化应用的前景?哪些行业或环节有机会从中受益?目前业界在实践中遇到了哪些痛点?《科创板日报》记者日前参加了一场图计算主题研讨活动,多位来自业界或学界资深人士分享了他们的最新观点。“图计算”中“图”(graph)的概念源自数学中的一门课程“图论”。图计算是研究人类世界的事物和事物之间的关系,对其进行描述、刻画、分析和计算的一门技术,而图数据能够更自然、直观地表述数据间的关联关系,是一种更符合人类思考方式的抽象表达。蚂蚁集团图数据库负责人洪春涛认为,图计算把数据抽象成图,方便复杂关系的还原和可视化处理,更适合海量数据的数字化时代。图计算相当于提供了一种理解世界的新方式,尽管同时也给计算机处理带来了很多技术挑战。据了解,当前主流的关系型数据库较为贴近机器逻辑,能够把数据抽象成规整的二维表,便于机器处理。但对于交易关系、企业关联关系的查询等场景,关系型数据库很难满足多度关联查询的时效性,而图数据库甚至可以以毫秒级的速度给出结果。由此,金融、能源、智能制造、电信和公共医疗等对数据实时处理要求更高的行业,成为图计算商业化应用前景最为明朗的应用场景。蚂蚁集团图数据库负责人洪春涛表示,从他们的实践经验来看,目前图计算已经被应用于风控、社交、内容推荐等场景,并取得了很好的业务效果。Gartner在《2021年十大数据和分析技术趋势》报告中预测,到2025年图技术将应用于80%的数据和分析创新。“人工智能发展的终极目标是实现强人工智能,强人工智能指的是让机器和算法像人类一样具备图的思维方式,而图思维方式的本质就是能 100% 实现映射和还原世界。”Ultipa 联合创始人张建松表示,图计算能够在提供深层计算能力的同时,打破系统间、数据间存在的藩篱,并对多源、多维的数据进行深度下钻、关联、归因分析。在这个意义上,张建松预计随着数据规模的不断扩大、数据复杂性的不断提高,“图”会成为未来数据库技术发展的主流方向之一。“图计算、图算法方面的创新将在第三代人工智能时期广泛出现,且这些特征和算法是白盒化的,因而能够极大推动下一代人工智能技术的发展。”不过,当前图计算在业界应用面临着不小的痛点。有业界人士介绍,当前图计算推广应用仍处于“拿着榔头找钉子”的过程。“工具和需求场景都有了,就差一拍即合,其症结在于双方对场景要点和业务需求的深入理解不足。《科创板日报》记者从一位金融企业技术部门负责人士了解到,以证券行业公司为例,往往业务较为庞杂,如何把图计算、图数据库恰当地应用到每一个业务场景,是他们眼前在技术与业务实现融合方面,最为迫切的问题。
-
也许你曾梦想改变世界,却无高人指点;也许你想提升自己,却苦学无门;也许你志在成为数据库大师,却无从下手。华为云GaussDB入门级开发者认证,为数据库从业人员提供了清晰的开发者成长路径,名师大咖在线指导,学练考深度结合,能力提升不在话下,扬名江湖指日可待。报名链接:cid:link_0福利链接:cid:link_1
-
在业务开发中,经常有需要模糊匹配某个字段的需求。比如按某个名字匹配,但用户可能只记得部分字,没记住全名,如果能支持模糊匹配那用户体验就会好很多。MySQL 提供了标准SQL模式匹配以及一种基于扩展正则表达式的模式匹配,类似于 Unix 实用程序(如 vi、grep和 sed )使用的那些。SQL模式匹配SQL模式匹配使您能够用"_"匹配任何单个字符,使用"%"匹配任意数量的字符(包括零个字符)。在MySQL中,SQL模式默认不区分大小写。不要在使用SQL模式时使用=或<>,请改用LIKE或者NOT LIKE运算符。要查找以b开头的名称:复制mysql> SELECT * FROM pet WHERE name LIKE 'b%'; +--------+--------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +--------+--------+---------+------+------------+------------+ | Buffy | Harold | dog | f | 1989-05-13 | NULL | | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 | +--------+--------+---------+------+------------+------------+1.2.3.4.5.6.7.查找以fy结尾的名称:复制mysql> SELECT * FROM pet WHERE name LIKE '%fy'; +--------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +--------+--------+---------+------+------------+-------+ | Fluffy | Harold | cat | f | 1993-02-04 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | +--------+--------+---------+------+------------+-------+1.2.3.4.5.6.7.要查找包含w的名称:复制mysql> SELECT * FROM pet WHERE name LIKE '%w%'; +----------+-------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +----------+-------+---------+------+------------+------------+ | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 | | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL | +----------+-------+---------+------+------------+------------+1.2.3.4.5.6.7.8.要查找恰好包含五个字符的名称,请使用模式字符"_":复制mysql> SELECT * FROM pet WHERE name LIKE '_____'; +-------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +-------+--------+---------+------+------------+-------+ | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | +-------+--------+---------+------+------------+-------+1.2.3.4.5.6.7.正则模式匹配在通常情况下,上述功能已经可以满足大部分业务的开发需求。但偶尔也会遇到一些更复杂的查询匹配需求,可能需要正则才能满足。MySQL 提供的另一种模式匹配使用扩展的正则表达式。当您测试这种类型的模式是否匹配时,请使用REGEXP和NOT REGEXP运算符(或 RLIKE与NOT RLIKE,它们是同义词)。个人比较偏爱RLIKE、NOT RLIKE,与LIKE、NOT LIKE类似,好记。. 匹配任何单个字符。字符类 [...] 匹配括号内的任何字符。例如, [abc]匹配a、 b或c。要命名一系列字符,请使用破折号,[a-z] 匹配任何字母,而[0-9] 匹配任何数字。* 匹配它前面的事物的零个或多个实例。例如,x* 匹配任意数量的x字符、 [0-9]*匹配任意数量的数字以及.*匹配任意数量的任何内容。如果模式匹配正在测试的值中的任何位置,则正则表达式模式匹配成功。(这与LIKE模式匹配不同,LIKE模式匹配只有在模式匹配整个值时才会成功。)要锚定一个模式,使其必须匹配被测试值^的开头或$结尾,请在模式的开头或结尾使用。为了演示扩展正则表达式是如何工作的,LIKE前面显示的查询在这里用正则重写。要查找以b开头的名称,使用^匹配名称的开头:复制mysql> SELECT * FROM pet WHERE name REGEXP '^b'; +--------+--------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +--------+--------+---------+------+------------+------------+ | Buffy | Harold | dog | f | 1989-05-13 | NULL | | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 | +--------+--------+---------+------+------------+------------+1.2.3.4.5.6.7.要强制REGEXP比较区分大小写,请使用BINARY关键字使其中一个字符串成为二进制字符串。此查询仅匹配b名称开头的小写字母:复制SELECT * FROM pet WHERE name REGEXP BINARY '^b';1.要查找以fy结尾的名称,使用$匹配名称的结尾:复制mysql> SELECT * FROM pet WHERE name REGEXP 'fy$'; +--------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +--------+--------+---------+------+------------+-------+ | Fluffy | Harold | cat | f | 1993-02-04 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | +--------+--------+---------+------+------------+-------+1.2.3.4.5.6.7.要查找包含w的名称,请使用以下查询:复制mysql> SELECT * FROM pet WHERE name REGEXP 'w'; +----------+-------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +----------+-------+---------+------+------------+------------+ | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 | | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL | +----------+-------+---------+------+------------+------------+1.2.3.4.5.6.7.8.因为正则表达式模式会匹配出现在值的任何位置,因此在前面的查询中,没有必要像SQL 模式那样在模式的任一侧放置通配符以使其匹配整个值。要查找恰好包含五个字符的名称,使用^、$、. 来匹配名称的开头和结尾:复制mysql> SELECT * FROM pet WHERE name REGEXP '^.....$'; +-------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +-------+--------+---------+------+------------+-------+ | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | +-------+--------+---------+------+------------+-------+1.2.3.4.5.6.7.还可以使用{n} (“repeat-n-times”)运算符:复制mysql> SELECT * FROM pet WHERE name REGEXP '^.{5}$'; +-------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +-------+--------+---------+------+------------+-------+ | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | +-------+--------+---------+------+------------+-------+1.2.3.4.5.6.7.注意事项两种模式匹配区别Like匹配原则是要求模式串与整个目标字段匹配时,才返回该条记录。正则匹配则是当目标字段包含模式串时即返回该条记录。模式匹配可能无法走索引InnoDB 在模糊查询数据时使用 "%xx" 会导致索引失效,正则也类似。最好能结合其他索引字段一起查询,这样效率比较高。如果数据比较多,建议用全文索引。正则匹配注意特殊字符正则匹配功能强大,但使用时一定需要注意特殊字符的干扰,尤其是在mysql中查中括号或者小括号,一定要转义:复制mysql> SELECT REGEXP_LIKE('(', '('); ERROR 3692 (HY000): Mismatched parenthesis in regular expression. mysql> SELECT REGEXP_LIKE('(', '\\('); +-------------------------+ | REGEXP_LIKE('(', '\\(') | +-------------------------+ | 1 | +-------------------------+ mysql> SELECT REGEXP_LIKE(')', ')'); ERROR 3692 (HY000): Mismatched parenthesis in regular expression. mysql> SELECT REGEXP_LIKE(')', '\\)'); +-------------------------+ | REGEXP_LIKE(')', '\\)') | +-------------------------+ | 1 | +-------------------------+ mysql> SELECT REGEXP_LIKE('[', '['); ERROR 3696 (HY000): The regular expression contains an unclosed bracket expression. mysql> SELECT REGEXP_LIKE('[', '\\['); +-------------------------+ | REGEXP_LIKE('[', '\\[') | +-------------------------+ | 1 | +-------------------------+ mysql> SELECT REGEXP_LIKE(']', ']'); +-----------------------+ | REGEXP_LIKE(']', ']') | +-----------------------+ | 1 | +-----------------------+1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.解决办法:限制使用的字符范围,排除元字符。查询之前先转义,例如golang中,使用func QuoteMeta(s string) string复制QuoteMeta returns a string that escapes all regular expression metacharacters inside the argument text; the returned string is a regular expression matching the literal text.1.
-
1. 问题描述HUAWEI,Kunpeng 920Kylin Linux Advanced Server release V10 (Sword)达梦V8在使用Ambari安装包ambari-2.7.3.0-openEuler20.03.tar.gz后,安装配置Ambari-server报错,其中使用达梦v8替代oracle作为ambari元数据库关键步骤1:将DmJdbcDriver18.jar重命名为ojdbc7.jar,放置在/usr/share/java下ambari-server setup --jdbc-db=oracle --jdbc-driver=/usr/share/java/ojdbc7.jarchmod 644 /usr/share/java/ojdbc7.jar:关键步骤2:修改配置文件ambari.properties如下:vim /etc/ambari-server/conf/ambari.propertiesulimit.open.files=65536server.jdbc.driver.path=/usr/share/java/DmJdbcDriver18.jarjava.home=/opt/jdk8u222-b10server.jdbc.hostname=arm-ky10-23-2#server.jdbc.driver=oracle.jdbc.driver.OracleDriverserver.jdbc.driver=dm.jdbc.driver.DmDriverserver.jdbc.rca.user.name=ambariserver.jdbc.database=oracleserver.jdbc.database_name=ambari#server.jdbc.rca.url=jdbc:oracle:thin:@arm-ky10-23-2:5236/ambariserver.jdbc.rca.url=jdbc:dm://arm-ky10-23-2:5236?schema=ambaricustom.oracle.jdbc.name=DmJdbcDriver18.jarbootstrap.script=/usr/lib/ambari-server/lib/ambari_server/bootstrap.pyserver.version.file=/var/lib/ambari-server/resources/versiongpl.license.accepted=truejdk1.8.dest-file=jdk-8u112-linux-x64.tar.gzserver.task.timeout=1200#server.jdbc.rca.driver=oracle.jdbc.driver.OracleDriverserver.jdbc.rca.driver=dm.jdbc.driver.DmDriver#server.jdbc.url=jdbc:oracle:thin:@arm-ky10-23-2:5236/ambariserver.jdbc.url=jdbc:dm://arm-ky10-23-2:5236?schema=ambari执行ambari-server start后报错:INFO: An exception was caught and reported. Message: java.lang.RuntimeException: The database type could be not determined from the JDBC URL jdbc:dm://arm-ky10-23-2:5236/ambarijava.lang.RuntimeException: The database type could be not determined from the JDBC URL jdbc:dm://arm-ky10-23-2:5236/ambari at org.apache.ambari.server.configuration.Configuration.getDatabaseType(Configuration.java:4944) at org.apache.ambari.server.controller.ControllerModule.getPersistenceProperties(ControllerModule.java:224) at org.apache.ambari.server.controller.ControllerModule.buildJpaPersistModule(ControllerModule.java:418) at org.apache.ambari.server.controller.ControllerModule.configure(ControllerModule.java:343) at com.google.inject.AbstractModule.configure(AbstractModule.java:62) at com.google.inject.spi.Elements$RecordingBinder.install(Elements.java:340) at com.google.inject.spi.Elements.getElements(Elements.java:110) at com.google.inject.internal.InjectorShell$Builder.build(InjectorShell.java:138) at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:104) at com.google.inject.Guice.createInjector(Guice.java:99) at com.google.inject.Guice.createInjector(Guice.java:73) at com.google.inject.Guice.createInjector(Guice.java:62) at org.apache.ambari.server.controller.AmbariServer.main(AmbariServer.java:1079)Exception in thread "main" com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalStateException: Recursive load of: org.apache.ambari.server.events.publishers.STOMPUpdatePublisher.() at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2203) at com.google.common.cache.LocalCache.get(LocalCache.java:3937) at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3941) at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4824) at com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4830) at com.google.inject.internal.FailableCache.get(FailableCache.java:48) at com.google.inject.internal.ConstructorInjectorStore.get(ConstructorInjectorStore.java:50) at com.google.inject.internal.ConstructorBindingImpl.initialize(ConstructorBindingImpl.java:138) at com.google.inject.internal.InjectorImpl.initializeJitBinding(InjectorImpl.java:550) at com.google.inject.internal.InjectorImpl.createJustInTimeBinding(InjectorImpl.java:887) at com.google.inject.internal.InjectorImpl.createJustInTimeBindingRecursive(InjectorImpl.java:808) at com.google.inject.internal.InjectorImpl.getJustInTimeBinding(InjectorImpl.java:285) at com.google.inject.internal.InjectorImpl.getBindingOrThrow(InjectorImpl.java:217) at com.google.inject.internal.InjectorImpl.getInternalFactory(InjectorImpl.java:893) at com.google.inject.internal.FactoryProxy.notify(FactoryProxy.java:46) at com.google.inject.internal.ProcessedBindingData.runCreationListeners(ProcessedBindingData.java:50) at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:134) at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:107) at com.google.inject.Guice.createInjector(Guice.java:99) at com.google.inject.Guice.createInjector(Guice.java:73) at com.google.inject.Guice.createInjector(Guice.java:62) at org.apache.ambari.server.controller.AmbariServer.main(AmbariServer.java:1079)
-
数据库供应商MariaDB宣布收购私有地理空间数据技术供应商CubeWerx,这将使该供应商与已经提供地理空间功能的竞争对手保持一致。该收购交易的财务条款未披露。MariaDB正在为首次公开募股做准备,尽管该供应商尚未说明实际IPO何时发生。除了收购之外,MariaDB 还加入了Geospatial Consortium组织,该组织致力于建立使用地理空间信息的标准和最佳实践。CubeWerx公司位于加拿大魁北克加蒂诺,他们开发了一种称为Stratos地理空间平台的技术,使企业能够加载、管理和分析地理空间数据。MariaDB过去对地理空间数据的支持有限,现在他们将努力将CubeWerx技术集成到其SkySQL云数据库即服务中。这家位于加利福尼亚州雷德伍德城的供应商目前不打算将CubeWerx技术引入其MariaDB数据库的开源版本。其他数据库供应商近年来也已经开始支持地理空间功能。CockroachDB在其20.2更新中添加了地理空间支持,MongoDB 6.0还支持包括GeoJSON对象在内的地理空间数据类型。在新的地理空间功能方面,MariaDB将面临的最大挑战可能是,如何指导用户了解该技术的工作原理。然而,她说她看到了MariaDB和CubeWerx结合的机会。Schneider 表示:“我们看到对位置和地理空间情报的需求不断增长,并不是每个数据库工具都准备好应对此类数据的挑战。合并后的公司旨在解决速度和处理复杂性的问题。”地理空间数据功能有什么作用CubeWerx是一家拥有25年历史的成熟供应商。CubeWerx由一组开发人员于1997年创立,他们之前帮助开发了Oracle Spatial数据库服务。CubeWerx的联合创始人兼副总裁Glenn Stowe说:“我们长期以来一直在考虑地理空间和数据库。”CubeWerx开发的模型是这样一种方法,它可使地理空间应用程序像应用程序服务器一样使用数据库。Stowe说,CubeWerx为MariaDB SkySQL平台带来了多项新功能。其中一项功能是支持不同类型的地理空间图像,包括卫星和空中无人机图像。 Stowe 表示:“CubeWerx花费了大量时间和精力来建立机制来处理这种地理空间图像信息并能够将其导入数据库。”CubeWerx技术不一定将卫星图像存储在数据库中,现在可以通过云对象存储轻松实现。相反,CubeWerx的技术专注于索引和创建围绕地理空间图像的元数据,以便用户可以有效地查询和分析图像。Stowe提到的一个应用是用于烧伤痕迹分析,其中用户希望使用卫星图像识别火灾对整个地区的影响。地理空间数据还可用于估计与潜在火灾和洪水相关的风险。与MariaDB集成Stowe表示,他希望CubeWerx和MariaDB的集成能够帮助开发人员构建地理空间应用程序。Stowe 称:“人们在数据库之上构建地理空间应用程序的方式发生了转变,他们不再直接访问数据库进行查询。现在这一切都是通过API完成。”虽然集成还处于初期阶段,但MariaDB的计划是在未来几个月内将CubeWerx与MariaDB SkySQL集成。MariaDB公司SkySQL副总裁兼总经理Jags Ramnarayan说:“我们还没有准确的时间表,但我会说很快,希望在几个月内,你将开始在SkySQL中看到地理空间数据即服务功能。”来源: TechTarget中国
-
NDBC 20228月19日-21日,第39届中国数据库学术会议(NDBC 2022)在山东威海顺利召开并圆满落幕。华为携手数据库领域专家亮相本次大会,为广大与会者带来深度分享,主要包括CCF-华为胡杨林基金-数据库专项论坛、企业之夜、技术分论坛宣讲、NDBC 2022系统演示等。共计十多位数据库领域专家从数据库领域所面临的新挑战,新问题和新方向等不同维度带来技术分享,向参会者介绍数据库前沿科技及未来人才培养方向。共商数据库领域学术界、产业界未来发展之路!CCF-华为胡杨林基金-数据库专项论坛8月20日下午13:30,CCF-华为胡杨林基金-数据库专项论坛在威海市海悦建国饭店会议室B正式召开。中国人民大学副教授范举、厦门大学教授林琛、东北大学教授张岩峰、哈尔滨工业大学助理教授丁小欧、北京理工大学教授李荣华、南京航空航天大学教授许建秋、浙江大学“百人计划”研究员张东祥、山东大学教授崔立真、上海电力大学教授田秀霞、上海交通大学教授姚斌等十位学术界专家依次进行技术分享,分享了《基于深度学习的数据库测试数据与查询生成技术研究》、《面向云数据库的索引推荐研究》、《基于无协调强一致性技术的多主架构云原生数据库》等主题报告。论坛最后,由CCF专委会副主任/清华大学教授李国良、中国人民大学副教授范举、华为数据库技术专家李思昊、南京航空航天大学教授许建秋、东北大学教授张岩峰等老师作为特邀嘉宾,对《学术研究与产业需求应如何相互牵引和碰撞》进行了探讨。现在让我们来回顾一下各位专家的风采。中国人民大学副教授范举分享报告—《基于深度学习的数据库测试数据与查询生成技术研究》。项目提出研究基于深度学习的数据库测试数据与查询生成技术,重点解决两个关键问题:其一是通过深度生成模型捕获数据的复杂分布,生成兼顾数据的隐私保护与测试效果的合成数据;其二是利用强化学习来生成约束感知的测试SQL查询,满足用户多样化的测试需求。在此基础上,本项目拟对关键技术进行集成,构建基于深度学习的数据库测试工具集。厦门大学教授林琛分享报告—《面向云数据库的索引推荐研究》。林琛老师的研究团队拟开展面向云数据库的索引推荐研究,提高基于机器学习的索引推荐模型的训练效率、鲁棒性和安全性,保证云数据库的高性能、低延时、高可用性,高适用性和高可靠性。东北大学教授张岩峰分享报告—《基于无协调强一致性技术的多主架构云原生数据库》。本项目将已有的GeoGauss系统扩展为云原生架构,针对存算分离和数据分片的特点设计分布式事务处理方法,使其能够支持多读多写、轻协调、存算分离的云原生分布式数据库系统。哈尔滨工业大学助理教授丁小欧分享报告—《嵌入式数据库管理系统的理论与关键技术研究》。本项目拟从存储和查询两方面展开研究:面对嵌入式数据库的应用环境特点,提出支撑嵌入式系统中多源异构数据的存储方法,设计面向存储代价的智能决策算法,提高存储数据与任务的匹配度;并根据负载和数据变化实现存储结构自适应转换,提高数据实时并发读写能力。面对嵌入式数据库存算能力、能耗、设备寿命多方面的挑战,设计不同计算资源条件下的智能算子选择方法、提出多目标查询优化方法;并针对嵌入式节点异常导致的查询中断、结果错误等问题,设计高可靠查询方法。北京理工大学教授李荣华分享报告—《面向时序超图的稠密子图挖掘技术研究》。本项目重点研究:为了存储时序超图并实现高效查询,提出基于混合组织切片的时序超图构建存储技术;为了建模时序稠密子超图并实现高效挖掘,提出基于时序剪枝的时序稠密子超图挖掘算法;为了评估稠密子超图质量并实现算法分析,提出基于时序特征的时序稠密子超图评估方法。南京航空航天大学教授许建秋分享报告—《基于openGauss的时序数据管理系统研究》。本项目基于openGauss系统研发时序数据管理系统,包括时序数据质量、存储引擎、查询分析等。一方面,openGauss社区当前缺乏基于openGauss的时序数据管理能力,本项目研究可以帮助拓展openGauss管理能力从而有效支持时序数据管理;另一方面,时序数据质量和存储引擎对于提升数据可靠性和时序数据管理能力具有一定的参考和借鉴价值。浙江大学“百人计划”研究员张东祥分享报告—《基于openGauss的城市时空视频数据库实时解析与智能查询》。本项目将研究如何对城市路网大规模监控摄像头产生的视频数据进行实时解析并建立时空语义索引,统一支持选择(select)、聚合(aggregate)、连接(join)等多种不同类型的查询以及跨摄像头的车辆追踪和模式挖掘等任务,并最终搭建一个开源的视频数据库原型系统,丰富openGauss应用生态。上海电力大学教授田秀霞分享报告—《基于secGear的云密态数据库范围查询验证方案研究与实现》。本项目拟设计基于硬件可信执行环境(Trusted Execution Environment, TEE)的范围查询验证方案,保护查询过程中数据安全的同时,有效减少轻型客户端开销并有效降低通信成本。山东大学教授崔立真分享报告—《分布式多方安全可信数据库技术与实现》。本研究通过构建分布式多方安全可信数据库架构、数据库与区块链的性能适配和数据库的隐私保护适配,设计并实现分布式多方安全可信数据库,最终实现数据库事务与数据操作的去中心化、抗篡改、防泄漏的原生支撑能力。上海交通大学教授姚斌分享报告—《基于openGauss的隐私保护聚合查询技术研究与实现》。本研究拟基于零知识证明技术,构建一套针对大规模用户数据聚合查询统计的隐私保护方案,使得作为数据拥有者的用户,其拥有的隐私数据自始至终都仅存在本地,而作为数据收集者的服务器端可以验证数据的正确性,并提供统计查询服务。企业之夜8月19日19:00,在威海市海悦建国饭店多功能厅,华为数据库助理科学家/GaussDB首席专家任阳和CCF数据库专委会主任李战怀老师,分别代表openGauss社区与CCF数据库专委会进行了合作签约仪式。为了更好的宣传openGauss社区和Gauss松鼠会,同时为社区及技术圈会员提供更多的参与专家分享、交流的机会,双方拟合办“CCF中国数据库战略研讨系列主题论坛”活动。在企业之夜,华为数据库助理科学家/GaussDB首席专家任阳从企业文化、校企项目合作、青年员工成长等方面对华为技术有限公司进行了介绍。数据库产业论坛8月20日14:50,数据库产业论坛在威海市海悦建国饭店四楼会议室C顺利开展。鲲鹏高校生态发展总监薛忠斌带来主题报告—《openGauss企业级开源数据库特性解读》。报告从openGauss数据库的产生背景、社区架构、人才培养、产品特性等方面进行介绍。重点将从技术层面介绍openGauss相关特性,包含Numa-aware设计、锁优化、软硬结合充分利用底层CPU特性提升效率等,为多核场景下的数据库设计提供指导和借鉴。数据库系统人才培养论坛8月21日16:30-17:30,数据库系统人才培养论坛在威海市海悦建国饭店四楼会议室C顺利召开。中国人民大学教授 陈红、中国人民大学副教授 卢卫、华东师范大学教授 郭健美、奥星贝斯 徐泉清、华为高斯实验室技术规划专家 班伟共同开展 Panel:课堂内外联动的数据库系统人才培养。NDBC 2022 系统演示8月20日,NDBC 2022系统演示在威海市海悦建国饭店多功能厅举行。华为技术专家在NDBC 2022上演示ARM架构下典型开源数据库HTAP性能研究。实验主要基于典型开源数据库PostgreSQL、MySQL和openGauss在ARM服务器taishan200上开展性能研究。在大会期间,华为作为赞助商在现场设置了展位,吸引了不少参会者的关注。现场数据库爱好者、高校师生们在了解openGauss数据库的同时纷纷加入了Gauss松鼠会技术交流圈。Gauss松鼠会作为华为公司此次参加NDBC大会的协作机构,全程投入到华为参会的支撑工作中。同时,通过此次大会,Gauss松鼠会吸引了约百位数据库领域精英的关注。Gauss松鼠会由华为公司发起,联合云和恩墨、海量数据及众多高校及志愿者共同运营,致力于通过技术圈的方式汇聚数据库爱好者和关注者,像松鼠一样剥开科学技术的坚果并科普大众,培养数据库人才,打造中国数据库人才培养的黄埔军校,为国产数据库的发展贡献力量。欢迎关注、加入Gauss松鼠会!
-
入库过程后的自动优化,是为了解决传统分布式数据库甚至Hadoop平台也非常常见的:在用户使用一段时间后,发现如果没有对数据库的存储进行人工定时维护,则会引起性能大幅下降的问题。以柏睿数据的全内存分布式数据库RapidsDB来具体解释,RapidsDB的3个自动优化手段,就是解决核心的3个性能影响因素:第一个是,无论做增删改操作,数据库都会自动对相关的列存行段中的数据自动重新排序,保证优秀的查询性能。第二个是当列存行段内重新排序完成后,其外的行段组会重新做排序组织,进一步使数据有序,二次优化性能。第三个是经过上述2点的优化,有序数据使压缩率得到提升,数据文件也得到合并,数据文件个数同时也会减少。IO读写性能可以在整个使用过程中,一直保存在极高的状态中。目前知道的是,这个全内存分布式数据库RapidsDB已经在国有某大行普惠金融项目应用中运行超过10个月,产品自动优化证明了它的能力和价值。中间经历过几次10TB级的数据加载,每天10GB级的数据新增和更新,以及定时的滚动式删除。过程中,技术团队无需对数据库做任何优化干预,相同场景的数据操作没有任何性能下降的迹象。
推荐直播
-
Skill 构建 × 智能创作:基于华为云码道的 AI 内容生产提效方案2026/03/25 周三 19:00-20:00
余伟,华为云软件研发工程师/万邵业(万少),华为云HCDE开发者专家
本次直播带来两大实战:华为云码道 Skill-Creator 手把手搭建专属知识库 Skill;如何用码道提效 OpenClaw 小说文本,打造从大纲到成稿的 AI 原创小说全链路。技术干货 + OPC创作思路,一次讲透!
回顾中 -
码道新技能,AI 新生产力——从自动视频生成到开源项目解析2026/04/08 周三 19:00-21:00
童得力-华为云开发者生态运营总监/何文强-无人机企业AI提效负责人
本次华为云码道 Skill 实战活动,聚焦两大 AI 开发场景:通过实战教学,带你打造 AI 编程自动生成视频 Skill,并实现对 GitHub 热门开源项目的智能知识抽取,手把手掌握 Skill 开发全流程,用 AI 提升研发效率与内容生产力。
回顾中 -
华为云码道:零代码股票智能决策平台全功能实战2026/04/18 周六 10:00-12:00
秦拳德-中软国际教育卓越研究院研究员、华为云金牌讲师、云原生技术专家
利用Tushare接口获取实时行情数据,采用Transformer算法进行时序预测与涨跌分析,并集成DeepSeek API提供智能解读。同时,项目深度结合华为云CodeArts(码道)的代码智能体能力,实现代码一键推送至云端代码仓库,建立起高效、可协作的团队开发新范式。开发者可快速上手,从零打造功能完整的个股筛选、智能分析与风险管控产品。
回顾中
热门标签