关于sql:慢SQL治理实践及落地成果分享-京东物流技术团队

一、治理背景数据库系统性能问题会对应用程序的性能和用户体验产生负面影响。慢查问可能导致应用程序响应变慢、申请沉积、零碎负载减少等问题,甚至引发零碎解体或不可用的状况。慢SQL治理是在数据库系统中针对执行迟缓的SQL查问进行优化和改良的一项重要工作。 但原有的治理节奏,个别在大促备战期间,集中投入人力紧急治理,日常对慢SQL的关注度不高;即便研发团队想着手治理,实例下的SQL明细筛选繁琐,趋势不明,短少系统化,数字化的治理计划。 所以为了保证系统稳定性,预防潜在慢SQL导致应急事变,发动慢SQL常态化备战专项,下文次要形容专项的实际及落地状况。 二、阶段布局 1.0阶段指标:【造成常态化治理机制,关注慢SQL解决的有效率】 扭转慢SQL治理习惯,由原大促备战期间治理,落地依照日维度产生的慢SQL每天跟进,关注双周维度治理的有效率。 关注指标: 逾期率 = 工单逾期数量(创立工夫在当季度的工作)/总量(创立工夫在当季度的工作) 注:超过14天未解决实现的算逾期,逾期与否以第一次实现的工夫来判断,如果在截止日期前未实现,算逾期;如果在截止日期前实现,然而重开后,在截止日期后实现,不算逾期,算重开;挂起的如果超过14天会统计到逾期里; 重开率 =工单重开次数(创立工夫在当季度的工作,如果是一个工作被重开5次,记录为5)/总量(创立工夫在当季度的工作) 2.0阶段指标:【彻底根治慢SQL历史债,达成阶段性内的>0.9s清零】 通过1.0阶段研发团队有序进行慢SQL的逐渐治理,后期曾经无效解决局部慢SQL数据,但仍存在历史债,影响零碎稳定性。2.0阶段要求双周阶段性清零。 关注指标: P0工单推送数=大于0.9s推送工夫在当周的工作总数 注:申明级别划分, P0 执行工夫大于0.9秒,且达到阈值10次 P1 执行工夫大于0.9秒,但未达到阈值10次 P2 执行工夫小于0.9秒未加索引,且达到阈值10次 P3 执行工夫小于0.9秒未加索引,但未达到阈值10次 P0工单存量数=大于0.9s推送工夫在当周的工作中状态是非已解决的总数 解决率=大于0.9s推送工夫在当中的工作状态是已解决的/推送工夫在当周的工作总数 3.0阶段指标:【进步零碎性能指标,阶梯型升高慢SQL阈值】 存在较大隐患的0.9s阶段性清零后,对慢SQL工单逐渐精细化,依照阶梯维度逐渐升高慢SQL定义阈值,依照双周维度对新增慢SQL清零。 关注指标: P0工单推送数=大于0.9s推送工夫在当周的工作总数 注:申明级别划分, P0 执行工夫大于0.9秒 P1 执行工夫小于等于0.9秒大于0.7秒 P2 执行工夫小于等于0.7秒大于0.5秒 P3 执行工夫小于等于0.5秒未加索引 P1工单推送数=小于等于0.9s大于0.7s推送工夫在当周的工作总数 P2工单推送数=小于等于0.7s大于0.5s推送工夫在当周的工作总数 存量数=推送工夫在当周的工作中状态是非已解决的总数 解决率=推送工夫在当中的工作状态是已解决的/推送工夫在当周的工作总数 4.0阶段指标:【前置预防慢SQL,落地数据库操作标准】 预期指标,彻底解决历史债晋升零碎性能指标后,贯彻数据库操作标准预防新增慢SQL,后续继续关注新增的慢SQL,管制新增数量指标周清。 关注指标: 工单新增数=推送工夫在当周的非现存指纹ID的工作总数 存量数=推送工夫在当周的工作中状态是非已解决的总数 解决率=推送工夫在当中的工作状态是已解决的/推送工夫在当周的工作总数 三、落地计划①数据筹备阈值定义 联合二级部门业务,每天收集SQL的查问工夫是T-1天,执行工夫>0.9秒或<0.9秒但执行打算内未走索引的,剔除bi_cx和wlcx抽数后(不辨别主从),聚合雷同指纹慢SQL均辨认为现存危险慢SQL。 明确等级 不同治理阶段,会针对慢SQL划分优先级,按P0-P3程序,推动研发由高到低依照不同解决时效进行考核。同时提供辅助诊断信息,包含触发该慢SQL治理工作的数据库IP/域名/库名/执行耗时/执行打算等。 归类筛选 依照实例信息,数据库名,归属零碎,归属产品条线,查问工夫,聚合指纹等进行归类,不便归类出慢SQL的同一问题源。 ②工单推动工单流转 依照业务条线划分,明确每个条线工单接口人,对立下派慢SQL工单给到接口人,由接口人依照零碎散发组内同学,逐个解决。 解决思路 借鉴dba等提供的解决思路,同时总结团队内落地的解决方案,推动慢SQL疾速解决。 ③趋势剖析图表制作 依据每个阶段关注指标数据,制作慢SQL解决趋势图表,实现团队内可清晰查看,每个实例下的慢SQL明细,反对多个维度筛选;同时依照工夫维度反对查看解决趋势了,现存数量等。 通晒复盘 以专项周会的模式,同步研发团队解决节奏和进度,保障继续推动。 ④过程跟踪1.0阶段次要关注解决有效性 2.0阶段关注>0.9s的治理,进行历史债的清理 P0级SQL的解决跟进: ...

September 19, 2023 · 1 min · jiezi

关于sql:稳定性建设框架-京东物流技术团队

一、为什么要做稳定性建设1、从熵增定律引出稳定性建设的必要性物理学上,用“熵”来形容一个体系的凌乱水平。卡尔·弗里德曼提出熵增定律,他认为在一个关闭的零碎内,如果没有外力的作用,所有物质都会从有序状态向无序状态倒退。 如果咱们不心愿零碎变凌乱,有什么方法呢?答案是反抗熵增定律,反抗熵增定律的办法是借助外力,让零碎从凌乱回归有序。举个例子: 下图中,咱们应用“熵”值来掂量“骰子零碎”的凌乱水平,1(最大值)示意“最凌乱”,意味着咱们不能管制“投骰子”的后果,每次投骰子的后果会在1~6随机呈现,零碎体现不稳固;1/6(最小值)示意“最有序”,意味着咱们可能管制“投骰子”的后果,零碎体现稳固,比方咱们心愿每次投筛子的后果都是6,咱们能够引入舞弊伎俩(即借助外力),让每次投骰子后果都是6。 熵增定律同样适宜软件系统,一个软件系统刚公布时是有序的,熵值趋于1,随着一直迭代,缓缓变成凌乱的、软弱的,从而导致线上问题频发,熵值趋于0,咱们须要借助外力,即稳定性治理伎俩,进步零碎熵值,让零碎复原稳固。 2、稳定性建设的意义如下图剖析,零碎不稳固会产生真金白银的损失,因而,稳定性建设的意义是:不是让业务多挣钱,而是让业务不丢钱! 3、稳定性掂量公式① 公式 通过如下公式掂量零碎稳定性:Availability = MTTF / (MTTF + MTTR) ②公式阐明 MTTF (Mean Time To Failure,均匀无故障工夫),指零碎无故障运行的均匀工夫,取所有从零碎开始正 常运行到产生故障之间的时间段的平均值,即: MTTF =T1/ N。 MTTR (Mean Time To Repair,均匀修复工夫),指零碎从产生故障到培修完结之间的时间段的平均值,即: MTTR =(T2+T3)/ N。 ③公式量化 通常是“SLA是几个9”去掂量,对应下表: ④常见问题 问题:SLA应该依照哪个维度去定义?接口、利用、业务? 答:都能够,只有讲清楚是接口SLA,还是利用SLA,还是业务SLA就能够。但留神:提到利用SLA,应该等于外围接口的最差SLA;提到业务SLA应该等于黄金链路的最差SLA。 问题:SLA工夫计算周期应该多少? 答:都能够,次要讲清楚计算周期就能够,个别以年为单位更具代表性。 4、常见误区①不要认为“分布式环境是稳固的” 认为:网络是牢靠的,带宽是有限的,网络的拓扑不会变,延时为0,传输开销为0 理论:网络会抖动,带宽有下限,存在down机导致的拓扑变动,存在响应超时的概率,等等。 ②不要有“确定性思维”,要有“不确定思维” 认为:恪守教训法令,if x then y。举例:我见过天鹅是红色的,所以世界上所有天鹅都是红色的;这个零碎始终运行良好,所以将来也不会有问题。 应该:世界是不确定的,if x then maybe y。举例:天鹅还有彩色的。 ③不要“甩锅”,要有“主人翁精力” 认为:故障是因为他们零碎挂了,咱们只须要打电话告诉一下,缓缓等着复原就行。 应该:提前思考依赖系统故障了,咱们如何让咱们用户尽可能的失常运行;故障呈现了,独特想方法解决问题。 二、业界现状1、技术现状互联网的倒退,带来越来越大的流量,为了撑持越来越大的流量,架构也始终在演进:单体利用架构 -> 垂直利用架构 -> 分布式架构 -\> SOA架构 -> 微服务架构 -> 服务网格。以后风行的微服务架构中,在利用层面、基建层面上都会有一些保障稳定性的机制: ...

September 1, 2023 · 1 min · jiezi

关于sql:窗口函数大揭秘轻松计算数据累计占比玩转数据分析的绝佳利器

上一篇文章《如何用窗口函数实现排名计算》中小编为大家介绍了窗口函数在排名计算场景中的利用,但实际上窗口函数除了能够进行单行计算,还能够在每行上关上一个指定大小的计算窗口,这个计算窗口能够由SQL中的语句具体指定,大到整个分区作用域,小到以后行指定的某个偏移行(比方 以后行的上一行、下一行,整个计算窗口被称作 frame)。明天小编就为大家介绍窗口函数在累计剖析场景中的利用。 须要留神的是,如果您的数据库版本低于以下版本,将无奈应用文章中应用到的窗口函数。 1.Mysql (\>=8.0) 2. PostgreSQL(\>=11) 3. SQL Server(\>=2012) 4. Oracle(\>=8i) 5. SQLite(\>=3.28.0) 需要背景和上一篇文章一样,为了让大家更好的了解,我将以工厂的耗材损耗数据作为查问条件背景:假如当初有某个工厂刚刚实现了一次耗材的加工,在加工的过程中记录了耗材分类,每日的记录时间、每日的耗材耗损数和当月的月初耗材供给量,如下表所示: 当初这家公司的老板想看一下: 1. 各个耗材的每日累计损耗量。 2. 各个耗材的当月每日余量。 3. 各个耗材的每月累计耗费占比。 查问各个耗材的每日累计损耗量执行如下的SQL语句。 select cate,record_date,init_value,SUM(cost) over(partition by cate,MONTH(record_date) order by record_date ) as cm_costfrom material_data md; 能够看到,通过上述 SQL 查问就曾经失去了每个分类每月的每日累计耗损量。这里为大家解释下SQL中的重点局部: SUM(cost) over(partition by cate,MONTH(record_date) order by record_date );在上一篇文章中咱们介绍过,partition by 指定了计算分区, order by 决定了计算的行程序, 那累计成果又是谁来实现的呢, 这里小编把刚刚的 SQL 略微革新一下就会更清晰。 select cate,record_date,init_value,SUM(cost) over(partition by cate,MONTH(record_date) order by record_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) as cm_costfrom material_data md;革新后的SQL和最开始的查问SQL达成的成果是统一的, 咱们能够看到革新SQL在 order by 后加了一段代码: ...

August 22, 2023 · 2 min · jiezi

关于sql:支持多数据源联合查询的SQL运行引擎sycnanySQL类型注解和类型转换

应用介绍装置和配置应用自定义函数 sycnany-SQL作为SQL运行引擎并不需要提前定义Schema信息,而且很多数据源自身就是无Schema信息的,例如NoSQL数据库MongoDB,所以从数据源查问数据和运行计算默认间接应用输出数据的类型实现查问和计算,此时查问数据或执行计算可能因数据类型不匹配产生查问失败或计算出现异常,因而咱们能够在编写SQL时须要时能够手动增加数据类型注解或应用数据类型转换函数实现数据类型转换,以保障失去正确的查问或计算结果。 例如: MongoDB的ObjectId保留在MySQL中个别转换为字符串应用varchar类型存储,后续在MongoDB和MySQL进行Join关联查问时,就需把MySQL存储的varchar类型转换为MongoDB的ObjectId能力正确的从MongoDB中加载出关联数据。 sycnany-SQL反对两种形式实现数据类型转换: 应用类型注解应用类型转换函数如无非凡阐明,后续示例中咱们假如有如下数据结构: # MySQL中mysql_test库users表构造如下CREATE TABLE `mysql_test`.`users` ( `user_id` bigint(20) NOT NULL, `name` varchar(64), `birthday` varchar(20), `vip_id` varchar(24), PRIMARY KEY (`user_id`) USING BTREE);# MongoDB中mongo_test库vips汇合有如下数据[{ "_id": ObjectId("640a9786bb450457c544f759"), "vip_name" : "超级VIP", "create_time" : ISODate("2023-03-10T02:35:50.298Z")}]类型注解应用在查问字段上增加该字段的类型注解信息,从数据源加载数据后会主动转换为该类型再参加后续查问或计算。 应用语法: `字段名[类型]` 例如: # 编写Join查问SQLselect a.`user_id`, a.`name`, a.`birthday[date]`, b.`_id[text]` as vip_id, b.`vip_name` from `mysql_test`.`users` a left join `mongo_test`.`vips` b on a.`vip_id[objectid]`=b.`_id`;在该SQL中咱们为users表的birthday字段增加了date类型注解,示意该字段需由MySQL表中保留的字符串日期类型转换为date数据类型。 而MySQL表中保留vip_id字段为MongoDB中vips汇合的主键_id字段的值,在users表和vips汇合join查问时,为users表的vip_id字段增加了objectid类型注解,在从MongoDB查问关联数据前转换为ObjectId,从而失常查问读取出关联数据。 从vips汇合加载数据胜利后,咱们又应用类型注解把注解_id字段从ObjectId转换为了字符串类型,以便能输入查问后果。 留神:类型注解只能增加在查问字段中并且字段肯定要用``包裹,不能用于as后alias名称和函数返回值。 反对的注解类型: 整型数字:int、tinyint、smallint、mediumint、bigint浮点型数字:float、double字符串:str、tinytext、mediumtext、text、char、varchar、nchar字节数组:bytes、binary、varbinary、blob布尔型:bool、booleanDecimal:decimalBSON ObjectId: objectidUUID:uuid日期工夫:datetime、timestamp日期:date工夫:time数组:array汇合:setHashMap: map类型转换函数应用类型注解只能增加在查问字段上,但类型转换函数可在查问字段或函数返回值中应用,应用更不便,同时针对内置函数不能满足类型转换的需要,也能够自行编写加载自定义函数来实现类型转换,以便正确的实现查问或计算。 例如: # 编写Join查问SQLselect a.`user_id`, a.`name`, convert_date(a.`birthday`) as birthday, convert_string(b.`_id`) as vip_id, b.`vip_name` from `mysql_test`.`users` a left join `mongo_test`.`vips` b on convert_objectid(a.`vip_id`)=b.`_id`;应用类型转换函数也可实现雷同操作。 ...

August 18, 2023 · 1 min · jiezi

关于sql:玖章算术与百度智能云达成合作NineData-SQL-开发成为百度智能云主推的数据库工具

2023 年 6 月 19 日,玖章算术(浙江)科技有限公司旗下的多云数据管理平台 NineData 正式入驻百度智能云市场,单方的深度技术交融将为客户提供智能高效、安全可靠的数据库开发服务。通过适配百度智能云数据库,NineData 为开发者、企业提供了反对关系型数据库、NoSQL 数据库的一站式数据库开发平台。 NineData 成为百度智能云首推的数据库工具「NineData SQL 开发」作为百度智能云主推的数据库开发工具,深度交融和适配百度智能云数据库产品系列(包含云原生数据库 GaiaDB、云数据库 RDS、云数据库 Redis、云数据库 MongoDB 等),使其成为了百度智能云数据库一站式治理的完满抉择。 自创建以来,NineData 始终十分关注开发者服务体验,此次上线的 SQL 开发个人版围绕“数据库开发”,通过内置自研语法解析器、AI 生成等技术,依靠百度智能云弱小的技术加持,为开发者带来极致的开发体验。 此外,NineData SQL 还内置了 Al 技术,同时依靠百度智能云弱小的技术加持,独特帮助企业进步其数据治理能力。通过与百度智能云的单干,NineData 相辅相成,助力企业数字化转型降级,使得用户体验一直优化,进一步晋升数据资产价值。 百度智能云数据库产品矩阵提供关系型数据库(RDS)、NoSQL 数据库、云原生数据库 GaiaDB 和 GaiaDB 分布式版,以及丰盛的生态工具。除了公共云服务,百度智能云是可能提供线上线下同一套架构的数据库服务的供应商,能提供公有云的全套数据库服务,包含企业版,麻利版,软件版,满足不同规模和状态的需要。 于淼 百度智能云数据库与存储团队的负责人示意:咱们非常荣幸与 NineData 单干,借助于百度智能云弱小、稳固、平安的平台能力,以及 NineData 在数据库畛域的技术积淀,独特打造面向开发者和企业的数据库开发平台,继续为客户提供极具竞争力的解决方案,帮忙不同行业的客户更好地实现业务指标。 叶正盛 玖章算术创始人 &CEO 示意:“非常高兴可能与百度智能云开展深度单干,独特为企业用户提供更为平安、稳固、高效的云原生智能数据管理平台。同时对百度智能云的反对和认可表示感谢,咱们将一直摸索新技术、打造新产品,为用户提供更好的数据库解决方案。”

June 29, 2023 · 1 min · jiezi

关于sql:eKuiper-源码解读从一条-SQL-到流处理任务的旅程

概述LF Edge eKuiper 是 Golang 实现的轻量级物联网边缘剖析、流式解决开源软件,能够运行在各类资源受限的边缘设施上。eKuiper 的次要指标是在边缘端提供一个流媒体软件框架。其规定引擎容许用户提供基于SQL 或基于图形(相似于 Node-RED)的规定,在几分钟内创立物联网边缘剖析利用。 本文中,咱们将以源码为脉络,论述一条 SQL 从被 eKuiper 接管后,是如何从一条文本变成一个可执行的处理过程。通过本文,你能够理解到以下内容: 一个 SQL 计算引擎根本的解决流程eKuiper 在每个解决流程中的具体代码节点残缺内容请点击下方链接查看: https://developer.aliyun.com/article/1213227?utm_content=g_10... 版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

June 26, 2023 · 1 min · jiezi

关于sql:实践教程之采集PolarDBX-SQL日志到ElasticSearch

前置筹备假如曾经依据前一讲内容实现了PolarDB-X的搭建部署,应用PolarDB-X Operator装置PolarDB-X,并且能够胜利链接上PolarDB-X数据库。 装置PolarDB-X LogCollector本步骤将领导您装置PolarDB-X LogCollector组件,并将PolarDB-X日志投递到Elastic Search中。1.执行如下命令,创立一个名为polardbx-logcollector的命名空间。 kubectl create namespace polardbx-logcollector2.执行如下命令,装置 PolarDB-X LogCollector。 残缺内容请点击下方链接查看: https://developer.aliyun.com/article/1212457%20?utm_content=g... 版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

June 8, 2023 · 1 min · jiezi

关于sql:如何使用SQL任务计算房间电量消耗的实践案例

1. 需要形容在智能家居行业里产生了各种各样场景的数字解决方案,有解决方案商应用物联网平台的能力搭建各种数据分析利用,比方房间电量耗费统计,在公寓中部署了智能电表,每隔15min上传一次累计电量,须要依据设施上传值计算用电量。联合下表了解。 2. 实现计划2.1 创立场景创立电表模仿产品,电表产品只有一个只读属性Fwh,示意累计电量。参考图1。创立两个电表设施:room1 和 room2。参考图2。 残缺内容请点击下方链接查看: https://developer.aliyun.com/article/1209176%20?utm_content=g... 版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

June 6, 2023 · 1 min · jiezi

关于sql:SQL-审核-SQLE-23050-来啦

SQL 审核工具 SQLE 2.2305.0 于明天公布。以下对新版本的 Release Notes 进行具体解读。文章次要分为以下三局部内容: 一、SQLE 我的项目介绍二、新版本次要性能介绍三、残缺的 Release 信息一、SQLE 我的项目介绍爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者,反对多场景审核,反对标准化上线流程,原生反对 MySQL 审核且数据库类型可扩大的 SQL 审核工具。 SQLE 获取 类型        地址                                                                                              版本库        https://github.com/actiontech/sqle                                                              文档        https://actiontech.github.io/sqle-docs-cn/                                                      公布信息      https://github.com/actiontech/sqle/releases                                                      数据审核插件开发文档https://actiontech.github.io/sqle-docs-cn/3.modules/3.7_audit...社区版在线体验    http://demo.sqle.actionsky.com 超级管理员:admin    明码:admin                                          企业版在线体验    http://demo.sqle.actionsky.com:8889 用户:admin    明码:admin                                           ...

June 2, 2023 · 3 min · jiezi

关于sql:AnalyticDB-PostgreSQL和AnalyticDB-MySQL该如何选择

AnalyticDB PostgreSQL 和 AnalyticDB MySQL 都是阿里云提供的云原生分布式云数据仓库产品。它们都具备高牢靠、高性能、高平安、易扩大等劣势,实用于大数据分析和深度开掘利用。然而,两种产品之间还是有一些区别的。 数据库引擎和语法:AnalyticDB PostgreSQL 是基于 PostgreSQL 数据库引擎的,而 AnalyticDB MySQL 是基于 MySQL 数据库引擎的。它们的语法和个性也不完全相同。因而,如果您曾经相熟了 PostgreSQL 或 MySQL,能够依据本人的理论状况抉择更加相熟和适宜的数据库引擎。数据类型和存储格局:AnalyticDB MySQL 反对 JSON 和 bitmap 等高级数据类型和存储格局,可用于剖析海量数据和简单数据结构。而 AnalyticDB PostgreSQL 反对 JSONB 数据类型和反对列式存储和行式存储的混合存储格局。因而,如果您的数据结构比较复杂,倡议抉择 AnalyticDB MySQL,如果您的数据须要进行高效的聚合和剖析,则倡议抉择 AnalyticDB PostgreSQL。残缺内容请点击下方链接查看: https://developer.aliyun.com/ask/506879?utm_content=g_1000373107 版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

June 1, 2023 · 1 min · jiezi

关于sql:Hive-SQL-on-Flink-构建流批一体引擎

一、构建流批一体引擎的挑战 目前,流和批依然是绝对割裂的。尽管咱们在应用层对立了,但从接入层开始,不同的引擎仍旧有不同的接入层、API 层、执行层。咱们认为,对立的流批一体引擎应该是从接入层开始应用 SQL Gateway 作为接入层。在 API 层应用 Flink SQL 作为编写作业的次要语言,在执行层替换成对立的 Runtime。 残缺内容请点击下方链接查看: https://developer.aliyun.com/article/1205921?utm_content=g_10... 版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

May 30, 2023 · 1 min · jiezi

关于sql:请问flink-sql-写oss有个报错该怎么办

这个谬误提醒的意思是不能间接将状态同步到像S3这样的零碎中,须要应用persist()办法创立一个长久化的可复原的中间状态点。这个办法的作用是将以后的状态保留在指定的门路中,以便当前能够从该地位复原状态。这个办法通常在长时间运行的工作或分布式计算中应用,以防止因故障或其余起因中断导致状态失落。 残缺内容请点击下方链接查看: https://developer.aliyun.com/ask/489309?utm_content=g_1000371337 版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

May 8, 2023 · 1 min · jiezi

关于sql:从零到跑通TPCH如何快速实现查询计划

作者:龙冉 MO研发工程师 导读MatrixOne在0.4之前的版本中,计算引擎的整体架构是基于因子化的计划实现。然而因子化的计划不足通用性,例如无奈反对非等值条件join,因而在0.5版本开始的时候,咱们正式决定放弃因子化计划,从零开始实现一个新的计算引擎。笔者过后作为新的查问打算的次要开发者之一,亲身经历了从毫无查问打算开发教训到三个月跑通1G数据TPC-H。本文在此分享一些相干的教训。 Part 1 整体架构一个SQL数据库的计算引擎执行过程通常分为以下几个步骤: Parser :对输出的SQL语句做词法剖析生成形象语法树(AST)。Binder :联合元信息,将表达式中的表名、列名、函数名等等,映射到数据库外部理论的对象。Planner :依据绑定之后的语法树生成查问打算树。Optimizer :依据优化规定和统计信息,重写等价的查问打算。Executor :依据查问打算,生成具体的算子执行树并放到物理机器上执行。生成查问打算的过程包含了Binder/Planner/Optimizer这3个局部的工作。 Part 2 BinderParser的工作是对SQL语句字符串做词法剖析,找出关键字,解析常量类型。而对非关键字十分量的字符串,Parser并不知道它们的具体含意。Binder作为生成查问打算的第一步,所做的就是把这些非关键字的字符串对应到数据库外部的理论对象。这个步骤的要害是正确性和健壮性,一旦实现就根本不须要后续更改。 从实现角度而言,Binder局部的难点大略有: 在SQL语句的不同子句中,绑定的行为也不同。例如,WHERE子句中不能呈现聚合函数,LIMIT子句中只能呈现整数常量。须要思考上下文信息。例如,一旦呈现了GROUP BY子句,SELECT和ORDER BY子句中就只能呈现聚合函数或者曾经在GROUP BY子句中呈现过的列名。针对这两个问题,咱们须要在不同的中央应用不同的Binder类,以辨别不同的行为。然而这些不同的Binder类,在绝大多数场合的行为还是雷同的,只在特定场合有所不同,例如对聚合函数的解决。最正当的形式,就是实现一个具备大部分性能的基类,其余类都派生自它且只需实现大量非凡行为即可。有人兴许会纳闷,MatrixOne是Go语言实现的,而Go语言自身没有类继承的概念。其实Go语言也齐全能够模拟出类继承和函数重载的成果。 以代码阐明: type Binder interface { BindExpr(tree.Expr, int32, bool) (*plan.Expr, error) BindColRef(*tree.UnresolvedName, int32, bool) (*plan.Expr, error) BindAggFunc(string, *tree.FuncExpr, int32, bool) (*plan.Expr, error) BindWinFunc(string, *tree.FuncExpr, int32, bool) (*plan.Expr, error) BindSubquery(*tree.Subquery, bool) (*plan.Expr, error) GetContext() context.Context}type baseBinder struct { ...}type WhereBinder struct { baseBinder}type GroupBinder struct { baseBinder}type HavingBinder struct { baseBinder insideAgg bool}var _ Binder = (*WhereBinder)(nil)var _ Binder = (*GroupBinder)(nil)var _ Binder = (*HavingBinder)(nil)...对于“聚合函数在大多数子句中都不容许呈现”这样的行为,咱们能够把“基类”baseBinder的BindAggFunc实现为间接报错,而后WhereBinder和GroupBinder不实现BindAggFunc办法,于是在调用whereBinder.BindAggFunc的时候,理论调用的是它的第一个匿名成员,也就是baseBinder的同名办法。而对于容许聚合函数的HAVING子句,咱们独自实现havingBinder.BindAggFunc办法。这样通过充分利用Go语言的个性,咱们也实现了相似C++的派生类若不实现某办法就调用基类办法的行为。 ...

April 21, 2023 · 2 min · jiezi

关于sql:HHDEBC与其他主流软件SQL格式化功能的对比

SQL格式化(即SQL丑化)是一项十分重要的性能。只有清晰的构造,能力让您更好的优化数据库查问或写入。HHDBCS的SQL格式化性能有着独特的解决形式,可使用于对简单SQL语句的剖析或者是程序代码优化上。上面便以HHDBCS与两个支流软件 Navicat、DBeaver的比照为例,简略介绍一下HHDBCS的独到之处。 1 便捷性1.1 HHDBCS只需关上程序,在主界面上便可操作; 1.2 NavicatNavicat为关上软件后,点击新建查问; 1.3 DBeaverDBeaver为关上软件后,在主界面抉择SQL编辑器。 2 实用性SQL丑化的外围性能,便是使用户可能直观的查看SQL的具体内容。因而,易读性为首要目标。一个容易浏览的SQL,至多首尾关键词该当对齐。上面顺次看看这三款软件在实用性上的体现。 2.1 HHDBCS 能够看到,整体浏览非常直观。 排列参差,段落清晰,语句重点明确。用户能够依据本身习惯调节。 2.2 Navicat 笔者认为,Navicat的段落排列不是特地正当,一眼看上去不是高深莫测。 2.3 DBeaver 集体认为DBeaver的排版略优于Navicat,然而仍有有余;比方没有行数显示;局部段落排列呈现逻辑谬误,强迫症必定须要本人手动调整。 3 总结以实例所述,从便捷性来看,HHDBCS更加优良,另外2款软件并驾齐驱;从实用性来说,亦是HHDBCS胜出。当然,各个软件都有本身的长处,只不过HHDBCS作为国产软件,更合乎国人习惯,也更加贴合国人的工作需要。以此文抛砖引玉,欢送大家深度开掘不便大家的好软件/好性能。

March 30, 2023 · 1 min · jiezi

关于sql:一文带你搞懂如何优化慢SQL

作者:京东科技 宋慧超 一、前言 最近通过SGM监控发现有两个SQL的执行工夫占该工作总执行工夫的90%,通过对该SQL进行剖析和优化的过程中,又从新对SQL语句的执行程序和SQL语句的执行打算进行了系统性的学习,整顿的相干学习和总结如下; 二、SQL语句执行程序 要想优化慢SQL语句首先须要理解SQL语句的执行程序,SQL语句中的各关键词执行程序如下: ◦首先执行from、join 来确定表之间的连贯关系,失去初步的数据。 ◦而后利用where关键字前面的条件对符合条件的语句进行筛选。 from&join&where:用于确定要查问的表的范畴,波及到哪些表。 抉择一张表,而后用join连贯: from table1 join table2 on table1.id=table2.id抉择多张表,用where做关联条件: from table1,table2 where table1.id=table2.id最终会失去满足关联条件的两张表的数据,不加关联条件会呈现笛卡尔积。 ◦而后利用group by对数据进行分组。 依照SQL语句中的分组条件对数据进行分组,然而不会筛选数据。 上面用依照id的奇偶进行分组: ◦而后分组后的数据别离执行having中的一般筛选或者聚合函数筛选。 having&where having中能够是一般条件的筛选,也能是聚合函数,而where中只能是一般函数;个别状况下,有having能够不写where,把where的筛选放在having里,SQL语句看上去更丝滑。 应用where再group by : 先把不满足where条件的数据删除,再去分组。 应用group by 在having:先分组再删除不满足having条件的数据。(该两种简直没有区别) 比方举例如下:100/2=50,此时咱们把100拆分(10+10+10+10+10…)/2=5+5+5+…+5=50,只有筛选条件没变,即使是分组了也得满足筛选条件,所以where后group by 和group by再having是不影响后果的! 不同的是,having语法反对聚合函数,其实having的意思就是针对每组的条件进行筛选。咱们之前看到了一般的筛选条件是不影响的,然而having还反对聚合函数,这是where无奈实现的。 以后的数据分组状况 执行having的筛选条件,能够应用聚合函数。筛选掉工资小于各组平均工资的having salary<avg(salary): 而后再依据咱们要的数据进行select,一般字段查问或者聚合函数查问,如果是聚合函数,select的查问后果会减少一条字段。 分组完结之后,咱们再执行select语句,因为聚合函数是依赖于分组的,聚合函数会独自新增一个查问进去的字段,这里咱们两个id反复了,咱们就保留一个id,反复字段名须要指向来自哪张表,否则会呈现唯一性问题。最初依照用户名去重。 select employee.id,distinct name,salary, avg(salary) 将各组having之后的数据再合并数据。 ◦而后将查问到的数据后果利用distinct关键字去重。 ◦而后合并各个分组的查问后果,依照order by的条件进行排序。 比方这里依照id排序。如果此时有limit那么查问到相应的咱们须要的记录数时,就不持续往下查了。 ◦最初应用limit做分页。 记住limit是最初查问的,为什么呢?如果咱们要查问薪资最低的三个数据,如果在排序之前就截取到3个数据。实际上查问进去的不是最低的三个数据而是前三个数据了,记住这一点。 如果SQL语句执行程序是先做limit再执行order by,执行后果为3500,5500,7000了(正确SQL执行的最低工资的是3500,5500,5500)。 SQL查问时须要遵循的两个程序: 1、关键字的程序是不能颠倒的。 SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT2、select语句的执行程序(在MySQL和Oracle中,select执行程序基本相同)。 ...

March 29, 2023 · 2 min · jiezi

关于sql:记事本一个SQL语句转化为Laravel-migration-文件

要转化的语句: DB::update("create table orders_202303 like orders");转化过程创立一个新的 migration 文件。在命令行中运行以下命令来创立一个新的 migration 文件php artisan make:migration create_orders_202303_table --create=orders_202303这将在 database/migrations 目录中创立一个新的 migration 文件,文件名为 YYYY_MM_DD_HHmmss_create_orders_202303_table.php,其中 YYYY_MM_DD_HHmmss 是以后工夫戳。 在 migration 文件的 up 办法中编写创立表的代码。应用 Laravel 的 Schema 构建器来创立表。在这种状况下,能够编写以下代码:public function up(){ Schema::create('orders_202303', function (Blueprint $table) { $table->id(); // 在这里增加表的其余列定义 $table->timestamps(); });}这将创立一个名为 orders_202303 的新表,该表与 orders 表具备雷同的构造。 在 migration 文件的 down 办法中编写删除表的代码。这将容许在须要时回滚迁徙。在这种状况下,能够编写以下代码:public function down(){ Schema::dropIfExists('orders_202303');}这将删除名为 orders_202303 的表。 实现以上步骤后,在命令行中运行以下命令来运行迁徙: php artisan migrate这将执行新创建的 migration 文件,并在数据库中创立名为 orders_202303 的新表。

March 14, 2023 · 1 min · jiezi

关于sql:如何写出高性能的-SQL-Join-join-实现和最佳实践

Join是数据库和数仓中最罕用的一个感怀了。在关系型数据库的数据模型中,为了防止数据冗余存储,不同的数据往往放在不同的表中,分为事实表和维度表,这样做能够极大的节俭数据存储空间。然而在剖析数据时,则须要通过join把多表关联起来剖析。能够说,做数据分析,绕不开的一个话题就是join。而join有多种类型,在应用上有不同的应用形式,而在实现上也有不同的实现形式。不同的应用形式和实现形式,则会造成性能上的天差地别。本文尝试由表及里梳理join的应用和外部实现形式,通过理解外部实现,理解如何写出一个高性能的join SQL。 join类型 SQL Join从大的分类上,分为Inner Join,Outer Join,Self Join和Cross Join。 Inner join内连贯Inner Join是最罕用的一种连贯形式。左右表通过谓词连贯。只有既在左表呈现的行、又在右表呈现的行才满足条件,也就是左右表的交加。语法是 select A.x, B.y from A join B on A.x = B.y 内连贯不辨别左右表的程序,A inner join B 等同于 B join A。 Inner Join又分为 Equal join和Non Equal Join(Theta Join)。 区别在于,Equal join是在连贯条件中,左表的某个字段等与右表的某个字段。而Theta Join的连贯条件,不是一个相等条件,有可能是大于或者小于条件。 Outer joinOuter Join包含Left Join,Right Join, Full Join。各个join的不同点参考上图。 Left Join返回左表的全副行,不管这些行是否和右表匹配。这些数据中,又分为两类,别离是匹配右表的数据和不匹配右表的数据。对于左右表交加的局部,即匹配右表的数据,别离输入左右表的列。对于不在交集中的局部,即不匹配右表的数据,输入左表的列值,右表的列值为null。left join不能够左右调换。 right join和left join对称,返回右表的全副行,不管这些数据行是否和左表匹配。这些数据中,又分为两类,别离是匹配左表的数据和不匹配左表的数据。对于左右表有交加的局部,即匹配左表的数据,输入左右表的列。对于不在交集中的行,失常输入右表的列,而左表的列卫null。right join也是不能够左右调换的。但left join和right join是左右对称的。即一个left join能够转写成right join。 A left join B 等同于A right join B。 full join是left join和right join的综合,返回的是左右表的并集。在后果中蕴含三局部数据,别离是左右表的交加(同时匹配左表和右表的数据)、只匹配左表的数据、只匹配右表的数据。对于左右表的交加数据,输入左右表的列值。对于只匹配左表的数据,输入左表的列,右表的列为null。对于只匹配右表的数据,输入右表的列,左表的列为null。 Inner Join和Outer join的区别 ...

February 16, 2023 · 1 min · jiezi

关于sql:Hive-在工作中的调优总结

总结了一下在以往工作中,对于Hive SQL调优的一些理论利用,是日常积攒的一些优化技巧,如有出入,欢送在评论区留言探讨~ EXPLAIN 查看执行打算建表优化分区分区表基本操作,partitioned二级分区动静分区分桶分桶表基本操作,clustered分桶表次要是抽样查问,找出具备代表性的后果抉择适合的文件格式和压缩格局LZO,拉兹罗Snappy压缩速度快,压缩比高HiveSQL语法优化单表查问优化列裁剪和分区裁剪,全表和全列扫描效率都很差,生产环境相对不要应用SELECT *,所谓列裁剪就是在查问时只读取须要的列,分区裁剪就是只读取须要的分区 与列裁剪优化相干的配置项是hive.optimize.cp,默认是true与分区裁剪优化相干的则是hive.optimize.pruner,默认是true在HiveSQL解析阶段对应的则是ColumnPruner逻辑优化器Group By 配置调整,map阶段会把同一个key发给一个reduce,当一个key过大时就歪斜了,能够开启map端预聚合,能够无效缩小shuffle数据量并 # 是否在map端聚合,默认为trueset hive.map.aggr = true;# 在map端聚合的条数set hive.groupby.mapaggr.checkintervel = 100000;# 在数据歪斜的时候进行平衡负载(默认是false),开启后会有 两个`mr工作`。# 当选项设定为true时,第一个 `mr工作` 会将map输入的后果随机调配到`reduce`,# 每个`reduce`会随机散布到`reduce`上,这样的处理结果是会使雷同的`group by key`分到不同的`reduce`上。# 第二个 `mr工作` 再依据预处理的后果按`group by key`分到`reduce`上,# 保障雷同`group by key`的数据分到同一个`reduce`上。# *切记!!!* # 这样能解决数据歪斜,然而不能让运行速度更快 # 在数据量小的时候,开始数据歪斜负载平衡可能反而会导致工夫变长 # 配置项毕竟是死的,单纯靠它有时不能基本上解决问题# 因而还是倡议自行理解数据歪斜的细节,并优化查问语句 set hive.groupby.skewindata = true;Vectorization,矢量计算技术,通过设置批处理的增量大小为1024行单次来达到比单行单次更好的效率 # 开启矢量计算 set hive.vectorized.execution.enabled = true;# 在reduce阶段开始矢量计算 set hive.vectorized.execution.reduce.enabled = true;多重模式,一次读取屡次插入,同一张表的插入操作优化成先from table再insertin/exists或者join用left semi join代替(为什么代替扩大一下~)多表查问优化CBO优化,老本优化器,代价最小的执行打算就是最好的执行打算 join的时候表的程序关系,后面的表都会被加载到内存中,前面的表进行磁盘扫描通过hive.cbo.enable,主动优化hivesql中多个join的执行程序能够通过查问一下参数,这些个别都是true,无需批改 set hive.cbo.enable = true;set hive.compute.query.using.stats = true;set hive.stats.fetch.column.stats = true;set hive.stats.fetch.partition.stats = true;谓词下推(十分要害的一个优化),将sql语句中的where谓词逻辑都尽可能提前执行,缩小上游解决的数据量, 在关系型数据库如MySQL中,也有谓词下推(Predicate Pushdown,PPD)的概念, 它就是将sql语句中的where谓词逻辑都尽可能提前执行,缩小上游解决的数据量 ...

February 13, 2023 · 3 min · jiezi

关于sql:HiveSQL-工作实战总结

记录一些工作中有意思的统计指标,当然做过一些简化不便大家浏览,后续会不断更新,欢送关注追踪~ 问题类型间断问题 两种思路第一种:日期减去一列数字得出日期雷同,次要是通过row_number窗口函数第二种:后一个日期减去前一个日期差值相等,用的较少,能够用lag/lead窗口函数解决分组问题 次要应用lag(col,1,0)分组将每行移到下一行,再按既定规定分组排序即可前面抽空试一下距离间断问题,比方每断一天也算间断 两种思路:第一种:间断应用两次间断问题的求法即可,差了几次能够间断row_number几次,这种有限套娃不举荐应用第二种:间断差值小于要求数即可,比方断一天也可,只有每行距离小于2天即可打折日期穿插问题,两段活动期反复日期去除同时在线问题一、统计每个设施的累计告警次数原始数据格式deviceIdalarmDatealarmCount设施ID告警日期告警次数u012022/1/85u022022/1/87u032022/1/83u012022/1/122u022022/1/121u012022/1/149.........统计之后格局设施ID告警月份告警次数小计告警次数累计u012022-021111u022022-031223............工作思路先依据设施ID和告警日期分组按月份统计能够用substr函数或者日期格式化函数再统计即可得出小计告警次数接着应用聚合窗口函数计算累计告警次数工作语句第一种计划,应用substr截取字符串函数 SELECT *, SUM(sumPart) OVER (PARTITION BY deviceId ORDER BY alarmMonth) AS sumAllFROM(SELECT deviceId, SUBSTR(alarmDate,1,7) AS alarmMonth, SUM(alarmCount) AS sumPartFROM test_00GROUP BY deviceId, alarmMonth) t;第二种计划,应用日期格式化函数,应用date_format函数的字符串必须满足yyyy-MM-dd格局,所以必须先用regexp_replace替换/为- SELECT *, SUM(sumPart) OVER (PARTITION BY deviceId ORDER BY alarmMonth) AS sumAllFROM(SELECT deviceId, DATE_FORMAT(REGEXP_REPLACE(alarmDate,'/','-'), 'yyyy-MM') AS alarmMonth, SUM(alarmCount) AS sumPartFROM test_00GROUP BY deviceId, alarmMonth) t;开窗函数中的界线阐明unbounded:无界线preceding:从分区第一行头开始,则为 unbounded N为:绝对以后行向后的偏移量following :与preceding相同,到该分区完结,则为 unbounded N为:绝对以后行向后的偏移量current row:顾名思义,以后行,偏移量为0二、统计环境设备每天的总净化告警次数,并输入每个设施告警次数排名前三的日期原始数据格式deviceIdalarmTime设施ID告警工夫u012022/1/8/08/04/58u022022/1/8/12/05/38u032022/1/8/17/01/12u012022/1/12/12/04/53u022022/1/12/13/45/34u012022/1/14/02/12/51......统计之后格局设施ID告警次数累计u013u022u031......工作思路统计环境设备的总净化告警次数因为有设施可能会有同一时间的告警记录,所以须要按告警工夫去重后再统计如果应用distinct去重,如果表数据过大,且设施ID差异化很大,那么会有性能压力所以应用group by子查问代替mysql中的date_format格式化须要这样写:DATE_FORMAT(alarmTime, '%Y-%c-%d %T') 输入每个设施告警次数排名前三的日期应用窗口函数ROW_NUMBER() OVER()进行分组排序即可,MySQL 替换 ROW_NUMBER() OVER (PARTITION ……) 函数多个子句查问能够应用视图和WITH语句工作语句统计环境设备的总净化告警次数SELECT deviceId, COUNT(alarmTime) AS alarmCount FROM--- http://c.biancheng.net/mysql/date_format.html(SELECT deviceId, DATE_FORMAT(REGEXP_REPLACE(alarmTime,'/','-'), 'yyyy-MM-dd HH:mm:ss') AS alarmTimeFROM test_01GROUP BY deviceId,alarmTimeORDER BY alarmTime) tGROUP BY deviceId;输入每个设施告警次数排名前三的日期SELECT * FROM (SELECT deviceId, alarmDate, alarmCount, ROW_NUMBER() OVER(PARTITION BY deviceId ORDER BY alarmCount DESC) AS alarmRankFROM (SELECT deviceId, alarmDate, COUNT(alarmDate) AS alarmCountFROM(SELECT deviceId, DATE_FORMAT(alarmTime, 'yyyy-MM-dd') AS alarmDate, DATE_FORMAT(alarmTime, 'yyyy-MM-dd HH:mm:ss') AS alarmTimeFROM test_01GROUP BY deviceId,alarmTimeORDER BY deviceId,alarmTime) t1GROUP BY deviceId,alarmDate) t2) t3WHERE alarmRank<=3;-- 应用WITH语句优化一下WITH t1 AS (SELECT deviceId, DATE_FORMAT(alarmTime, 'yyyy-MM-dd') AS alarmDate, DATE_FORMAT(alarmTime, 'yyyy-MM-dd HH:mm:ss') AS alarmTimeFROM test_01GROUP BY deviceId,alarmTimeORDER BY deviceId,alarmTime),t2 AS ( SELECT deviceId, alarmDate, COUNT(alarmDate) AS alarmCountFROM t1GROUP BY deviceId,alarmDate),t3 AS (SELECT deviceId, alarmDate, alarmCount, ROW_NUMBER() OVER(PARTITION BY deviceId ORDER BY alarmCount DESC) AS alarmRankFROM t2)SELECT * FROM t3 WHERE alarmRank<=3;COUNT(1)和COUNT(*)的区别从执行后果来说 ...

February 13, 2023 · 4 min · jiezi

关于sql:Calcite-SQL-解析语法扩展元数据验证原理与实战下

上一篇文章咱们介绍了 Calcite SQL 解析的原理以及如何扩大 SQL 语法,本篇咱们将进入 SQL 执行的下一个阶段:元数据验证。 二、Calcite 元数据验证SQL 胜利解析为形象语法树后,接下来须要对整条 SQL 的语义和元数据进行验证,判断 SQL 是否满足下一步计算的要求。 判断一句 SQL 是否正确至多蕴含以下几点: 查问的库表列是否存在。SQL 的语义是否正确。验证操作符,判断应用的操作符或者函数是否存在,并被正确地应用,例如数据类型、参数个数等是否正确。咱们能够用以下 SQL 为例来探索 Sql 验证的过程。 SELECT col1, avg(col2)FROM t1, (SELECT col3 FROM t2) AS s1WHERE col4 > col5GROUP BY col1;在 Calcite 中验证 SQL 是否非法应用 SqlValidator,它的初始化形式如下: protected SqlValidatorImpl( SqlOperatorTable opTab, SqlValidatorCatalogReader catalogReader, RelDataTypeFactory typeFactory, Config config)SqlOperatorTable 提供 SQL 验证所须要的所有操作符,函数、'>'、'<' 等都属于操作符;SqlValidatorCatalogReader 提供验证须要的元数据信息,包含 Catalog、Schema等;RelDataTypeFactory 提供验证过程中字段类型的互相转换、例如函数返回值类型和精度信息等。Config 能够自定义一些配置,例如是否开启类型强制转换、是否开启 SQL 重写等等。 2.1 验证库表列是否存在库和表的验证比拟好了解,因为大多数的 OLAP 引擎有多个数据源和数据空间,并且反对联邦查问,所以 SQL 中库表往往都是全名称模式存在(或者应用 use 语句指定),形如 catalog.schema.table(例如 hive.tpcds.store),这样一来,咱们就能确定惟一一张表的地位。此外,在 Calcite 验证器中有两个重要的形象,作用域(Scope)和命名空间(Namespace)。 ...

February 10, 2023 · 3 min · jiezi

关于sql:使用-NineData-高效编写-SQL

SQL 是 Structured Query Language 的缩写,中文翻译为“结构化查询语言”。它是关系型数据库的规范语言,所有的关系型数据库管理系统(RDBMS),比方 MySQL、Oracle、SQL Server、Postgres 等,都将 SQL 作为其规范解决语言。 SQL次要利用在以下场景:反对用户创立、批改和删除数据库、表、数据(记录);反对用户拜访关系型数据库系统中的数据;反对用户在数据库中创立视图、存储过程、函数、触发器、事件;反对用户设置对数据库、表、存储过程和视图等的权限;作为与数据库交互如此重要的 SQL,如何精确、高效的编写正确的 SQL 语句得以运行,很大水平上将与研发效率间接挂钩。NineData 在 SQL 窗口中实现了多个性能,帮忙大家更便捷的书写SQL与数据库进行交互,上面咱们一起来看看具体都有哪些性能。 1. SQL智能提醒NineData SQL 智能提醒是在数据管理软件中一个必须存在的“硬配置”,提醒关键字、函数、库表字段名等对象信息,在 SQL 书写时帮忙是十分大的。NineData 的 SQL 窗口天然也不会短少这个重要性能,在惯例智能提醒的根底上,咱们还减少了 SQL 模版(语义构造体),补齐表名、where 条件即可开启查问。 这里特地提醒,NineData SQL 智能提醒不只针对 MySQL 进行了笼罩,对于 SQLServer、ClickHouse 咱们也都进行了对应的反对。 在NineData SQL 窗口抉择关键词,右键-帮忙,咱们也提供残缺语法定义可供使用参考。 特地值得一提的是,此处如果光标是在表名对象上右键的帮忙,则可疾速查看表构造定义语句。 2. 罕用SQL保留与应用对于常常须要应用到的 SQL,用个小本本记录,须要的时候再找进去?太麻烦啦,NineData “我的 SQL”帮你轻松解决这个问题,只有您登录 NineData 用的同一个账号(组织用户须要在同一个组织内可见)就能够看到保留过的所有 SQL 语句,不论是换浏览器,还是换电脑通通不影响。 保留 SQL: 一键带入 SQL 窗口所有的 SQL 内容,您只需输出一个名字以便于后续辨认、辨别应用即可保留。 查看 SQL: 您可疾速查看保留过的所有 SQL 脚本,可抉择须要应用的 SQL 语句,点击“插入”即可将残缺的 SQL 内容带入SQL窗口内;也能够点击 SQL 文本或操作中的编辑,进入编辑页面调整 SQL 信息进行保留。 ...

February 7, 2023 · 1 min · jiezi

关于sql:使用-NineData-访问-SQL-Server-数据库

近期,Gartner 正式公布了2022年数据库魔力象限,从魔力象限看第一军团仍旧是 AWS、Microsoft、Oracle、Google 当先。尽管AWS仍旧傲视群雄,然而 Microsoft 以比拟显著的劣势排在第二,也是目前惟一对AWS有挑战的厂商。这其中 Microsoft 的数据库头牌产品 SQL Server 的奉献居功至伟。 SQL Server 介绍SQL Server 是一个关系数据库管理系统。它最后是由 Microsoft、Sybase 和 Ashton-Tate 三家公司共同开发的,于1988 年推出了第一个OS/2版本。在 Windows NT 推出后,Microsoft 与 Sybase 在 SQL Server 的技术开发上,就各奔前程了,Microsoft 将 SQL Server 移植到 Windows NT 零碎上,专一于开发推广 SQL Server 的 Windows NT 版本。以后最新版本是2022版。 应用NineData连贯SQL Server在应用 NineData 拜访 SQL Server 之前,须要在 NineData 创立 SQL Server 数据源。 须要留神的是:接入地区抉择和物理数据源最近的地位,比方下图中数据源物理地址是在杭州的某IDC机房,抉择了阿里云华东1(杭州)。抉择加密传输,则要将“总是信赖服务端证书”选项钩上,否则数据源链接测试会报错。 在填好连贯信息之后,能够点击“连贯测试”性能,验证是否能够失常拜访 SQL Server,如果信息都正确的话,则会提醒上图右上角的“连贯胜利”信息。 在实现数据源配置之后,就能够通过 SQL 窗口性能拜访该数据源了。 导航树查看数据库对象下图左侧为 NineData 展示的 SQL Server 导航对象树,展现了 SQL Server 数据库对象,在表一层NineData还展示了字段名词和类型、索引、触发器等信息。另外,NineData 还展示了用户、角色和schema等信息。开发者罕用的 Navicat、DBeaver 等工具比照(如下图),NineData 对数据库对象的展示和交互是比拟残缺、简洁和粗疏的。 ...

February 7, 2023 · 1 min · jiezi

关于sql:Calcite-SQL-解析语法扩展元数据验证原理与实战上

引言Apache Calcite 是一个动态数据治理框架,其中蕴含了许多组件,例如 SQL 解析器、SQL 验证器、SQL 优化器、SQL 生成器等。因为 Calcite 的体系结构并不反对数据的存储和解决,所以 Calcite 人造具备了在多种计算引擎和存储格局之间作为“中介者”的能力。 前文《一条 SQL 的查问优化之旅》提到,SQL 的查问是从 SQL 解析和 SQL 验证开始的,所以本文将围绕这两个话题开展。 指标和收益本文第一局部介绍如何基于 Calcite 实现一个简略的 SQL 解析器并扩大其语法, 并将内部数据库的 SQL 语法转换成 Calcite 外部的解析体系。第二局部将介绍 SQL 验证的流程和如何验证扩大的 SQL,如自定义函数等。 一、基于 Calcite 实现一个自定义 SQL 解析器1.1 Calcite SQL 解析器介绍Calcite 默认应用 JavaCC 生成 SQL 解析器,能够很不便的将其替换为 Antlr 作为代码生成器 。JavaCC 全称 Java Compiler Compiler,是一个开源的 Java 程序解析器生成器,生成的语法分析器采纳递归降落语法解析,简称 LL(K)。次要通过一些模版文件生成语法解析程序(例如依据 .jj 文件或者 .jjt 等文件生产代码)。 Calcite 的解析体系是将 SQL 解析成形象语法树, Calcite 中应用 SqlNode 这种数据结构示意语法树上的每个节点,例如 "select 1 + 1 = 2" 会将其拆分为多个 SqlNode。 ...

January 18, 2023 · 4 min · jiezi

关于sql:SQL-嵌套-N-层太长太难写怎么办

咱们工作中写SQL解决数据是粗茶淡饭,不论是利用内数据处理还是长期查问剖析都能够用SQL实现,绝对其余技术(如Java等高级语言)也更简略。不过,SQL的简略只限于简略需要,有些简单计算场景SQL写起来却很难,嵌套N层以至于达到几百上千行,说SQL代码长度时通常不会以行计而是以KB计。这种状况并不少见,置信常常写SQL的小伙伴并不生疏。 为什么会呈现这种状况呢?在http://c.raqsoft.com.cn/artic... 里详细分析了这个问题。尽管SQL比其余数据处理技术更简略,但仍存在一些短板(如不足有序反对、汇合化不彻底、没有高级语言的对象援用机制等),导致简单计算用SQL表达出来很繁琐。这种既简单又很长的SQL会带来很多问题。 长SQL有什么危害?简单长SQL给咱们带来的第一个困扰是难写。 其实,代码长自身还不是大问题,很多工作步骤多也就会写得长,但并不难。而SQL的长,经常是随同着难,而且会随着长度减少变得异样难。SQL在解题时很绕(思维形式上的难),你没法依照失常思路去施行算法,明明想出一个好的解法,简略一二三四步就实现了,但用SQL就要绕来绕去,不嵌套几层写个几十上百行如同体现不出你程度一样。而且不光嵌套子查问,简单SQL还随同多表关联和各种过滤条件,写的时候要放弃头脑异样苏醒,一旦写错不仅很难定位,有时还会把数据库跑死。这当然跟SQL不提倡过程(CTE语法提供了肯定反对)无关,一个工作写100行代码,分成 100 个语句还是只有 1 个语句,其复杂度齐全不是一个层面的。 另外,写代码还离不开调试,而SQL的调试性能堪称难用至极。直到明天各大数据库都没提供像样的调试性能,相比其余高级语言的开发调试环境几乎不忍直视。一句嵌套N层的长SQL发现写的不对只能把子查问从长语句里一层一层摘出来独自执行调试定位,费时费力,这更增大了SQL的书写难度。 难写就意味着开发周期长,咱们写SQL都是为前端业务服务的,一个计算需要连写带调试搞个三五天甚至一周,恐怕业务时效性都没了,被怒怼也是有苦难言。 除了难写,简单SQL还很难保护。数据处理业务的稳定性往往很差,常常要批改,不过想要批改这些SQL恐怕并非易事。别说新人接手,就是作者自己也经常出现过一段时间本人都看不懂的难堪状况。改一个SQL跟从新写一个的工夫差不多,这还玩啥。 另外简单SQL还会影响数据库移植。尽管数据库移植不常常产生,不过一旦产生就要命。近些年随着业务的高速倒退以及开源数据库的崛起,更换数据库时有发生。这就波及到SQL迁徙,咱们晓得数据库都是有方言的,在一个数据库上应用的函数到另外一个数据库未必管用,而且各类数据库对SQL规范的反对水平不同(如Oracle窗口函数反对的很好,其余数据库就要差很多),这些“非凡的”内容夹杂在简单SQL里就很难实现数据库迁徙了。 不管怎样,简单SQL都是数据开发人员的噩梦。 怎么办?SQL难的问题可不是第一天呈现,大家也都在踊跃寻找解决办法。其实当初很多开发方法曾经不再举荐写简单SQL,像ORM技术算是革掉SQL半条命,而微服务等框架更是要求SQL仅仅用于实现根本的数据读写,而不能用于做简单计算和业务解决。这些办法的思路很清晰,即把SQL的利用局限于根本的读写工作,在利用端实现简单的数据处理和业务逻辑,这样就能够躲避SQL的那些问题,架构上也更合乎古代利用的须要。 不必SQL,那些简单的计算和业务逻辑该用什么技术来做呢? 当然只能是其它程序语言了,简直所有利用级程序语言都能够指挥SQL工作,实现这种开发架构不是问题。那么,这个问题是不是就被轻易解决了? 咱们来考查一下这些罕用的技术。 JavaJava必定是第一抉择,毕竟泛滥应用程序都是Java开发的,如果能搞定这些数据处理就会有很多劣势。Java人造反对过程计算,实现简单计算时尽管代码可能更长,但能够依照失常思维实现算法,这样是不是就能够代替SQL了? No,没有这么简略。 因为Java不足业余的结构化数据对象,短少来自底层的无力反对,在实现SQL这类的简单计算时并不容易。 结构化数据计算的返回值的构造随计算过程而变,大量的两头后果同样是动静构造,这些都难以当时定义,而Java是强类型语言,又必须当时定义数据对象的构造(否则只能用map这类操作繁琐的数据对象),这就使Java的结构化计算僵化死板,lambda语法的能力重大受限。解释性语言能够简化参数的定义,函数自身就可指定参数表达式应解释成值参数还是函数参数,而Java是编译型语言,难以辨别不同类型的参数,必须设计简单的接口能力实现匿名函数(次要指lambda语法),这连SQL程序员都不易把握。省略数据对象而间接援用字段(比方写成"单价*数量"),可显著简化结构化数据计算,但Java不足业余的结构化数据对象,目前还无奈反对此类外表简略实则奇妙的语法,这就使Java代码简短且不直观(只能写成"x.单价*x.数量")。 短少结构化数据计算类库还会导致代码过长,同样的一个分组汇总用SQL一句就能写进去改成Java就要写几十行,这显然也对简化简单SQL有益。这个问题即便在Java8减少了Stream后也没有明显改善,为了简化运算用Java取代SQL根本不可能(有些利用用Java做数据处理往往是因为架构上的要求,就其简便性上还远不迭SQL)。 另外,Java作为编译型语言很难热部署,也就难以及时应答多变的数据计算场景。 Python间接的Java不行,那大热的Python怎么样呢?Python+SQL可比Java+SQL容易得多了吧。 确实,Python(次要是Pandas)提供了丰盛结构化计算类库,计算实现要比 Java 简略很多。不过,理论应用Pandas解决数据尤其是简单运算时也会碰到代码很难写的状况。其实,Pandas 原本就不是为结构化数据设计的,它并不是咱们相熟的数据表(一行行数据记录的汇合),而是个矩阵。用来解决结构化数据时,做些过滤合并这些简略运算还好点,碰到分组有序等简单一些运算,就会比拟麻烦了,思路上也常常要绕一下。 这还不是Python的次要问题,Python与利用联合的难点在于其集成性上。 Python很难与Java利用集成! Python和Java集成次要有两种形式。一种是服务式调用,既然Python和Java是两套体系,那就独自部署通过服务(网络通信)的形式交互,这种形式要保护两套利用比拟麻烦,还会存在一些平安认证零碎权限等治理问题,而且数据交换的性能也很差,不到万不得已不会采纳这种形式。另一种是应用Jython这种解释器(JVM上的Python),因为采纳Java开发能够很不便与利用集成,但Jython又不足足够的计算库(如Pandas)很难应酬那些简单计算。无论采纳何种形式,都会在利用方面产生微小限度,导致在Java利用中用Python来实现简单计算的可行性不高。 除非你把整个利用都用Python写,然而Java的各种企业级能力又用不上了,做做小利用还行吧。 ScalaScala的个性与Python相似,都提供了DataFrame对象,实现简略的结构化数据计算也比较简单,作为高级语言有序、对象属性化等个性反对良好,绝对Java在汇合运算上也更简略。Scala运行于JVM之上,天生就容易被JAVA集成,这些都是Scala的长处。 Scala的毛病在于应用难度较大,难学更难精,用于简单数据处理与SQL相比尤有劣势,也就不必想通过Scala简化简单SQL了。这大略也是为什么Spark要回归SQL的起因了吧。而且,Scala作为编译型语言同样不反对热部署。 SPL这些高级语言都存在这样那样的毛病,从简化简单SQL的角度来看无一能胜任。那还有什么方法呢? 其实,从后面的剖析中咱们显著可能感触到,面向结构化数据计算尤其是简单计算,现有技术(开发语言)都各有优缺点,SQL善于简单计算但对有序、过程反对不好,Java恰好反过来反对有序和过程但汇合计算能力很弱。如果能综合这些技术的长处,那简化简单SQL的指标也就达成了。 开源SPL恰好是这样一个产品。 SPL全称Structured Process Language,是一个专门用于结构化数据计算的程序语言。 惯例计算能力统一的数据类型 SPL绝对Java提供了更业余的结构化数据类型,即序表。和SQL的数据表一样,序表是批量记录组成的汇合,具备结构化数据类型的个别性能,能够与SQL无缝交互承接SQL的返回值。 序表反对所有的结构化计算函数,计算结果也同样是序表,而不是Map之类的数据类型。比方对分组汇总的后果,持续进行结构化数据处理。 Orders.groups(year(OrderDate):y; sum(Amount):m).new(y:OrderYear, m*0.2:discount)丰盛的计算类库 在序表的根底上,SPL提供了丰盛的结构化数据计算函数,比方过滤、排序、分组、去重、改名、计算列、关联、子查问、汇合计算、有序计算等。这些函数具备弱小的计算能力,毋庸硬编码辅助,就能独立实现计算。 如组合查问: Orders.select(Amount>1000 && Amount<=3000 && like(Client,"\*bro\*"))内关联: join(Orders:o,SellerId ; Employees:e,EId).groups(e.Dept; sum(o.Amount))SPL反对简略模式的Lambda语法,毋庸定义函数名和函数体,能够间接用表达式当作函数的参数。批改业务逻辑时,也不必重构函数,只须简略批改表达式。SPL是解释型语言,应用参数表达式时不用明确定义参数类型,使Lambda接口更简略。比方计算平方和,想在sum的过程中算平方,能够直观写作:Orders.sum(Amount*Amount)。 同时作为解释执行语言的SPL还人造反对动静数据结构,能够依据计算结果构造动静生成新序表,特地适宜计算列、分组汇总、关联这类计算。较简单的计算通常都要拆成多个步骤,每个两头后果的数据结构简直都不同。SPL反对动静数据结构,不用先定义这些两头后果的构造。比方,依据某年的客户回款记录表,计算每个月的回款额都在前10名的客户。 Sales2021.group(month(sellDate)).(~.groups(Client;sum(Amount):sumValue)).(~.sort(-sumValue)).(~.select(#<=10)).(~.(Client)).isect()过程管制与SQL协同 除了提供与SQL相当的汇合运算能力,SPL还对过程管制和分步计算提供了良好反对,灵便的分支判断语句、循环语句,配合业余的结构化数据对象,能够不便地实现各类业务逻辑。比方找出销售额累计占到一半的前n个大客户,能够这样分步实现: A 1 =db.query(“select client,sum(amount) amount from sales group by client order by amount desc”) 2 =A1. sum(amount)/2 3 =0 4 =A1.pselect((A3=A3+amount,A3>=A2)) 5 =A1(to(A4)) 通过SQL先实现分组汇总并按汇总值降序排序,而后SPL承接SQL的计算结果再通过分步形式实现后续计算,SPL与SQL无效联合,这样就很大水平达到了简化简单计算的指标。 ...

January 17, 2023 · 1 min · jiezi

关于sql:sql常用函数

1.按高下匹配度返回 order by INSTR(name, #{keywords}) = 0, CHAR_LENGTH(name), INSTR(name, #{keywords})

January 16, 2023 · 1 min · jiezi

关于sql:求职指南给数据开发的SQL面试准备路径⛵

大量的数据迷信职位须要精通 SQL,它也是数据分析师、数据科学家、数据建模岗最常考核的面试技能。在本篇内容中 ShowMeAI 将梳理汇总所有面试 SQL 问题,依照不同的主题构建练习专项块。 作者:韩信子@ShowMeAI 数据分析实战系列:https://www.showmeai.tech/tutorials/40 AI 面试题库系列:https://www.showmeai.tech/tutorials/48 本文地址:https://www.showmeai.tech/article-detail/342 申明:版权所有,转载请分割平台与作者并注明出处 珍藏ShowMeAI查看更多精彩内容 大量的数据迷信职位须要精通 SQL,它也是数据分析师、数据科学家、数据建模岗最常考核的面试技能。在本篇内容中 ShowMeAI 将梳理汇总所有面试 SQL 问题,依照不同的主题构建练习专项块,要求职的同学们能够依照对应板块内容进行专项击破与温习。 本篇内容借助于LeetCode平台,它是面试刷题演练的绝佳资源,内容笼罩大家熟知的数据结构算法和 SQL等。 LeetCode 将问题分为简略、中等和艰难的难度级别,SQL板块的一个问题是它没有对它们做很好的分类,大家能够参考 ShowMeAI 在本篇的内容板块分类形式。 咱们每个板块的内容都会指向 LeetCode 问题的对应链接,大家能够刷题和定向温习。 学习打算时间表咱们倡议最佳的节奏是1天一个板块,每天 2-4 个 SQL 问题(就如咱们在上面划分的板块)。 这个节奏下你应该能够充沛把握并坚固对应的主题。 当然,如果你是资深玩家,能够跳过外面的根底板块,专一于更中级和高级的主题(比方第8,9,10天的内容)。 对于 SQL 更详尽的内容,欢送大家查阅ShowMeAI制作的速查表,快学快用: 编程语言速查表 | SQL 速查表 学习打算 第1天:抉择和过滤这个板块次要针对 SQL 的SELECT语句,把握应用它从一个或多个表中抉择列字段,配合WHERE语句设定一个或多个条件。 单列条件抉择:Article Views I多条件抉择:Big Countries过滤具备空值的列:Find Customer Referee抉择第二大的值:Second Highest Salary 第2天:表关联SQL中有 4 种次要的连贯类型: INNER JOIN(或者 JOIN), LEFT JOIN / RIGHT JOIN, FULL OUTER JOIN, 和 CROSS JOIN。 ...

November 30, 2022 · 1 min · jiezi

关于sql:一条-SQL-的查询计划生成之旅上

背景Apache Calcite 作为一款开源的动态数据治理框架,因为其模块化、可扩大、以及不和任何计算引擎绑定的个性,目前在开源我的项目和商业化产品中已失去宽泛的利用。不仅 Apache Flink、Apache Druid、Apache Hive 等明星开源我的项目在应用 Calcite,腾讯苍穹 Super SQL、阿里 MaxCompute、Dremio 等商业化产品的 SQL Planner 也都基于 Calcite 实现。Apache Calcite 俨然成为了 SQL Planner 层的黄金规范、事实趋势。 随着近些年大数据基础设施的一直倒退成熟,SQL 曾经无可争议地成为大数据计算引擎的支流语言,但与此同时,大量新兴计算引擎、数据库我的项目的呈现,也产生了大量 SQL 方言,运维一个企业级大数据平台须要解决 SQL 的场景越来越多。学习和理解 Apache Calcite,既能帮忙咱们疾速了解 SQL Planner 的原理机制,又能有助于咱们利用 Calcite 疾速解决以解决 SQL 为核心的各类日常问题(如实现一个SQL Parser、SQL Gateway、SQL Planner 等)。 咱们打算从技术实战、原理解说、源码剖析等角度推出系列文章,来介绍如何利用 Apache Calcite 解决一些常见的具体问题,心愿对数据平台工具研发的同学有一些帮忙。本文是系列文章的第一篇,将首先介绍 Apache Calcite 的架构设计,同时以一条 SQL 在 Calcite 中的解决流程为主线,对 SQL 解析、元数据验证、执行打算生成及优化、SQL 方言转换等模块的要害原理进行论述,让读者对 Apache Calcite 有一个初步印象。 对于各模块更深刻的原理解说和源码实战,会在前面的系列文章中分篇进行开展。 指标和收益本文次要解说 Apache Calcite 的架构设计以及 Calcite 外部 SQL 优化形式,浏览本文,可能从以下几点帮忙到你: 整体理解 Apache Calcite ,包含架构设计和外围模块。从一条 SQL 解决流程视角登程,通过对 Calcite SQL 解析、校验、关系代数转换、RBO 和 CBO、物化视图改写和方言转换整体流程的解说,带你理解一条 SQL 的 Calcite 之旅。理解 Calcite 物化视图改写的两种形式及各自优缺点。理解 Calcite 中优化器设计的要害细节,以及如何实现对 SQL 方言的改写。心愿浏览完本篇文章后,你可能对 Calcite 整体应用流程有一个初步的意识,上面咱们进入注释。 ...

November 25, 2022 · 3 min · jiezi

关于sql:一个宁静祥和没有bug的下午和SqlSession的故事

作者:马跃 1 背景这是一个宁静祥和没有bug的下午。 作为一只菜鸡,时刻坚固一下根底还是很有必要的,如此的大好时机,就让我来学习学习mybatis如何应用。 这可和我看到的不一样啊,让我来看看我的项目里怎么写的。 咱们我的项目中的Dao都继承于BaseDao,而BaseDao继承于SqlSessionDaoSupport,每次执行sql的时候都是间接将这个sqlSession返回,而后执行sql,这难道不是一个实例变量嘛?这和你说的可不一样诶。于是带着这样的疑难,我开始了摸索。 2 探索之旅1)咱们都晓得,在应用mybatis时,sqlSession都来自于sqlSessionFactory,而sqlSessionFactory能够通过sqlSessionFactoryBuilder创立,也能够通过spring初始化,而我的项目中很显然采取了后一种形式。 2)那么咱们曾经失去了sqlSessionFactory,应该如何去进一步摸索sqlSession的起源呢,我想到能够通过我的项目中曾经实现的dao进行摸索。咱们轻易选取一个dao为例。 它继承了BaseDao。 而BaseDao又继承了SqlSessionDaoSupport,在BaseDao中调用了getSqlSession办法,实际上也就是SqlSessionDaoSupport的getSqlSession办法。 而SqlSessionDaoSupport的getSqlSession办法是间接将本人的成员变量返回去的,截至目前为止,和我的狐疑点是相符合的,即目前的写法和mybatis官网的阐明是抵触的。 3)重复浏览SqlSessionDaoSupport这个类后,终于被我发现了线索,仔细的小伙伴应该也早已发现了,就在上图之中的正文中,“用户应该应用这个办法来取得一个SqlSession来执行sql语句,这个SqlSession被spring治理,用户不应该提交、回滚或敞开它。因为这些曾经被主动执行了。” 同时,这个办法会返回一个线程平安的SqlSession。 那么这个SqlSession是从何而来的呢,从上图能够看出,它有两种赋值形式,一种是给他传一个SqlSessionFactory,生成SqlSessionTemplate,SqlSessionTemplate即为sqlSession。另一种是间接给他传一个SqlSessionTemplate作为SqlSession。依据本类的正文,如果SqlSessionFactory和SqlSessionTemplate都被定义了,那么SqlSessionFactory的形式会生效。至此,我的上述疑难曾经解决了,也就是说这个SqlSession并不是一个mybatis初始的SqlSession,而是spring实现的SqlSessionTemplate。 4)然而,我又诞生了新的疑难,SqlSessionTemplate是怎么实现线程平安的呢? 于是我进入了SqlSessionTemplate的办法执行,发现理论执行语句的都是这个代理类sqlSessionProxy。 而代理工作内容就在SqlSessionInterceptor这个handler里。 进入其中,咱们终于发现了它的获取和敞开操作。 也就是说,每次执行,代理都会调用sessionFactory的openSession办法取得一个新的session。 3 总结终于的终于,mybatis,spring,我的项目以及我的疑难失去了对立,真是一个平静祥和而又没有bug的下午呀。

November 22, 2022 · 1 min · jiezi

关于sql:面试现场月薪3w的这些数据挖掘SQL面试题你都掌握了吗

作者:韩信子@ShowMeAI 数据分析实战系列:https://www.showmeai.tech/tutorials/40 AI 面试题库系列:https://www.showmeai.tech/tutorials/48 本文地址:https://www.showmeai.tech/article-detail/318 申明:版权所有,转载请分割平台与作者并注明出处 珍藏ShowMeAI查看更多精彩内容 本篇内容基于场景面试题实现,在给定场景和数据表的前提下,有一系列的剖析开掘问题,大家能够基于SQL来实现。 场景:Danny十分喜爱日本料理,因而在 2021 年初,他决定冒险冒险,开了一家可恶的小餐厅,发售他最喜爱的 3 种食物:寿司、咖喱和拉面。这家餐厅从其几个月的经营中获取了一些十分根本的数据,但不晓得如何应用他们的数据来帮忙他们经营业务。 Danny 想基于收集到的数据来更深刻地理解他的客户,例如他们的就餐模式、点餐破费以及他们最喜爱哪些菜等。上面你就来帮忙他实现外围问题的剖析吧,这里的剖析基于SQL实现。 对于SQL更详尽的内容,欢送大家查阅ShowMeAI制作的速查手册,快学快用: 编程语言速查表 | SQL 速查表 数据阐明本次的场景波及到3个外围数据集,都已存入数据库表中: salesmenumembers这3张表对应的实体关系图如下所示: 表1:Sales销售额表对应的建表与数据插入SQL语句如下: CREATE TABLE sales ( "customer_id" VARCHAR(1), "order_date" DATE, "product_id" INTEGER);INSERT INTO sales ("customer_id", "order_date", "product_id")VALUES ('A', '2021-01-01', '1'), ('A', '2021-01-01', '2'), ('A', '2021-01-07', '2'), ('A', '2021-01-10', '3'), ('A', '2021-01-11', '3'), ('A', '2021-01-11', '3'), ('B', '2021-01-01', '2'), ('B', '2021-01-02', '2'), ('B', '2021-01-04', '1'), ('B', '2021-01-11', '1'), ('B', '2021-01-16', '3'), ('B', '2021-02-01', '3'), ('C', '2021-01-01', '3'), ('C', '2021-01-01', '3'), ('C', '2021-01-07', '3'); ...

November 5, 2022 · 4 min · jiezi

关于sql:如何实现一个SQL解析器

作者:vivo 互联网搜寻团队- Deng Jie一、背景随着技术的一直的倒退,在大数据畛域呈现了越来越多的技术框架。而为了升高大数据的学习老本和难度,越来越多的大数据技术和利用开始反对SQL进行数据查问。SQL作为一个学习老本很低的语言,反对SQL进行数据查问能够升高用户应用大数据的门槛,让更多的用户可能应用大数据。 本篇文章次要介绍如何实现一个SQL解析器来利用的业务当中,同时联合具体的案例来介绍SQL解析器的实际过程。 二、为什么须要SQL解析器?在设计我的项目零碎架构时,咱们通常会做一些技术调研。咱们会去思考为什么须要SQL解析器?怎么判断抉择的 SQL 解析器能够满足以后的技术要求? 2.1 传统的SQL查问传统的SQL查问,依赖残缺的数据库协定。比方数据存储在MySQL、Oracle等关系型数据库中,有规范的SQL语法。咱们能够通过不同的SQL语句来实现业务需要,如下图所示: 然而,在解决海量数据的时候,关系型数据库是难以满足理论的业务需要的,咱们须要借助大数据生态圈的技术组件来解决理论的业务需要。 2.2 理论利用场景在应用大数据生态圈的技术组件时,有些技术组件是自带SQL的,比方Hive、Spark、Flink等;而有些技术组件自身是不带SQL的,比方Kafka、HBase。上面,咱们能够通过比照不带SQL和应用SQL解析器后的场景,如下图所示: 从上图中,咱们能够看到,图右边在咱们应用不带SQL的技术组件时,实现一个查问时,须要咱们编写不同的业务逻辑接口,来与Kafka、HBase这些技术组件来进行数据交互。如果随着这类组件的减少,查问性能复杂度的减少,那边每套接口的复杂度也会随之减少,对于后续的扩大和保护也是很不不便的。而图左边在咱们引入SQL解析器后,只须要一套接口来实现业务逻辑,对于不同的技术组件进行适配即可。 三、什么是SQL解析器?在抉择SQL解析器利用到咱们理论的业务场景之前,咱们先来理解一下SQL解析器的外围知识点。 3.1 SQL解析器蕴含哪些内容?在应用SQL解析器时,解析SQL的步骤与咱们解析Java/Python程序的步骤是十分的类似的,比方: 在C/C++中,咱们能够应用LEX和YACC来做词法剖析和语法分析在Java中,咱们能够应用JavaCC或ANTLR在咱们应用解析器的过程当中,通常解析器次要包含三局部,它们别离是:词法解析、语法解析、语义解析。 3.1.1 什么词法解析?如何了解词法解析呢?词法解析咱们能够这么来进行了解,在启动词法解析工作时,它将从左到右把字符一个个的读取并加载到解析程序外面,而后对字节流进行扫描,接着依据构词规定辨认字符并切割成一个个的词条,切词的规定是遇到空格进行宰割,遇到分号时完结词法解析。比方一个简略的SQL如下所示: SQL示例SELECT name FROM tab;通过词法解析后,后果如下所示: 3.1.2 什么是语法解析?如何了解语法解析呢?语法解析咱们能够这么来进行了解,在启动语法解析工作时,语法分析的工作会在词法剖析的后果上将词条序列组合成不同语法短句,组成的语法短句将与相应的语法规定进行适配,若适配胜利则生成对应的形象语法树,否则报会抛出语法错误异样。比方如下SQL语句: SQL示例SELECT name FROM tab WHERE id=1001;约定规定如下: 上表中,红色的内容通常示意终结符,它们个别是大写的关键字或者符号等,小写的内容是非终结符,个别用作规定的命名,比方字段、表名等。具体AST数据结构如下图所示: 3.1.3 什么是语义解析?如何了解语义解析呢?语义解析咱们能够这么来进行了解,语义剖析的工作是对语法解析失去的形象语法树进行无效的校验,比方字段、字段类型、函数、表等进行查看。比方如下语句: SQL示例SELECT name FROM tab WHERE id=1001;上述SQL语句,语义剖析工作会做如下查看: SQL语句中表名是否存在;字段name是否存在于表tab中;WHERE条件中的id字段类型是否能够与1001进行比拟操作。上述查看完结后,语义解析会生成对应的表达式供优化器去应用。 四、 如何抉择SQL解析器?在理解了解析器的外围知识点后,如何抉择适合的SQL解析器来利用到咱们的理论业务当中呢?上面,咱们来比照一下支流的两种SQL解析器。它们别离是ANTLR和Calcite。 4.1 ANTLRANTLR是一款功能强大的语法分析器生成器,能够用来读取、解决、执行和转换结构化文本或者二进制文件。在大数据的一些SQL框架外面有有宽泛的利用,比方Hive的词法文件是ANTLR3写的,Presto词法文件也是ANTLR4实现的,SparkSQLambda词法文件也是用Presto的词法文件改写的,另外还有HBase的SQL工具Phoenix也是用ANTLR工具进行SQL解析的。 应用ANTLR来实现一条SQL,执行或者实现的过程大抵是这样的,实现词法文件(.g4),生成词法分析器和语法分析器,生成形象语法树(也就是我常说的AST),而后再遍历形象语法树,生成语义树,拜访统计信息,优化器生成逻辑执行打算,再生成物理执行打算去执行。 官网示例: ANTLR表达式assign : ID '=' expr ';' ;解析器的代码相似于上面这样: ANTLR解析器代码void assign() { match(ID); match('='); expr(); match(';');}4.1.1 ParserParser是用来辨认语言的程序,其自身蕴含两个局部:词法分析器和语法分析器。词法分析阶段次要解决的问题是关键字以及各种标识符,比方INT(类型关键字)和ID(变量标识符)。语法分析次要是基于词法剖析的后果,结构一颗语法分析数,流程大抵如下: ...

October 24, 2022 · 4 min · jiezi

关于sql:SQL审核-如何利用-OpenAPI-实现自己的扫描任务

作者:蔡传旺 前端工程师,负责写写页面并改改bug,岂不快哉; 本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 一、SQLE 介绍SQLE 是一款由爱可生开源社区发动,面向数据库开发与管理人员,实现了 SQL 的「开发」-「测试」-「上线」等全流程笼罩,资源与权限精细化治理,兼顾简洁与高效,易保护、易扩大的的开源我的项目,旨在为用户提供一套安全可靠、自主可控的 SQL 品质管控计划。 二、性能介绍智能扫描工作是咱们能够应用一系列的形式调用 sqle 的 openAPI ,将数据传输到 sqle 上进行扫描审核的性能,咱们能够从数据库中传输建库建表语句审核、能够将慢日志传输到 sqle ,由 sqle 解析扫描 sql 、也能够将 Mybatis 传输到 sqle 中扫描解析其中的 sql ,所以 sqle 的智能扫描工作是十分弱小的,那智能扫描能解析那些数据呢? 三、如何应用扫描工作的 OpenAPI介绍扫描工作的 OpenAPI智能扫描就是咱们可用首先定义一个扫描工作,这个工作是针对某个特定的数据路类型,比方 MySQL ,同时咱们也会设置工作的执行周期,只有工夫一到,sqle 就会主动执行这个扫描工作,刚接触 sqle 的小伙伴可能比拟懵,这个扫描工作创立了,然而没有内容,是我应用的形式不对吗?其实不然,sqle 凋谢了相应的 OpenAPI 接口,咱们能够调用 OpenAPI 来将咱们要审核的语句发送给 sqle 中相应的工作。那这个 OpenAPI 在哪里?怎么应用这个 OpenAPI 呢? 首先在你依照官网文档的搭建形式(https://actiontech.github.io/...)搭建了一个 sqle 后,咱们拜访http://${your address}:10000/swagger/index.html就会失去一个 swagger 文档,咱们在其中能够找到下图的两个 api ,而这两个 api 就是咱们能够间接将 sql 语句传给扫描工作的 OpenAPI 。 应用办法比方我在环境中创立了一个自定义类型的扫描工作 这样我就失去了这个扫描工作,在工作中我定义了工作类型、审核周期、数据库等,失去了一个拜访凭证,这个拜访凭证就是咱们应用 OpenAPI 拜访扫描工作中须要应用到的 token 。 ...

October 21, 2022 · 2 min · jiezi

关于sql:Oracle-sqlldr-使用

sqlldr应用# ctl_jpf.ctlload datainfile 'jpf01.csv'insert into table TEST_BUD_SN_IDfields terminated by ','TRAILING NULLCOLS( SN, TEST_ID)# insert :默认形式,在导入记录前要求表为空;# append :在表中追加新导入的记录;表不为空时须要追加数据# replace :删除旧记录(等价delete from table语句),替换成新导入的记录;# truncate:删除旧记录(等价truncate table语句),替换成新导入的记录;# into table前面指定导入数据库表USER_INFO,sed -i 's/jpf11/jpf12/g' ctl_jpf.ctlsed -i 's/insert/append/g' ctl_jpf.ctlsqlldr userid=IMES_T/'xxxxxx' control=ctl_jpf.ctl data=jpf12.csv log=jpflog.log bad=jpfbad.bad errors=99999999sqlldr userid=IMES_T/'xxxxxx' control=test.ctl data=test.txt log=test.log bad=test.bad errors=99999999# test.ctloptions(skip=1,BINDSIZE=20971520, ROWS=10000, READSIZE=20971520, ERRORS=999999999)load datainfile '/home/oracle/USER_INFO.csv'insert into table "USER_INFO"fields terminated by ','Optionally enclosed by "'"(MSISDN,PROVINCE_CODE,CREATE_TIME "to_date(:CREATE_TIME, 'yyyy-mm-dd hh24:mi:ss')")sqlldr userid=yuwen/xxxxxx control=loaddata_USER_INFO_direct.ctl direct=truedirect=true ,options中的BINDSIZE换成了COLUMNARRAYROWS,因为BINDSIZE是惯例门路绑定数组的大小,而COLUMNARRAYROWS是间接门路列数组的行数。options(skip=1,COLUMNARRAYROWS=20971520, ROWS=10000, READSIZE=20971520, ERRORS=999999999)load datainfile '/home/oracle/USER_INFO.csv'insert into table "USER_INFO"fields terminated by ','Optionally enclosed by "'"(MSISDN,PROVINCE_CODE,CREATE_TIME "to_date(:CREATE_TIME, 'yyyy-mm-dd hh24:mi:ss')")https://www.jianshu.com/p/498c26ba95a7Usage: SQLLDR keyword=value [,keyword=value,...]局部关键字: userid -- ORACLE username/password control -- 管制文件 log -- 记录的日志文件 bad -- 坏数据文件 data -- 数据文件 discard -- 抛弃的数据文件 discardmax -- 容许抛弃数据的最大值 (默认全副) skip -- Number of logical records to skip (默认0) load -- Number of logical records to load (默认全副) errors -- 容许的谬误记录数 (默认50) rows --(每次提交的记录数,如每2000条提交一次。默认: 惯例门路 64, 间接门路 全副,所以应用间接门路的话,效率会比一般的好太多太多) bindsize --( 每次提交记录的缓冲区的大小,字节为单位,默认256000) silent -- 禁止输入信息 (header,feedback,errors,discards,partitions) direct -- 应用直通门路形式导入 (默认FALSE) parfile -- parameter file: name of file that contains parameter specifications。参数文件:蕴含参数阐明的文件的名称 parallel -- 并行导入(默认FALSE,并行形式仅仅在direct=true形式时无效,并行形式只反对append导入。留神:parallel并不是让一个sqlldr语句起多个过程来加载数据,而是不锁住加载表,容许别的间接门路加载. 所以要使parallel起作用,应该先将要加载的数据文件分成多个,用多个sqlldr语句同时加载,如下例: skip_unusable_indexes -- disallow/allow unusable indexes or index partitions(默认FALSE),不容许/容许应用无用的索引(默认FALSE)skip_index_maintenance -- do not maintain indexes, mark affected indexes as unusable(默认FALSE,这个最好设置为TRUE)。不保护索引,将受到影响的索引标记为生效(默认FALSE) file -- file to allocate extents from 要从以下对象中调配区的文件 commit_discontinued -- commit loaded rows when load is discontinued (默认 FALSE)。提交加载中断时已加载的行(默认FALSE) readsize -- size of read buffer (默认 1048576)。读取缓冲区的大小 (默认1048576) external_table -- use external table for load; NOT_USED, GENERATE_ONLY, EXECUTE (默认 NOT_USED)。应用内部表进行加栽:NOT_USED,GENERATE_ONLY,EXECUTE (默认 NOT_USED) columnarrayrows -- number of rows for direct path column array (默认 5000)。间接门路列数组的行数(默认5000) streamsize -- size of direct path stream buffer in bytes (默认 256000)。间接路径流缓冲区的大小(默认256000,单位字节) multithreading -- use multithreading in direct path。在间接门路中应用多线程 resumable -- enable or disable resumable for current session (默认 FALSE)。启用或禁用以后的可复原会话(默认FALSE) resumable_name -- text string to help identify resumable statement。有助于标识可复原语句的文本字符串 resumable_timeout -- wait time (in seconds) for RESUMABLE (默认 7200)。RESUMABLE 的等待时间(以秒计)(默认 7200) date_cache -- size (in entries) of date conversion cache (默认 1000)。日期转换高速缓存的大小(以条目计)(默认1000)LOAD DATA INFILE "users_data.csv"--指定内部数据文件,能够写多个 INFILE "another_data_file.csv" 指定多个数据文件--这里还能够应用 BADFILE、DISCARDFILE 来指定坏数据和抛弃数据--的文件,truncate --操作类型,用 truncate table 来革除表中原有记录INTO TABLE users -- 要插入记录的表Fields terminated by ","-- 数据中每行记录用 "," 分隔Optionally enclosed by '"' -- 数据中每个字段用 '"' 框起,比方字段中有 "," 分隔符时trailing nullcols --表的字段没有对应的值时容许为空(virtual_column FILLER, --这是一个虚构字段,用来跳过由 PL/SQL Developer 生成的第一列序号user_id number, --字段能够指定类型,否则认为是 CHARACTER 类型, log 文件中有显示user_name,login_times,last_login DATE"YYYY-MM-DD HH24:MI:SS"-- 指定承受日期的格局,相当用 to_date() 函数转换)0) 配置文件 ************* 以下是4种装入表的形式 APPEND // 原先的表有数据 就加在前面 INSERT // 装载空表 如果原先的表有数据 sqlloader会进行 默认值 REPLACE // 原先的表有数据 原先的数据会全副删除 TRUNCATE // 指定的内容和replace的雷同 会用truncate语句删除现存数据 *************import.ctl(含序列,不能设direct=true):load datainfile '/home/oracle/data/import.dat'appendinto table sys_login_records_detail_1fields terminated by ','(LOGIN_DATE DATE "yyyy-mm-dd" TERMINATED BY whitespace,FILLER_1 FILLER,GAME_ID,FILLER_2 FILLER,IP,MAC,NETBAR_ID,PROVINCE,CITY,LOGIN_TIMES,id POSITION(1:1) "sys_login_records_detail_seq_1.nextval" ---序列)import.ctl(不含序列,可设direct=true):Load datainfile '/home/oracle/data/import.dat'appendinto table sys_login_records_detail_1fields terminated by ','(LOGIN_DATE DATE "yyyy-mm-dd" TERMINATED BY whitespace,FILLER_1 FILLER,GAME_ID,FILLER_2 FILLER,IP,MAC,NETBAR_ID,PROVINCE,CITY,LOGIN_TIMES)1) 老例 导入sqlldr user/xxxxxx control=/home/oracle/data/install.ctllog=/home/oracle/data/export.logbad=/home/oracle/data/export.bad##Space allocated for bind array: 132352 bytes(64 rows)##Elapsed time was: 00:01:45.852) 1000条提交一次sqlldr user/password control=/home/oracle/data/install.ctllog=/home/oracle/data/export.logbad=/home/oracle/data/export.badrows=1000 readsize=2068000 bindsize=2068000##Space allocated for bind array: 2068000 bytes(1000 rows)##Elapsed time was: 00:00:22.803) 10000条提交一次sqlldr user/[email protected]control=/home/oracle/data/install.ctllog=/home/oracle/data/export.logbad=/home/oracle/data/export.badrows=10000 readsize=20680000 bindsize=20680000##Space allocated for bind array: 20680000 bytes(10000 rows)##Elapsed time was: 00:00:20.254) 设置direct=true, 含序列sqlldr user/[email protected]control=/home/oracle/data/install.ctllog=/home/oracle/data/export.logbad=/home/oracle/data/export.baddirect=true##ORA-01400: cannot insert NULL into ("EMOA"."sys_login_records_detail_1"."ID")5) 设置direct=true, 去掉序列字段, 最快的口头#SQL> alter table emoa.sys_login_records_detail_1 drop column id;sqlldr user/[email protected]control=/home/oracle/data/export.ctllog=/home/oracle/data/export.logbad=/home/oracle/data/export.baddirect=true##Elapsed time was: 00:00:10.98##然而如果 有频频数据, 会把惟一索引置为unusable, 要确保数据源已剔重6) 设置readsize和bindsize到最大值, 高效又稳当的口头 , 终极 回收 计划sqlldr user/[email protected]control=/home/oracle/data/export.ctllog=/home/oracle/data/export.logbad=/home/oracle/data/export.badrows=100160 readsize=20971520 bindsize=20971520 PARALLEL=TRUE##Space allocated for bind array: 20970240 bytes(10160 rows)##Elapsed time was: 00:00:14.36进步 SQL*Loader 的性能 1) 一个简略而容易疏忽的问题是,没有对导入的表应用任何索引和/或束缚(主键)。如果这样做,甚至在应用ROWS=参数时,会很明显降低数据库导入性能。 2) 能够增加 DIRECT=TRUE来进步导入数据的性能。当然,在很多状况下,不能应用此参数。 3) 通过指定 UNRECOVERABLE选项,能够敞开数据库的日志。这个选项只能和 direct 一起应用。 4) 能够同时运行多个导入工作。 惯例导入与direct导入形式的区别 惯例导入能够通过应用 INSERT语句来导入数据。Direct导入能够跳过数据库的相干逻辑(DIRECT=TRUE),而间接将数据导入到数据文件中。1.direct对性能的影响是微小的,如果为Fasle(默认值),1万的记录须要100秒,太慢了,起初设置为TRUE,配合其余的设置,200万的记录,330秒搞定,这个速度和MySQL中的select ....into的效率差不多,应该还算很不错的了。不过因为我在Oracle中对大对象进行了压缩,所以须要10分钟2.如果表中有索引的话,是不能指定direct=TRUE的,除非应用skip_index_maintenance=TRUE,这个就是在导入的时候疏忽索引,所以在数据导入结束当前,查看索引的状态应该都是有效的,须要重建之,如下SQL语句select * from dba_indexes where table_name='?'alter idnex index_name rebuild不过在我测试过程中,这种形式是比拟正当的,重建索引比新建索引要快很多,如我200W的记录,重建主键只需1分钟多,新建的话则要7分钟。3.在数据导入的过程,让该表不记录日志,数据库不开启归档日志 alter database noarchivelog alter table BLOG nologging--End--

October 18, 2022 · 3 min · jiezi

关于sql:SQL-抽象语法树及改写场景应用

1 背景咱们平时会写各种各样或简略或简单的sql语句,提交后就会失去咱们想要的后果集。比方sql语句,”select * from t\_user where user\_id > 10;”,意在从表t\_user中筛选出user\_id大于10的所有记录。你有没有想过从一条sql到一个后果集,这两头经验了多少崎岖呢? 2 SQL引擎从MySQL、Oracle、TiDB、CK,到Hive、HBase、Spark,从关系型数据库到大数据计算引擎,他们大都能够借助SQL引擎,实现“承受一条sql语句而后返回查问后果”的性能。 他们外围的执行逻辑都是一样的,大抵能够通过上面的流程来概括: 两头蓝色局部则代表了SQL引擎的根本工作流程,其中的词法剖析和语法分析,则能够引申出“形象语法树”的概念。 3 形象语法树3.1 概念高级语言的解析过程都依赖于解析树(Parse Tree),形象语法树(AST,Abstract Syntax Tree)是疏忽了一些解析树蕴含的一些语法信息,剥离掉一些不重要的细节,它是源代码语法结构的一种形象示意。以树状的模式体现编程语言的构造,树的每个节点ASTNode都示意源码中的一个构造;AST在不同语言中都有各自的实现。 解析的实现过程这里不去深刻分析,重点在于当SQL提交给SQL引擎后,首先会通过词法剖析进行“分词”操作,而后利用语法解析器进行语法分析并造成AST。 下图对应的SQL则是“select username,ismale from userInfo where age>20 and level>5 and 1=1”; 这棵形象语法树其实就简略的能够了解为逻辑执行打算了,它会通过查问优化器利用一些规定进行逻辑打算的优化,失去一棵优化后的逻辑打算树,咱们所熟知的“谓词下推”、“剪枝”等操作其实就是在这个过程中实现的。失去逻辑打算后,会进一步转换成可能真正进行执行的物理打算,例如怎么扫描数据,怎么聚合各个节点的数据等。最初就是依照物理打算来一步一步的执行了。 3.2 ANTLR4解析(词法和语法)这一步,很多SQL引擎采纳的是ANTLR4工具实现的。ANTLR4采纳的是构建G4文件,外面通过正则表达式、特定语法结构,来形容指标语法,进而在应用时,依赖语法字典一样的构造,将SQL进行拆解、封装,进而提取须要的内容。下图是一个形容SQL构造的G4文件。 3.3 示例3.2.1 SQL解析 在java中的实现一次SQL解析,获取AST并从中提取出表名。 首先引入依赖: <dependency> <groupId>org.antlr</groupId> <artifactId>antlr4-runtime</artifactId> <version>4.7</version></dependency>在IDEA中装置ANTLR4插件; 示例1,解析SQL表名。 应用插件将形容MySQL语法的G4文件,转换为java类(G4文件疏忽)。 类的构造如下: 其中SqlBase是G4文件名转换而来,SqlBaseLexer的作用是词法解析,SqlBaseParser是语法解析,由它生成AST对象。HelloVisitor和HelloListener:进行形象语法树的遍历,个别都会提供这两种模式,Visitor访问者模式和Listener监听器模式。如果想本人定义遍历的逻辑,能够继承这两个接口,实现对应的办法。 读取表名过程,是重写SqlBaseBaseVisitor的几个要害办法,其中TableIdentifierContext是表定义的内容; SqlBaseParser下还有SQL其余“词语”的定义,对应的就是G4文件中的各类形容。比方TableIdentifierContext对应的是G4中TableIdentifier的形容。 3.2.2 字符串解析 下面的SQL解析过程比较复杂,以一个简略字符串的解析为例,理解一下ANTLR4的逻辑。 1)定义一个字符串的语法:Hello.g4 2)应用IDEA插件,将G4文件解析为java类 3)语法解析类HelloParser,内容就是咱们定义的h和world两个语法规定,外面具体本义了G4文件的内容。 4)HelloBaseVisitor是采纳访问者模式,凋谢进去的接口,须要自行实现,能够获取xxxParser中的规定信息。 5)编写测试类,应用解析器,辨认字符串“hi abc”: ...

October 9, 2022 · 1 min · jiezi

关于sql:源码学习之MyBatis的底层查询原理

导读本文通过MyBatis一个低版本的bug(3.4.5之前的版本)动手,剖析MyBatis的一次残缺的查问流程,从配置文件的解析到一个查问的残缺执行过程具体解读MyBatis的一次查问流程,通过本文能够具体理解MyBatis的一次查问过程。在平时的代码编写中,发现了MyBatis一个低版本的bug(3.4.5之前的版本),因为当初很多工程中的版本都是低于3.4.5的,因而在这里用一个简略的例子复现问题,并且从源码角度剖析MyBatis一次查问的流程,让大家理解MyBatis的查问原理。 1 问题景象1.1 场景问题复现 如下图所示,在示例Mapper中,上面提供了一个办法queryStudents,从student表中查问出合乎查问条件的数据,入参能够为student\_name或者student\_name的汇合,示例中参数只传入的是studentName的List汇合 List<String> studentNames = new LinkedList<>(); studentNames.add("lct"); studentNames.add("lct2"); condition.setStudentNames(studentNames); <select id="queryStudents" parameterType="mybatis.StudentCondition" resultMap="resultMap"> select * from student <where> <if test="studentNames != null and studentNames.size > 0 "> AND student_name IN <foreach collection="studentNames" item="studentName" open="(" separator="," close=")"> #{studentName, jdbcType=VARCHAR} </foreach> </if> <if test="studentName != null and studentName != '' "> AND student_name = #{studentName, jdbcType=VARCHAR} </if> </where> </select>冀望运行的后果是 select * from student WHERE student_name IN ( 'lct' , 'lct2' )然而实际上运行的后果是 ==\> Preparing: select * from student WHERE student\_name IN ( ? , ? ) AND student\_name = ? ...

September 30, 2022 · 7 min · jiezi

关于sql:2022年9月中国数据库排行榜榜眼探花纷纷易主AnalyticDB蝉联榜单十强

夏去秋来清风至,榜首前三起涟漪。 2022年9月的 墨天轮中国数据库风行度排行榜 炽热出炉,相比上月新增两个数据库, 本月榜单前十名能够用一句话概括为:OceanBase新版公布先声夺人,达梦低调做事暂退第四。 2022年9月排行榜TOP10得分详情表 目 录一、榜单前十高手过招二、赛道黑马此起彼伏三、墨天轮数据库大盘点四、总结一、榜单前十高手过招在本月排行榜上,前十名呈现了显著的变动,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 秒,进入真正的秒级容灾时代,这款产品能紧跟市场趋势,迅速抢占市场。排行榜TOP10排名趋势图 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月体现不俗,扩散在各个领域发光发热。 2022年9月排行榜黑马得分详情表 SequoiaDB是巨杉数据库旗下的一款金融级分布式关系型数据库,巨杉数据库自2011年成立以来,间断三年入榜 Gartner报告。此次排名是其时隔7个月后重归第11名。在面向客户对湖仓一体各个场景的不同需要,巨杉数据库细分出四大产品线,可能满足客户不同的需要。 近日,巨杉数据库荣获“2021年广州独角兽翻新企业”奖,是其特有的产品竞争力失去行业的认可。 稳坐墨天轮数据库排行榜时序数据库第一名的TDengine,他是涛思数据推出的一款开源的专为物联网、车联网、工业互联网、IT运维等设计和优化的大数据平台。其本月得分较上月减少10.12分,排名回升一位至第12名。8月,涛思数据迎来了里程碑式的事件,重磅公布了 TDengine 3.0,“开源产品+泛滥外围性能”也为热度进一步加持。 TDengine新的分布式架构 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正在一直破圈,影响力辐射整个行业。 YashanDB 产品架构 三、墨天轮数据库大盘点墨天轮中国数据库风行度排行榜本月在页面上新增筛选栏,将数据库依照模型划分为关系型、键值、列簇、图形、空间、向量、时序以及搜寻等八类,进行筛选展现。“报告统计”一栏,将各模型总数、得分趋势进行统计。“分类统计”中次要是针对现有数据库的属性进行数量统计。此页面的改良是为了不便大家能够从不同的维度理解各个数据库的风行度趋势。 排行榜新增筛选栏 (一)中国数据库各模型数 本月排行榜共有238个数据库参加排名,相比上月新增两个。参加排名的数据库中,关系型数据库共有152个,占比63.8%,其次则是时序数据库占比13.4%。各模型具体数量如下图所示: (二)中国数据库OLTP/OLAP/HTAP数量 在152个关系型数据库中,OLTP数据库108个,占比71%。HTAP和OLAP别离有25和23个,以后业内依然以在线事物解决OLTP关系型数据库为主,将来混合负载数据库HTAP会成为简单利用的首选,可能同时反对在线事务处理和简单数据分析。 (三)中国数据库集中式/分布式数量汇总 目前分布式和集中式数据库数量相当,分布式数据库仅比集中式数据库多出1个。分布式架构个别采纳横向扩大的形式,即通过减少服务器的数量来晋升零碎的解决能力,每个节点都是一个可独立运行的单元,生效时也不会影响利用整体的可用性,更能满足当今时代和用户的需要。 (四)中国数据库本地部署/云原生数量 墨天轮排行榜上的数据库以本地部署的数据库居多,有199个。近年来,随着云原生成为数据库倒退的支流技术趋势,用户能够在云上搭建本人的数据库,云原生数据库也不断涌现。 (五)中国数据库开源/商业数量 排行榜上商业数据库的数量是开源数据库的五倍左右,商业数据库占比81.9%。在排行榜前十中,开源与商业各占一半,这阐明开源为数据库能带来极大的热度,置信将来也会有更多开源的中国数据库呈现。 四、总结千淘万漉虽辛苦,吹尽黄沙始到金。泛滥国产数据库座无虚席,各自彰显其能,一直在“深水区”打磨产品。市场需求的迭代,厂商们积攒的日益深厚的产品力,产品升级更新,一直从用户到产品、产品到用户、周而复始的过程,最终用惊艳的产品回馈用户。国产数据库的存在不仅是红利下诞生的产物,更是民族的心愿、国家的将来。 ...

September 13, 2022 · 1 min · jiezi

关于sql:游标

游标咱们通过sql语句查问到一组数据后,能够通过游标对一组数据的每条数据进行独自操作。游标又能够了解为一组数据的汇合。 动态游标申明一个游标,并将通过select语句查问出的一组数据放入游标中。 declare cursor_name cursor for select userId from table1 where name = XXX;关上游标,对应在操作后还须要敞开游标。 open cursor_name提取游标 Fetch[ [Next|prior|Frist|Last|Absoute n|Relative n ]from ][Global] cursor_name[into @variable_name[,....]]参数阐明: Frist:后果集的第一行Prior:以后地位的上一行Next:以后地位的下一行Last:最初一行Absoute n:从游标的第一行开始数,第n行。Relative n:从以后地位数,第n行。Into @variable_name[,...] : 将提取到的数据寄存到变量variable_name中。游标常常会和全局变量@@FETCH_STATUS与WHILE循环来独特应用,以达到遍历游标所在数据集的目标,例如:@@fetch_status 是一个全局变量返回上一次应用游标fetch操作所返回的状态值0 fetch语句胜利 -1 fetch语句失败或者此行不在后果集中-2 被提取的行不存在 declare @userId intfetch next from cursor_name into @userIdwhile @@fetch_status=0 --提取胜利,进行下一条数据的提取操作begin select @userId as id fetch next from cursor_name into @userId --挪动游标end 敞开游标 open cursor_name开释游标 deallocate cursor_name动静游标动静游标比照动态游标来说,使得定义游标时的sql语句变得动静。当咱们进行多条件查问时,有时候会进行学号查问,有时候会通过姓名查问,有时候是姓名和学号组合查问,这时候应用动静游标,对于前台传来的不同状况的参数进行判断并拼接查问语句,而后再定义游标。 String sql = "select userId from table1 where 1 = 1";if (name != null) { sql += "and name like '%" + name + "%'";}if (num != null) { sql += "and num like '%" + num + "%'";}// 依据sql筹备并定义游标其余操作与动态游标雷同 ...

September 12, 2022 · 1 min · jiezi

关于sql:安装vuecodemirror支持SQL可视化

有任何问题都能够留言征询。 npm装置npm install vue-codemirror@4.0.6 --save// oryarn add vue-codemirror@4.0.6 -D在main.js引入import VueCodeMirror from 'vue-codemirror'import 'codemirror/lib/codemirror.css'Vue.use(VueCodeMirror)写到vue文件<template> <div> <codemirror ref="cmRef" v-model="code" :options="cmOptions" /> </div></template><script>import 'codemirror/theme/xq-light.css'import 'codemirror/mode/sql/sql.js'// 加提醒的援用import 'codemirror/addon/hint/show-hint.css'import 'codemirror/addon/hint/sql-hint'import 'codemirror/addon/hint/show-hint'export default { name: 'xxx', data() { return { code: '', cmOptions: { tabSize: 4, mode: 'text/x-sql', theme: 'xq-light', styleActiveLine: true, lineNumbers: true, line: true, // 加提醒 hintOptions: { completeSingle: false } }, currentSeletion: '' } }, async mounted() { // 加提醒 this.$refs.cmRef.codemirror.on('inputRead', (cm) => { cm.showHint() }) // 获取选中的内容 this.$refs.cmRef.codemirror.on('cursorActivity', (cm) => { this.currentSeletion = cm.getSelection() }) }}</script><style lang="scss" scoped>.vue-codemirror { border: 1px solid #b9b9b9;}</style>

September 7, 2022 · 1 min · jiezi

关于sql:五分钟了解-Databend-全新-SQL-类型系统

引言类型零碎是数据库的一个重要组成部分,它提供了一种统一的形式来确定 SQL 中的数据类型。类型零碎的设计很大水平影响数据库的易用性和健壮性,一个设计正当且统一的类型零碎容易让使用者判断 SQL 的行为。反之,一个没有通过正式设计的类型零碎会带来各种暗坑和不统一行为在暗中背刺用户。咱们用编程语言举个例子,JavaScript 被诟病的类型零碎总是成为茶余饭后的谈资: 因而咱们心愿在 Databend 中实现一个易于了解而又功能强大的类型推导零碎,为此咱们借鉴了不少优良编程语言的编译器外部设计,而后从中精简出实用于 SQL 应用的子集。下文将会具体开展介绍这个零碎的设计原理。 接口设计"低耦合高内聚" 是咱们常常说的口头禅,讲的是要把做雷同事件的代码归拢到一起,而后定义简略的接口供内部应用。类型推导作为一个绝对简单的零碎,在设计之初须要先定义好对外裸露的接口,也即能做什么以及内部怎么应用。 简略来说,咱们设计的类型推导零碎能够做三件事: 输出 SQL 文本(RawExpr),查看 SQL 是否合乎类型规定,为函数调用抉择适合重载,返回可执行的表达式 (Expr)。输出可执行的表达式和数据,执行而后返回后果。输出可执行的表达式和数据取值范畴(存储在元数据中),返回后果的取值范畴。为此调用者只需: 定义所有可用函数的类型签名、函数定义域到值域的映射、函数执行体。在执行 SQL 或 constant folding 时调用执行器。用布尔 and 函数举个例子,函数定义大抵如下: registry.register_2_arg::<BooleanType, BooleanType, BooleanType, _, _>(    "and",    FunctionProperty::default(),    |lhs, rhs| {        Some(BooleanDomain {            has_false: lhs.has_false || rhs.has_false,            has_true: lhs.has_true && rhs.has_true,        })    },    |lhs, rhs| lhs && rhs,);一个残缺执行的例子: // 将 SQL 表达式文本转为结构化 ASTlet raw_expr = parse_raw_expr("and(true, false)");// 获取内置函数,比方之前的 `and` 函数let fn_registry = builtin_functions();// 查看类型合法性let expr = type_check::check(&raw_expr, &fn_registry).unwrap();// 执行let evaluator = Evaluator {    input_columns: Chunk::new(vec![]),    context: FunctionContext::default(),};let result: Value<AnyType> = evaluator.run(&raw_expr).unwrap();assert_eq!(result, Value::Scalar(Scalar::Boolean(false)));类型推导原理新的类型零碎反对以下数据类型: NullBooleanStringUInt8UInt16UInt32UInt64Int8Int16Int32Int64Float32Float64DateIntervalTimestampArray<T>Nullalbe<T>Variant咱们以一个例子看看类型推导零碎是如何工作的,假如内部输出了一个表达式: 1 + 'foo'类型推导器首先会将表达式转换为函数调用: plus(1, 'foo')而后类型查看器能够简略地推断出常量的类型: 1 :: Int8'foo' :: String通过查问 FunctionRegistry,类型查看器得悉函数 plus 有这些重载: plus(Null, Null) :: Nullplus(Int8, Int8) :: Int8plus(Int16, Int16) :: Int16plus(Int32, Int32) :: Int32plus(Float32, Float32) :: Float32plus(Timestamp, Timestamp) :: Timestamp咱们能够发现,函数 plus 参数类型 Int8 和 String 不能匹配其中任何一个重载,因而类型查看器会返回一个错误报告: 1 + 'foo'  ^ function `plus` has no overload for parameters `(Int8, String)`  available overloads:    plus(Int8, Int8) :: Int8    plus(Int16, Int16) :: Int16    plus(Int32, Int32) :: Int32    plus(Float32, Float32) :: Float32    plus(Timestamp, Timestamp) :: Timestamp但在类型查看中咱们容许一种例外,咱们容许子类型转换为父类型(CAST),这样就能够让函数承受子类型的参数。咱们看这样一个例子: plus(1, 2.0)类型推导器依据规定推导出常量的类型:  1 :: Int8 2.0 :: Float32通过查问 FunctionRegistry,咱们发现函数 plus 有两个重载看似能够应用但又不齐全匹配: (Int8, Int8) :: Int8plus(Float32, Float32) :: Float32这时类型查看器会尝试启用 CAST 规定尽最大可能抉择一个重载。依据 CAST 规定,Int8 能够无损转化成 Float32,因而类型查看器会改写表达式构造而后从新查看类型: plus(CAST(1 AS Float32), 2.0)这样就能顺利通过类型查看了。 泛型新的类型查看器反对在函数签名定义中蕴含泛型,用来缩小须要手动定义的重载函数的数量。比方咱们能够定义一个函数 array_get<T0>(Array<T0>, UInt64) :: T0,它承受一个数组和一个下标,并返回数组中下标对应的元素。 相比上一节中讲到的类型查看,查看含有泛型签名的函数多了一个步骤:抉择一个适合的具体类型替换泛型,替换后的类型须要能够通过类型查看,如果不存在这样的具体类型则返回阐明起因(比方有抵触的束缚)。这个步骤个别称为 Unification,咱们也用一个例子加以阐明: 假如有两个表达式,它们的类型别离是: ty1 :: (X, Boolean)ty2 :: (Int32, Y)如果咱们须要 ty1 和 ty2 领有雷同类型(比方 ty1 是入参表达式类型,ty2 类型是入参签名),unify 会尝试将 X 和 Y 替换为具体类型: let subst: Subsitution = unify(ty1, ty2).unwrap();assert_eq!(subst['X'], DataType::Int32]);assert_eq!(subst['Y'], DataType::Boolean]);对 unify 有趣味的读者能够浏览 type_check.rs 源码。在此举荐一本好书 《Types and Programing Languages》,其中论述了编程语言的类型推导倒退历史,深刻探讨剖析各种推导实践的原理和取舍,各个重要概念都有配套的 toy implementation 作为例子,十分值得失眠时浏览。 ...

September 6, 2022 · 1 min · jiezi

关于sql:2022年8月国产数据库大事记墨天轮

本文为墨天轮社区整顿的2022年8月国产数据库大事件和重要产品公布音讯。 8月国产数据库大事记(工夫线)8月3日音讯,海量数据入围“北京市属国有企业软件正版化产品目录”。这也是数据库产品首次被列入“北京市属国有企业软件正版化产品目录”。 8月4日音讯,近日,亚信科技 AntDB 数据库中标新疆某综合医院“医共体”我的项目。此次签约我的项目,将使AntDB数据库在深入区域综合医改、放慢推动分级诊疗制度建设、推动区域卫生衰弱事业高质量倒退等方面积攒服务教训,进行技术创新,一直推动AntDB在医疗行业获得更多新冲破、新进展。 8月4日,观测云签订CLA协定,正式退出openGauss社区。StoneDB社区与华为openGauss社区互签CLA协定,共建国产开源数据库大生态。 8月6日,鼎韬产业研究院公布了“2021-2022年度最具影响力数字化转型服务商”榜单,易鲸捷作为国内率先发展“银行外围交易系统”试点的数据库厂商,凭借新一代云原生分布式数据库QianBase xTP胜利上榜。 易鲸捷的QianBase xTP数据库冲破了以集中式开源数据库为外围的传统分布式架构技术壁垒,不须要独自部署主节点、治理节点、全局事务节点等繁多角色的计算引擎节点,实现了齐全的分布式架构设计,并内置并行计算能力和主动负载平衡治理能力,针对不同业务应用场景能够无效晋升零碎解决性能,达到传统支流数据库的数倍甚至数十倍的性能。8月8日,国内权威行业钻研与咨询机构Forrester公布寰球Translytical数据平台厂商选型报告《The Translytical Data Platforms Landscape, Q3 2022》,腾讯云数据库胜利入选。值得一提的是,在寰球入选报告的19家数据库厂商中,有4家来自于中国。这意味着,国产数据库正在一点点证实本人,技术实力和场景利用能力的国内认可度在大幅晋升。 8月8日,工业和信息化部公示了2022 年大数据产业倒退试点示范我的项目名单。 天云数据 Hubble 数据库取得国家级重点项目举荐,作为HTAP国产数据库入选工信部 “2022年大数据倒退试点示范我的项目名单”。 达梦公安大数据解决方案胜利入选工信部“2022年大数据产业倒退试点示范我的项目”中“服务业大数据利用方向”我的项目。 8月8日,工信部颁布天津市第一批专精特新“小伟人”复核通过企业名单。GBASE南大通用作为首批入选的国家级专精特新企业胜利通过复核。 8月9日,中国通信标准化协会大数据技术标准推动委员会数据库与存储工作组(CCSA TC601 WG4)联结中国信通院数据库利用翻新实验室(CAICT DBL)在线上召开《开源数据库服务商服务能力分级要求》规范第一次讨论会。 本次会议由中国信通院组织,邀请了来自华为、openGauss开源社区、云和恩墨、甲骨文、新炬网络、爱可生、悦数科技、大应科技、杭州石原子、比智科技、长虹佳华、先智数元等组织的近二十位相干专家,座无虚席,围绕规范框架进行了深刻的探讨。8月11日音讯,日前,市场钻研机构IDC公布《2021年下半年中国关系型数据库软件市场跟踪报告》,阿里云市场份额(传统部署+私有云模式)位居第一,继续领跑国内关系型数据库市场。其中,在私有云市场上,阿里云已间断3年以绝对优势蝉联榜首。 IDC数据显示,阿里云领跑中国关系型数据库市场,2021年度市场份额达到26%,稳中有升。其中,在私有云部署市场上,阿里云份额占据领先地位,间断3年蝉联行业第一,继续彰显当先劣势。8月11日音讯,DolphinDB签约国信证券。国信证券基于 DolphinDB 为量化投研提供算力赋能,包含高频数据存储、实时与历史因子计算,以及应用流数据引擎实现简单业务逻辑。 8月11日,2022世界5G大会黑龙江招商引资我的项目签约典礼上,哈尔滨新区共播种17个我的项目,签约金额31.1亿元。 当天签约的我的项目包含海量数据、人大金仓、浪潮集团、麒麟软件等。 8月12日音讯,近日,浙江智臾科技有限公司(简称 DolphinDB)作为自主研发新一代高性能分布式时序数据库的创新型科技公司,胜利获评2021年度萧山区领军型翻新守业团队。 作为国内当先的时序数据库厂商,DolphinDB 集高性能时序数据库与全面的剖析性能为一体,可用于海量结构化数据的存储、查问、剖析、实时计算,实现 PB 级数据查问毫秒级响应以及简单剖析工作秒级响应,助力企业实时商业决策。8月12日,PingCAP 入选福布斯中国 “2022 中国创新力企业 50 强”。截止目前, TiDB 在 GitHub 上曾经取得超过 32000 个 Star。过来两年,PingCAP 在 2021 寰球数据库开源我的项目活跃度排名中,位列中国第一、寰球第三;同时,在国内权威的“墨天轮国产数据库排行榜”上,TiDB 间断 28 个月排名第一,并长期位居寰球最权威 DB-Engines 关系型数据库排行榜中国数据库第一位。 ...

September 5, 2022 · 2 min · jiezi

关于sql:数聚未来云上新库-亚马逊云科技峰会即将开播免费领取企业上云方案

数据库起源于上世纪70年代,在技术倒退浪潮中历久弥新,已成为IT科技的核心技术之一,撑持着古代社会的经济流动和商业文化。依据中国信通院测算,预计到2025年,寰球数据库市场规模将达到798亿美元。 近年来随着数据库战略地位的晋升,我国数据库产业进入了高速发展期。在2022年8月墨天轮中国数据库风行度排行榜上,共有236个数据库参加排名。目前我国外乡数据库企业类型次要分为四大类,别离是传统厂商、跨界厂商、云厂商以及初创厂商,其中初创厂商次要是以最新一代面向云原生、分布式架构的HTAP数据库以及数仓为主,在产品技术和市场上都开始锋芒毕露。中国数据库产业呈现出百花齐放的新格局,在数据库赛道也呈现投融资热:2022年上半年已有十余家中国数据库厂商融资胜利,这也是资本对中国数据库产业技术以及商业落地的认可。 在“Cloud + Database“ 新的竞争力焦点下,越来越多的厂商纷纷上云。云的诞生缩短了企业与客户之间的间隔,让交付变得标准化,这使得在云端的分布式数据库能够规模化地服务寰球的用户。时机也同样随同着挑战,中国数据库行业产品泛滥,内卷景象难以避免,如何实现差异化竞争,如何在强烈的竞争下放弃守业的初心、潜心积淀产品,如何找到产品打磨的正确办法,如何实现真正的PMF,都是数据库初创企业必须解决的问题。与此同时,竞争强烈的数据库畛域下,“出海”也成为了中国数据库厂商特地是初创企业的抉择。然而“出海“面临着文化差异、平安合规、地缘政治等多重不确定因素,如何胜利出海也是大家外围关怀的问题。 中国数据库初创企业面临着诸多的问题与挑战,针对以上的痛点,亚马逊云科技将于2022年9月1日打造线上【数据库科技盛会】,为初创企业打造全生命周期的需要拆解、解决方案和最佳实际!四位来自初创企业代表也将分享本身产品、业务倒退的故事,用实在案例讲述亚马逊云科技对其业务倒退的助力,同时还有来自靖亚资本、红点中国的两位投资机构合伙人分享投资风向,同时亚马逊云科技也针对数据库初创客户的不同倒退阶段定制了赋能解决方案,以及收费的上云资源搀扶打算,点击即可支付。 扫描下方二维码 直通大咖星散的亚马逊云科技盛会 本次盛会分为七大篇章,将出现哪些精彩内容呢? 重磅嘉宾主题演讲资深投资人解读根底软件投资风向2022有哪些重要的根底软件投资趋势?中美市场倒退差别剖析?中国根底软件初创企业的挑战与时机?靖亚资本合伙人任晓东、红点中国合伙人行将解读投资趋势,面向守业公司代表分享前瞻! 寰球头部数据库企业胜利之道解密放眼寰球,头部数据库企业有哪些胜利打法?这些是否能“为我所用"?亚马逊云科技资深解决方案架构师将解构底层架构的劣势和产品立意的翻新点,大胆预判仍可晋升的组件和性能! 传统数据库的上云之路分享作为传统数据库厂商,为何要上云?又该如何上云?在上云的过程中踩了哪些坑?HashData 副总裁程良和商务拓展总监焦正新将在直播中分享传统数据库的上云之路。 云数据库初创如何借力增长作为Nebula Graph创始人兼 CEO ,叶小萌将分享初创数据库公司的“顶级思维”:如何借力增长,实现弯道超车,若作为后居者,如何超前?若作为并行者,如何减速发力?开源厂商如何做商业化变现?数据库初创与云厂商的竞合关系如何发展?叶总将为您一一揭晓。 上云无方,不走弯路,全生命周期秘诀,等你来拿亚马逊云科技初创企业业务倒退总监孙侠将在盛会上分享成长赋能图谱总结,公布针对数据库客户的不同倒退阶段的赋能解决方案。初创全周期赋能打算准备就绪,剑拔弩张! 云数据库时代,企业继续“稳、优、强”增长解密来自EMQ与Kyligence的高管,将解读公司在优质增长以及第二增长阶段如何进行摸索,在这期间产生了哪些趣味故事,又有哪些踩坑教训帮忙提前“避雷”?让咱们一起解密云数据库时代下的企业外部翻新方法论! 数据库出海攻略解密,助力初创公司出海行亚马逊云科技高级平安合规专家周盈,将分享出海时机与合规认证防踩坑指南,为初创公司在数据库出海摸索之路保驾护航,满足你的既要,又要,还要! 直播间双重好礼相送好礼一 报名前30位,送收费的根底云服务和常见解决方案线下培训名额。名额有限,欲报从速,具体的培训工夫会另行告知。好礼二 现场发问环节抽奖10位,赢取精美礼品一份(亚马逊定制书包、T恤)点击链接即可报名参会:https://www.awsevents.cn/registerSignUp.aspx?code=19f0e94b45944c3a9d726d4e785cff50&s=7846&smid=13526

August 26, 2022 · 1 min · jiezi

关于sql:Hive时间查询函数大全

常常用到hive的日期查问、日期转换以及日期计算的函数,特此记录,以便查阅!获取以后工夫查问以后日期 select current_date > 2022-04-26查问以后工夫戳 select unix_timestamp()> 1650977624日期计算日期加减天数加几天:date_add(A,B)减几天:date_sub(A,B)参数阐明:A参数能够是date,string,timestamp,格局必须是YYYY-MM-DD或者 YYYY-mm-dd hh:mm:ss,否则会返回null;B参数代表要加减的天数,正负数都可,date_add函数中负数代表加,正数代表减样例: select date_add('2020-09-01',1)> 2020-09-02select date_sub('2020-10-01 12:30:20',1)> 2020-09-30 12:30:20日期加减月份add_months(A,B)参数阐明:第一个参数能够是date,string,timestamp,格局必须是YYYY-MM-DD,第二个参数代表要加减的月份数 select add_months('2022-05-20',-2)> 2022-03-20求两个日期之间的天数差date_diff(A,B)参数阐明:A、B以是date,string,timestamp,格局必须是YYYY-MM-DD或者 YYYY-mm-dd hh:mm:ss,函数返回 A-B 的天数 select datediff('2022-02-20','2022-04-26')> -65求两个日期之间的月份差 select months_between('2018-02-01','2018-07-04')> -5.095select floor(months_between('2018-02-01','2018-07-04')) > -5取年、月、日 select year('2022-04-26') > 2022select month('2022-04-26') > 4select day('2022-04-26') > 26select hour('2022-04-26 12:20:00') > 12select minute('2022-04-26 12:20:00') > 20日期转unix_timeunix_timestamp(A,B)A能够是varchar,string,能够是date或者timestamp,若格局是YYYY-MM-dd hh:mm:ss,则只须要一个参数,否则B参数需指定第一个日期的日期格局 select unix_timestamp('2021/09/01','YYYY/MM/DD')> 1608998400select unix_timestamp('2021-09-01 12:00:00')> 1630468800从unix_time工夫戳转日期函数:from_unixtime(A,B)A是unixtimestamp,B是要转换成的日期格局,且第一个参数须是10位整数,返回的数据类型是string select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss')> 2022-05-20 17:56:47不同日期格局之间进行转换,能够通过unixtime函数转换,先转成unix timestamp,再转回其它格局的日期 select from_unixtime(unix_timestamp('2022/4/26','YYYY/mm/dd'),'YYYY-mm-dd') > 2022-04-26字符串日期类型转换将字符串转成date和timestamp,参数必须是 yyyy-mm-dd 或者 yyyy-MM-dd HH:mm:ss,否则后果都是null ...

August 25, 2022 · 1 min · jiezi

关于sql:详解-Sqllogictest

写作背景之前的文章《如何为 Databend 增加新的测试》介绍了 Databend 如何进行测试,其中 SQL 的测试方法中提到了 sqllogictest,大家对这种新引入的测试方法比拟感兴趣,但以后介绍这个的中文材料很少,因而咱们整顿下近期的一些工作和思考,跟大家分享一下 sqllogictest 的设计、实现及利用。 对于 sqllogictest数据库质量保证测试维度和测试覆盖率是保障数据库品质的要害,测试维度包含 单元测试、含糊测试、功能测试(sqllogictest 在这里)、端到端(e2e)测试、性能测试等。数据库功能测试计划外围是通过执行 SQL 语句取得返回值,将返回值与预期进行比照,通常存在几个须要思考的问题: 如何设计用例的格局?如何比对后果?少数计划间接保留后果文件,无奈辨别具体 SQL 的执行后果,只能通过在用例之间减少输入的形式,导致用例不直观;不同客户端或者数据库的差别如何解决?如不同的客户端对返回内容格式化形式有差别,不同的数据库对某些类型输入有差别;倒退简介sqllogictest 最早是 SQLite 进行测试的工具,由 SQLite 的作者 D. Richard Hipp(理查德 希普)设计开发。对于相干的设计理念能够在 https://www.sqlite.org/sqllog... 找到。 sqllogictest 的指标是保障数据库引擎执行后果是正确的。因而它不会关注其余方面的问题,诸如性能、索引优化、磁盘内存的应用状况、并发和锁等。 目前支流的数据库都有本人的 sqllogictest 测试工具和测试用例,测试用例的语法略有差别并且不能相互兼容,测试工具的实现形式也有所区别: YDB 应用 python 实现CockroachDB应用 go 实现Databend 为何引入 sqllogictestDatabend 原来有一套性能测试工具,借鉴 clickhouse 的测试方法,将性能测试用例分为 stateless 测试和 stateful 测试。通过 Databend-test(python 实现)来执行,用例通过脚本的形式编写(或者一个 SQL 文件),用例的预期后果写成同名不同后缀名的文件并将两者的输入进行 diff 比照。如果雷同则认为后果正确。这种测试方法对谬误用例的编写和批改不敌对外,此外 Databend 反对多套不同的 handler(如 mysql、http、clickhouse)这些 handler 都有被测试的需要,有点像测试不同的数据库。但原来的测试方法没方法解决这个问题,因而咱们开始寻找一种能解决这些问题的测试方法和工具。 Databend 如何实现 sqllogictest尽管都叫 sqllogictest,但实现差别很大,这种差别不仅在用例语法的反对上,实现应用的技术栈及整个工具的实现水平区别也很大。导致不论是测试集还是工具自身,很难开箱即用。通过对不同实现计划的剖析比照,咱们发现 sqllogictest 的外围性能需要不多、整个开源社区实现决裂无奈称心的间接用、自身随着测试工作的推动越来越多的需要会退出进来导致大量的定制化开发。最终咱们抉择应用 python 本人造轮子。 ...

August 24, 2022 · 3 min · jiezi

关于sql:105份墨天轮国产化迁移干货文档汇总含TiDBopenGauss上云等

以后国产数据库产品百花齐放,随着政策的推动、技术的迭代以及市场需求的逐渐扩充,数据库国产化正在减速进行中,有越来越多的金融、通信、制作、互联网等企业机构以及政府机关单位将业务零碎从Oracle、MySQL等国外数据库迁徙到了国产数据库上,实现了对科技强国建设的助力,同时也为其余企业的国产化提供了实际参考。 为帮忙大家理解国产数据库迁徙的操作实际,本文整顿了墨天轮排行榜上排名靠前的几个数据库相干的迁徙工具介绍、国产化迁徙实操手册与具体迁徙案例材料,其中包含具体的迁徙操作步骤、迁徙计划制订、不同企业迁徙的选型思考与迁徙历程、优化过程等,望对大家起到参考作用。 目录导航TiDBopenGauss/MogDB达梦数据库OceanBase华为云GaussDB阿里云PolarDB腾讯云TDSQL其余TiDBTiDB DM 2.0 GA,数据迁徙不必愁 TiDB 数据库迁徙工具 DM 2.0(MySQL→TiDB) 体验TiDB V6.0.0 之TiDB的数据迁徙工具DM-WebUI TiDB数据库周边工具介绍(含DM、TiCDC) Oracle 到 TiDB 迁徙实施方案 Oracle 到 TiDB 的迁徙计划(上、中、下)三合一—— Oracle 信息收集、剖析与迁徙评估、数据库对象革新与利用适配、数据迁徙与生产切换 怎么将数据从Oracle迁徙到TiDB 初探DM-迁徙 MySQL 到 TiDB 【案例分享】TiDB 数据库迁徙工具 DM 在微众银行的实际(MySQL→TiDB) 【案例分享】日本大型挪动领取软件 PayPay 的 TiDB 迁徙实际(亚马逊AWS→TiDB) 【案例分享】从 SQL Server 到 TiDB 迁徙实际-汽车之家 张帆 【案例分享】从 Exadata 到 TiDB,中通快递 HTAP 实际-中通 朱友志 【案例分享】TiDB 在中国电信翼领取的大规模深度实际-天翼领取 刘宇 【案例分享】TiDB 在金融行业要害业务场景的实际(上篇) 【案例分享】TiDB 在金融行业要害业务场景的实际(下篇) openGauss/MogDBopenGauss/MogDB数据库之Oracle搬迁(Ora2Pg工具) 如何应用Ora2Pg迁徙Oracle数据库到openGauss pg_chameleon 迁徙 MySQL 数据库至 openGauss 如何应用pg_chameleon迁徙MySQL数据库至openGauss 如何应用 pgloader 迁徙 MySQL 数据库至 openGauss ...

August 24, 2022 · 2 min · jiezi

关于sql:免费下载-冬季实战营第三期MySQL数据库进阶实战

简介:《夏季实战营第三期:MySQL数据库进阶实战》此本电子手册提供一个Linux零碎。首先,装置mysql;而后,执行mysql的罕用操作;最初,学习根本的SQL语句MySQL是一种关联数据库管理系统,关联数据库将数据保留在不同的表中,而不是将所有数据放在一个大仓库内,这样就减少了速度并进步了灵活性。 MySQL所应用的 SQL 语言是用于拜访数据库的最罕用标准化语言。MySQL软件采纳了双受权政策,它分为社区版和商业版,因为其体积小、速度快、总体领有成本低,尤其是开放源码这一特点,个别中小型网站的开发都抉择 MySQL 作为网站数据库。因为其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。 《夏季实战营第三期:MySQL数据库进阶实战》此本电子手册提供一个Linux零碎。首先,装置mysql;而后,执行mysql的罕用操作;最初,学习根本的SQL语句。 点击收费下载 夏季实战营第三期:MySQL数据库 学习完本电子手册之后,你将轻松把握MySQL装置、日常MySQL运维治理、 根本SQL语句的应用等常识。手把手教你疾速部署MySQL数据库,由浅及深,逐步晋升开发者的入手实操能力。 阿里云开发者社区藏经阁,技术人在线图书馆,开发者必读资料库。会集阿里工程师技实战精髓,点击即可取得海量收费技术精品材料、电子手册、试读图书等。 点击查看:https://developer.aliyun.com/ebook 版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

August 11, 2022 · 1 min · jiezi

关于sql:独家下载阿里云MaxCompute百问百答-解锁SaaS模式云数据仓库尽在本电子手册

简介:为了帮忙MaxCompute用户更顺畅的应用产品,阿里云MaxCompute团队基于开发者社区和其余渠道总结演绎出相干性能点的常见问题,联结阿里云开发者社区独特打造了《阿里云MaxCompute百问百答》电子手册,心愿能够给正在学习和应用MaxCompute产品的用户提供一些帮忙\>>快来收费下载《阿里云MaxCompute百问百答》!<< 为了帮忙MaxCompute用户更顺畅的应用产品,阿里云MaxCompute团队基于开发者社区和其余渠道总结演绎出相干性能点的常见问题,联结阿里云开发者社区独特打造了《阿里云MaxCompute百问百答》电子手册,心愿能够给正在学习和应用MaxCompute产品的用户提供一些帮忙 点击收费下载 《阿里云MaxCompute百问百答》 2021年3月,以 MaxCompute 为外围代表的阿里云数据仓库产品凭借产品现有能力、产品策略、市场体现三项劣势,进入 Forrester Wave 2021 Q1云数据仓库卓越表现者象限,成为入选此次评测的惟一中国厂商。数以万计的企业正在基于MaxCompute构建本人的大数据平台,挖掘数据价值,发现业务时机,洞悉业务前景,预感潜在危险,助力企业业务衰弱蓬勃发展。 阿里云 MaxCompute 作为一款功能强大的SaaS模式云原生数据仓库产品,曾经领有了宏大的用户群体。本电子书旨在帮忙用户疾速理解 MaxCompute,无效升高学习老本。本书蕴含 MaxCompute 产品外围性能、产品架构、典型场景以及生态体系,同时对应用过程中可能遇到的200+常见问题的进行逐个解答。不仅帮您直观全面的理解 MaxCompute,更从 MaxCompute 客户端(odpscmd)、DataStudio、MaxCompute Studio多个工具登程,解答包含 MaxCompute SQL、MaxCompute Spark、产品计费、元数据(Information Schema)、内部表、SDK等17大性能点的常见应用问题。 心愿本书可能助您疾速上手 MaxCompute,用好 MaxCompute,最大限度施展数据的价值,撑持业务增长。 精彩领先看 MaxCompute外围性能 MaxCompute产品架构 MaxCompute产品劣势 MaxCompute外围场景 云数据仓库 湖仓一体 日志大数据分析 MaxCompute生态 商业智能(BI)工具 数据库管理工具 ETL工具 MaxCompute常见问题 产品简介 MaxCompute相干术语、数据类型、我的项目空间等相干问题 筹备工作 MaxCompute客户端、Endpoint、Project等相干问题 疾速入门 MaxCompute根底SQL操作以及罕用性能相干问题 工具及下载 MaxCompute客户端、MaxComputeStudio、MMA等工具相干问题 常用命令 MaxCompute根底命令、生命周期、正则表达式等命令相干问题 数据同步 数据上传到MaxCompute过程中相干问题 产品计费 MaxCompute计费相干问题 平安治理 MaxCompute权限、受权、白名单等相干问题 内建函数 MaxCompute罕用内建函数应用问题 内部表 MaxComputeOSS内部表应用相干问题 元数据(InformationSchema) MaxComputeInformationSchema常见应用问题 SQL MaxComputeSQL语法、报错、应用等相干问题 PyODPS Python连贯MaxCompute常见应用问题 JavaSDK ...

August 11, 2022 · 1 min · jiezi

关于sql:索引选择度高性能SQL的关键

英文版刊载于Flexport Engineering Blog 简介个别普遍认为索引能进步SQL性能,但这并不总是成立, 因为只有高效的索引能力真正进步SQL性能。事实上,过多的索引甚至会减慢写操作的速度。咱们之前的文章探讨了一个低效的索引是如何拖慢零碎性能的,但那里的示例是不罕用的GIN索引。这一次,咱们介绍的示例是低效的BTREE索引。在这两种示例中,高性能SQL的独特要害都是索引抉择度。 提醒:若一个索引能帮忙与它无关的查问在索引扫描中过滤掉大部分的行,就说这个索引有较好的抉择度。有较差的抉择度的索引常常会使索引扫描的性能升高到全表扫描的程度。 问题Flexport平台让Flexport经营人员(客户经营团队和供应链经营团队),客户和货运合作伙伴能在咱们的各个应用程序中发送音讯。当一个音讯被发送,它的接管方会收到告诉。Flexport的一个经营人员有可能每周收到几千个告诉,为了帮忙他们治理好告诉,咱们开发了一些工具如:导航栏的“告诉”下拉菜单,容许用户按多种条件(工夫范畴、货运信息、客户信息)来查问相干告诉的“收件箱”。 值得器重的是,零碎设计应满足将来的业务规模而不产生性能降级。这些工具面对着残酷的性能挑战:因为业务的迅速增长,有些用户收到了几百万个告诉,于是他们的查问耗时居然超过了1分钟。 表构造告诉表的构造大抵如下所示:上图的表中各个列的含意是: id:主键user_id:外键,指向接管方用户notification_type_id:外键,指向NotificationTypesubject_id:外键,指向执行了某个操作而引起此告诉的用户object_id:外键,指向被执行了某个操作而引起此告诉的对象created_at:告诉创立工夫updated_at:告诉批改工夫read_at:告诉被标为“已读”的工夫details:告诉的文字内容接下来,咱们具体介绍几个慢SQL的例子和解决方案(文中的SQL和查问打算都有所批改,以暗藏商业敏感信息)。 例1: 未读告诉计数SQLSELECT COUNT(*)FROM notificationsWHERE notifications.user_id = ? AND read_at IS NULL“read_at IS NULL”意为“未读”,因而这个查问会计算某用户的未读告诉数。在user_id列上有一个BTREE索引服务于此查问。 一个用户的告诉数能够是几千到几百万。对于少数用户,数量是几千,因而这个查问很快(毫秒级)。但客户经营团队的多数用户可有几百万个告诉,因而这个查问很慢(秒级乃至分钟级),因为索引扫描须要更多工夫来遍历几百万个索引项。能够称之为“数据歪斜”问题。 解决方案咱们发现只有不到10%的告诉是未读的,因而索引扫描能够靠跳过已读告诉来提速。PostgreSQL反对一种名为“局部索引”的个性。咱们把user_id索引替换为“user_id WHERE read_at IS NULL”的局部索引。这个新索引只记录那些满足“read_at IS NULL”条件的行,因而大部分的行都被排除了,索引的大小缩小了90%。由此,这个查问就总是毫秒级的快了。 例2: 最近告诉列表SQLSELECT *FROM notificationsWHERE notifications.user_id = ?ORDER BY notifications.created_at descLIMIT ? OFFSET ?这是一个分页查问,因而它查问的是某用户的最近一些告诉(按创立工夫降序排列)。与计数的例子类似,这个查问也是对少数用户快而对多数用户慢。又是“数据歪斜”问题。 解决方案咱们发现(user_id, created_at)上的“多列索引”比user_id单列索引体现得更好。索引项在被存储时是按值排序的。在这个查问中,对于多列索引的扫描会在此索引空间中先定位到满足user_id值的索引子集,而后依序遍历这个按created_at值排序的子集并且在找到足够多(满足LIMIT子句)的项后立刻进行。请留神,此前已有一个(user_id, object_id, created_at)索引,但它的效率不如(user_id_ created_at)索引,因为其中的object_id列岂但无用甚至无害于这个查问。在它这,满足user_id值的索引项子集不是按created_at排序,而是按(object_id, created_at)的组合排序的,因而对它的遍历(冀望按created_at程序)会在不同的object_id上跳来跳去。 多列索引(又称为复合索引或组合索引)由一组列(list of columns)组成。这些列的排列程序很重要。正确的索引设计应该依照想要应用的搜寻模式来从左到右摆放这些列。个别地,若一个查问用一些列来过滤,又用另一些列来排序,那么你能够创立一个多列索引,申明中靠左边的是用于过滤的列,靠右边的是用于排序的列。 一个教训法令是,把首要的过滤条件放在多列索引中的第一位,它之后的列用于辅助过滤。例如用户姓名表偏向于采纳形如(last_name, first_name)的多列索引。 例3:按多种条件(工夫范畴、货运信息、客户信息)来查问相干告诉SQLSELECT notifications.*FROM notificationsINNER JOIN notification_types ON notification_types.id = notifications.notification_type_idJOIN messages ON messages.id = notifications.object_id AND notification_types.object_type = ‘message’JOIN shipments ON messages.messageable_id = shipments.id AND messages.messageable_type = ‘Shipment’WHERE notifications.user_id = ?AND notification_types.domain = ?AND shipments.status = ?AND shipments.client_id IN (?)AND (messages.assignee_id = ? OR messages.assignee_id IS NULL)AND messages.created_at >= ?AND notifications.created_at >= ?ORDER BY notifications.created_at DESC, notifications.id DESC这个查问很简单。与之前的查问不同,这个查问即便以雷同的参数调用(当然,是对于同一个用户,因为user_id也雷同)也时快时慢。 ...

July 31, 2022 · 3 min · jiezi

关于sql:聊聊sql优化的15个小技巧

前言面试材料、经验总结,开发技巧,更多干货内容在:https://github.com/dvsusan/susanSayJavasql优化是一个大家都比拟关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到。 如果某天你负责的某个线上接口,呈现了性能问题,须要做优化。那么你首先想到的很有可能是优化sql语句,因为它的革新老本绝对于代码来说也要小得多。 那么,如何优化sql语句呢? 这篇文章从15个方面,分享了sql优化的一些小技巧,心愿对你有所帮忙。 1 防止应用select *很多时候,咱们写sql语句时,为了不便,喜爱间接应用select *,一次性查出表中所有列的数据。 反例: select * from user where id=1;在理论业务场景中,可能咱们真正须要应用的只有其中一两列。查了很多数据,然而不必,白白浪费了数据库资源,比方:内存或者cpu。 此外,多查出来的数据,通过网络IO传输的过程中,也会减少数据传输的工夫。 还有一个最重要的问题是:select *不会走笼罩索引,会呈现大量的回表操作,而从导致查问sql的性能很低。 那么,如何优化呢? 正例: select name,age from user where id=1;sql语句查问时,只查须要用到的列,多余的列基本无需查出来。 2 用union all代替union咱们都晓得sql语句应用union关键字后,能够获取排重后的数据。 而如果应用union all关键字,能够获取所有数据,蕴含反复的数据。 反例: (select * from user where id=1) union (select * from user where id=2);排重的过程须要遍历、排序和比拟,它更耗时,更耗费cpu资源。 所以如果能用union all的时候,尽量不必union。 正例: (select * from user where id=1) union all(select * from user where id=2);除非是有些非凡的场景,比方union all之后,后果集中呈现了反复数据,而业务场景中是不容许产生反复数据的,这时能够应用union。 3 小表驱动大表小表驱动大表,也就是说用小表的数据集驱动大表的数据集。 如果有order和user两张表,其中order表有10000条数据,而user表有100条数据。 这时如果想查一下,所有无效的用户下过的订单列表。 能够应用in关键字实现: select * from orderwhere user_id in (select id from user where status=1)也能够应用exists关键字实现: ...

July 25, 2022 · 3 min · jiezi

关于sql:独家下载阿里云MaxCompute百问百答-解锁SaaS模式云数据仓库尽在本电子手册

简介:为了帮忙MaxCompute用户更顺畅的应用产品,阿里云MaxCompute团队基于开发者社区和其余渠道总结演绎出相干性能点的常见问题,联结阿里云开发者社区独特打造了《阿里云MaxCompute百问百答》电子手册,心愿能够给正在学习和应用MaxCompute产品的用户提供一些帮忙\>>快来收费下载《阿里云MaxCompute百问百答》!<< 为了帮忙MaxCompute用户更顺畅的应用产品,阿里云MaxCompute团队基于开发者社区和其余渠道总结演绎出相干性能点的常见问题,联结阿里云开发者社区独特打造了《阿里云MaxCompute百问百答》电子手册,心愿能够给正在学习和应用MaxCompute产品的用户提供一些帮忙 点击收费下载 《阿里云MaxCompute百问百答》 2021年3月,以 MaxCompute 为外围代表的阿里云数据仓库产品凭借产品现有能力、产品策略、市场体现三项劣势,进入 Forrester Wave 2021 Q1云数据仓库卓越表现者象限,成为入选此次评测的惟一中国厂商。数以万计的企业正在基于MaxCompute构建本人的大数据平台,挖掘数据价值,发现业务时机,洞悉业务前景,预感潜在危险,助力企业业务衰弱蓬勃发展。 阿里云 MaxCompute 作为一款功能强大的SaaS模式云原生数据仓库产品,曾经领有了宏大的用户群体。本电子书旨在帮忙用户疾速理解 MaxCompute,无效升高学习老本。本书蕴含 MaxCompute 产品外围性能、产品架构、典型场景以及生态体系,同时对应用过程中可能遇到的200+常见问题的进行逐个解答。不仅帮您直观全面的理解 MaxCompute,更从 MaxCompute 客户端(odpscmd)、DataStudio、MaxCompute Studio多个工具登程,解答包含 MaxCompute SQL、MaxCompute Spark、产品计费、元数据(Information Schema)、内部表、SDK等17大性能点的常见应用问题。 心愿本书可能助您疾速上手 MaxCompute,用好 MaxCompute,最大限度施展数据的价值,撑持业务增长。 精彩领先看 MaxCompute外围性能 MaxCompute产品架构 MaxCompute产品劣势 MaxCompute外围场景 云数据仓库 湖仓一体 日志大数据分析 MaxCompute生态 商业智能(BI)工具 数据库管理工具 ETL工具 MaxCompute常见问题 产品简介 MaxCompute相干术语、数据类型、我的项目空间等相干问题 筹备工作 MaxCompute客户端、Endpoint、Project等相干问题 疾速入门 MaxCompute根底SQL操作以及罕用性能相干问题 工具及下载 MaxCompute客户端、MaxComputeStudio、MMA等工具相干问题 常用命令 MaxCompute根底命令、生命周期、正则表达式等命令相干问题 数据同步 数据上传到MaxCompute过程中相干问题 产品计费 MaxCompute计费相干问题 平安治理 MaxCompute权限、受权、白名单等相干问题 内建函数 MaxCompute罕用内建函数应用问题 内部表 MaxComputeOSS内部表应用相干问题 元数据(InformationSchema) MaxComputeInformationSchema常见应用问题 SQL MaxComputeSQL语法、报错、应用等相干问题 PyODPS Python连贯MaxCompute常见应用问题 JavaSDK ...

July 25, 2022 · 1 min · jiezi

关于sql:Kyligence-入选-Gartner-2022-数据管理技术成熟度曲线报告

往年 6 月,寰球权威的技术钻研与征询公司 Gartner 公布《2022 数据管理技术成熟度曲线报告》(Hype Cycle for Data Management, 2022)。企业级智能多维数据库服务商 Kyligence 凭借技术积攒和产品劣势,再次胜利入选“对接对象存储的 SQL 查问接口” 代表厂商。 此前,Kyligence 已间断屡次入选 Gartner《中国 ICT 技术成熟度曲线报告》、《数据管理技术成熟度曲线报告》、《服务自助式剖析的语义层钻研报告》等报告。往年再次入选 Gartner 报告,是对 Kyligence 数据服务与治理能力更加全面的认可。 Kyligence 提供的对立 SQL 接口及服务,可能在云端对象存储(如 AWS S3、Azure ADLS 等)、多维立方体、高速索引及底层数据源上进行智能路由,为下层剖析利用提供老本最优的高性能查问能力。同时,Kyligence 反对无缝对接用户相熟的 BI 工具,并通过口径对立的业务语义层,帮忙企业无效缩小 IT 运维老本,升高数据应用门槛,助力企业充沛开掘最有价值数据。 Gartner 采纳技术成熟度曲线来剖析各行业的倒退,针对技术创新的发展趋势进行评估和预测,以帮忙寰球市场理解新兴及成熟数据管理技术或平台的最新演进。《2022 数据管理技术成熟度曲线报告》新引入了 FinOps、数据的可观测性、数据市场与替换以及数据网格(Data Mesh)等概念,均和分布式架构和简单生态系统的数据管理密切相关。该报告指出,数据管理平台会持续在以下四个方向放弃疾速倒退: · 云上数据管理 · 增强型数据管理 · 数据管理流动 · 数据管理剖析零碎 作为数据管理与服务畛域的当先企业,Kyligence 置信在数据湖之上提供简化的数据分析能力、自动化构建能力、自动化举荐能力是行业的发展趋势。将来,Kyligence 将继续为企业简化数据湖上的多维数据分析而致力,一直升高用户应用数据的门槛,助力寰球客户的数字化转型。 对于 Kyligence上海跬智信息技术有限公司 (Kyligence) 由 Apache Kylin 开创团队于 2016 年开办,致力于打造下一代企业级智能多维数据库,为企业简化数据湖上的多维数据分析(OLAP)。通过 AI 加强的高性能剖析引擎、对立 SQL 服务接口、业务语义层等性能,Kyligence 提供老本最优的多维数据分析能力,撑持企业商务智能(BI)剖析、灵便查问和互联网级数据服务等多类利用场景,助力企业构建更牢靠的指标体系,开释业务自助剖析后劲。 ...

July 25, 2022 · 1 min · jiezi

关于sql:SQL笔记

Limit Offsetreturn only 10 records, start on record 16 (OFFSET 15)SELECT * FROM Orders LIMIT 10 OFFSET 15Orderorder by points desc, goal_diff desc, team_name;Joincan have >, < conditions in join SELECT a.NAME AS EmployeeFROM Employee AS a JOIN Employee AS b ON a.ManagerId = b.Id AND a.Salary > b.Salary;having select Emailfrom Persongroup by Emailhaving count(Email) > 1;windowrank() over (partition by departmentId order by salary desc) as salaryRankdense_rank()lead(num,1) over(order by id) as next_num_1lead(num,2) over(order by id) as next_num_2lag(temperature) over (order by recordDate) as previous_temperatureCTE common table expressionwith t1 as (...)select * from t1with t1 as (...),t2 as ()select * from t1 union all select * from t2 ...

July 22, 2022 · 2 min · jiezi

关于sql:SQL学习笔记参考SQL入门经典第5版

我为何要写此系列文章我对例子敏感,对形象的总结不敏感,而很多书和教材不同,案例不够多,配图不够多,然而书籍自身很好,所以我要读,然而读懂须要大量的练习,写出对应的代码。因而我把我写出的代码实现和用本人的逻辑总结的话写出系列文章供大家学习,可当做书籍的辅导书,提供课后练习和配套案例。我如何写本系列文章提供3倍于书籍的代码案例,比喻例子,更生活化靠近国人的解说。外围是帮忙我的了解,也帮忙大家了解和助记,加深印象。《sql入门经典》介绍这本书十分厚,有些艰涩难懂尽管是入门书,但看着这么多页,不免有些想回避,因而我用更容易了解,更简练的语言,更多的代码案例,解说本书内容

July 21, 2022 · 1 min · jiezi

关于sql:开发了一堆报表没人用原因就在这儿

某位大佬曾说过,钱、成就感和良好的人际关系至多占两样,能力保持打工。那怎么样在工作中能力避开升高成就感的大坑?本文,从报表开发者的角度,介绍报表开发工作者盘活报表,晋升工作价值的重要思路,一起来看! 一.案例背景佳禾食品工业股份有限公司是一家集研发、生产和销售于一体的大型现代化食品企业,公司营销服务笼罩寰球20多个国家和地区。随着业务的高速倒退,佳禾食品于2021年实现上市,同时,为推动业务进一步倒退,信息管理部开始了企业数字化建设。在数字化建设过程中,信息管理部周经理发现,企业的报表资产治理不够清晰-业务不晓得有哪些报表能够看,开发也不晓得有哪些报表能够复用。这导致不少重要报表曝光量低,类似报表的反复开发工作多,报表的产出价值也越来越低,信息管理部的成员始终处在事倍功半的不良循环中。 二.报表资产治理遇难题,迎难而上 01| 报表资产不清晰,反复报表多数字化建设至今,佳禾食品至多有200多张报表,涵盖了业务的方方面面。但无论是报表使用者(业务部门)、报表剖析者(信息管理部门的报表分析师)或者是报表制作者(信息管理部门的IT),大家都对报表库的整体现况并不齐全理解。在报表的更新迭代过程中,因为不分明其余报表,导致的报表反复开发状况频发,而人员的到职也加剧了报表资产不够清晰的水平。 02 |开发需要治理不对立,二次加工多在过后,佳禾食品的报表需要在提出、收集、解决三个环节是彼此割裂的–业务部门在应用决策零碎时提出报表需要,信息管理部门应用Excel表格收集需要,并在处理过程中用OA零碎进行工时录入。后续,信息管理部门如果须要对需要解决工作进行复盘的话,就须要从三个零碎里别离收集信息再进行二次整合。 03 | 需要过程不通明,解决效率慢周经理反馈,以前数据需要大多都是通过组织会议或者是一对一口头沟通进行对接,沟通的内容没有留存,探讨的后果也没有记录。所以,信息管理部门的报表分析师没有方法被动理解IT需要解决的进度,整体的解决效率也偏慢。 三.携手数知鸟,难题迎刃而解 接触到数知鸟之后,佳禾食品搭建了一套适宜本人的需要治理思路,联合数知鸟需要类型、集成决策零碎、集成企业微信等特色劣势性能,一一化解了报表治理中的各个难题。 01 | 集成决策零碎–全局把握报表资产,过滤“死”报表周经理将数知鸟与帆软决策零碎进行集成,在数知鸟中主动同步所有报表目录,并将指标与报表进行双向关联,业务在提交报表需要时,能够在「指标关联报表」中依照指标查问,查看是否已有相干的可用报表,防止反复需要;开发也能够用这个形式查问是否有可复用的报表,防止了低价值的反复开发。此外,数知鸟能够同步报表访问量。周经理以报表访问量、「指标关联报表」为根据,筛选出无拜访、与其余报表反复内容多的报表,进行对该类“死”报表的保护,开释更多人力。 02 | 个性化需要治理流程–对立治理,确保交付成果,防止二次解决口头沟通容易脱漏内容,也没有方法记录下来,用于后续追溯;跨零碎的记录也容易有偏差,佳禾食品应用数知鸟后,能够将需要提出、审批、解决流程对立起来。业务部门在应用决策零碎时就能够间接针对有问题的报表提出优化需要。需要提交后主动流入数知鸟需要池,信管部能够在数知鸟上,依据理论状况对不同类型的需要指定流程。针对简单需要,信管部还个性化地增加了给相干部门协同确认的流程,确保了需要交付的成果。此外,工时的录入也能够间接在数知鸟上进行,这一步节俭了跨零碎导出数据进行二次加工统计的工夫。 03 | 集成企业微信–及时通明需要解决进度,晋升解决效率当初,数知鸟上需要解决的动静音讯都会在企业微信上收到告诉,需要提出人能够更好理解本人需要的解决进度。同时,对于需要解决人来说,数知鸟上的代办需要和行将到期的需要也会推送企业微信告诉,这也晋升了需要解决人的响应效率。 四.总结与瞻望佳禾食品通过引入数知鸟需要治理平台,实现了平台连贯IT、业务部门、需要部门以及其余需要相干部门,通过需要提出状况、需要解决进度状况等数字显示,做到了需要全链数字化。IT组长不必纠结员工手里的工作安顿,IT工程师不会不分明手里的需要,业务单位不用焦虑IT解决进度, 企业不必纠结相干信息披露是否合规。通过简略、易用、直观、无效的需要治理,大大晋升了公司外部之间的合作效率。 同时,通过数知鸟需要治理平台的引入,真正做到了佳禾的报表常识积淀——每一张报表的全生命周期治理被记录得东倒西歪,人员的异动和需要的变更不再是制约每一张报表成长的不利因素。咱们冀望并置信携手数知鸟平台,佳禾食品的数字化会越走越稳。

July 20, 2022 · 1 min · jiezi

关于sql:提高分层-SQL-结构的性能

## 上下文 我和我的团队最近在一个领有数百万页面的足球迷网站上工作。该网站的想法是成为足球支持者的权威资源,尤其是在投注方面。数据库和[应用程序架构]不是特地简单。这是因为调度程序负责定期从新计算简单数据并将其存储在表中,这样查问就不用波及[SQL 聚合]。因而,真正的挑战在于[非功能性需要],例如性能和页面加载工夫。 应用领域体育行业有多个数据提供者,每个提供者都为其客户提供不同的数据集。具体来说,足球行业有四种类型的数据: 传记数据:身高、宽度、年龄、他们效劳的球队、取得的奖杯、取得的集体奖项以及足球运动员和教练。历史数据:过来较量的后果和那些较量中的事件,如进球、助攻、黄牌、红牌、传球等。以后和将来数据:以后赛季的比赛结果和这些较量中产生的事件,以及将来较量的表格。实时数据:正在进行的游戏的实时后果和实时事件。咱们的网站波及所有这些类型的数据,特地关注出于 SEO 起因的历史数据和反对投注的实时数据。 分层表构造因为我签订了NDA ,我无奈与您分享整个数据结构。同时,理解足球赛季的构造就足以理解这种现实情况。 具体地说,足球提供商通常按如下形式组织赛季中的较量数据: 节令:有开始和完结日期,通常继续一个日历年较量:较量所属的联赛。竞争的一个实例存在于一个赛季中。[在此处]解无关足球比赛如何运作的更多信息。阶段:与较量相干的阶段(例如,资格赛阶段、淘汰赛阶段、决赛阶段)。每场较量都有本人的规定,很多较量只有一个阶段。组:与阶段相干的组(例如,A 组、B 组、C 组……)。一些较量,例如世界杯,波及不同的个人,每个个人都有本人的球队。大多数较量只有一个通用组实用于所有团队。转:从逻辑的角度来看,对应于一天的较量。它通常继续一周,涵盖了属于一个小组的所有球队的较量(例如,MLS 有 17 场主场较量和 17 场客场较量;因而,它有 34 个回合)。较量:两支足球队之间的较量。如下图[ER 模式]所示,这 5 个表代表了一个分层数据结构: 技术、规格和性能要求咱们应用Express 4.17.2和 Sequelize 6.10作为 ORM(对象关系映射)在 Node.js 和 TypeScript 中开发后端。前端是应用 TypeScript 开发的 Next.js 12应用程序。至于数据库,咱们决定抉择由 AWS 托管的 Postgres 服务器。 该网站在AWS Elastic Beanstalk上运行,前端有 12 个实例,后端有 8 个实例,目前每天有 1k 到 5k 的查看者。咱们客户的指标是在一年内达到每天 60k 的浏览量。因而,该网站必须筹备好在不升高性能的状况下托管数百万月度用户。 该网站应在Google Lighthouse测试中的性能、SEO 和可拜访性方面得分 80+ 。此外,加载工夫应始终小于 2 秒,现实状况下为数百毫秒。真正的挑战在这里,因为该网站蕴含超过 200 万个页面,并且预渲染它们都须要数周工夫。此外,大多数页面上显示的内容都不是动态的。因而,咱们抉择了增量动态再生办法。当访问者点击一个没有人拜访过的页面时,Next.js 会应用从后端公开的 API 检索到的数据生成它。而后,Next.js 将页面缓存 30 或 60 秒,具体取决于页面的重要性。 ...

July 9, 2022 · 1 min · jiezi

关于sql:直播预告|SQL也能玩转工业级机器学习MLOps-meetup-V3带你一探究竟

随着人工智能AI技术的一直倒退,各行各业都在增强对 AI  技术的钻研与遍及。但对于很多企业来说,人工智能的门槛还是太高了!能不能用更简略、易用的编程语言,升高人工智能的门槛,实现工业级别的机器学习 Pipline 呢?答案是:SQL能够! 没错,只用 SQL 也能玩转工业级机器学习「数据加载,荡涤,特色工程,模型训练,端到端提供 API 服务」全流程。2022年7月10日(周日)14:00-17:00 星策社区主办的「 MLOps meetup V3 」将带你一探到底~ 本次 meetup 特邀星策社区发起人、开源软件推动联盟副秘书长-谭中意;开源我的项目OpenMLDB 研发负责人、第四范式零碎架构师-卢冕;百度飞桨(PaddlePaddle)、EDL、SQLFlow、Couler 外围开发贡献者-武毅;Byzer社区PMC、Kyligence技术合伙人、资深数据架构师-祝海林,四位大咖讲师别离分享如何应用SQL解决机器学习各阶段难题。 流动报名: https://6684201514000.huodong... ♂️进群观看直播:https://sourl.cn/y6R9rB

June 28, 2022 · 1 min · jiezi

关于sql:聊聊如何利用p6spy进行sql监控

前言1、p6spy简介P6Spy 是一个框架,无需对现有应用程序进行任何代码更改,即可无缝拦挡和记录数据库数据。通过 P6Spy 咱们能够对 SQL 语句进行拦挡,相当于一个 SQL 语句的记录器,这样咱们能够用它来作相干的剖析,比方性能剖析 2、实现原理p6spy将利用的数据源给劫持了,利用操作数据库其实在调用p6spy的数据源,p6spy劫持到须要执行的sql或者hql之类的语句之后,他本人去调用一个realDatasource,再去操作数据库 3、相干官网文档github:https://github.com/p6spy/p6spy 官网:https://p6spy.readthedocs.io/en/latest/index.html p6spy应用1、在我的项目中的pom引入相干的GAV <dependency> <groupId>p6spy</groupId> <artifactId>p6spy</artifactId> <version>${p6spy.version}</version> </dependency>2、切换我的项目中的jdbc驱动以及数据源改成如下内容 spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: ${DRIVER_CALSS_NAME:com.p6spy.engine.spy.P6SpyDriver} url: ${DATASOURCE_URL:jdbc:p6spy:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai} username: ${DATASOURCE_USERNAME:root} password: ${DATASOURCE_PWD:123456}3、在resource目录下增加spy.properties配置如示例下内容 #3.2.1以上应用modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory#3.2.1以下应用或者不配置#modulelist=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory# 自定义日志打印#logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLoggerlogMessageFormat=com.github.lybgeek.p6spy.extentsion.CustomP6SpyLogger#日志输入到控制台#appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger# 应用日志零碎记录 sql#appender=com.p6spy.engine.spy.appender.Slf4JLoggerappender=com.github.lybgeek.p6spy.extentsion.CustomStdoutLogger# 设置 p6spy driver 代理deregisterdrivers=true# 勾销JDBC URL前缀useprefix=true# 配置记录 Log 例外,可去掉的后果集有error,info,batch,debug,statement,commit,rollback,result,resultset.excludecategories=info,debug,result,commit,resultset# 日期格局dateformat=yyyy-MM-dd HH:mm:ss# 理论驱动可多个#driverlist=org.h2.Driver# 是否开启慢SQL记录outagedetection=true# 慢SQL记录规范 2 秒outagedetectioninterval=24、自定义日志格局【可选】public class CustomP6SpyLogger implements MessageFormattingStrategy { /** * Sql日志格式化 * * @param connectionId: 连贯ID * @param now: 以后工夫 * @param elapsed: 破费工夫 * @param category: 类别 * @param prepared: 预编译SQL * @param sql: 最终执行的SQL * @param url: 数据库连贯地址 * @return 格式化日志后果 */ @Override public String formatMessage(int connectionId, String now, long elapsed, String category, String prepared, String sql, String url) { return StringUtils.isNotBlank(sql) ? " 耗时:" + elapsed + " ms " + now + "\n 执行 SQL:" + sql.replaceAll("[\\s]+", " ") + "\n" : ""; }}在spy.properties中配置自定义日志格局 ...

June 28, 2022 · 1 min · jiezi

关于sql:SQL数据分析实战好用的窗口函数

明天分享SQL的窗口函数根底。 目录: 窗口函数是什么排序函数散布函数前后函数首尾函数聚合函数1. 窗口函数是什么窗口函数,也叫OLAP函数(Online Anallytical Processing,联机剖析解决),能够对数据库数据进行实时剖析解决。 mysql从8.0版本开始反对窗口函数了,明天咱们就是以mysql为例来介绍这个窗口函数的。 窗口其实是指一个记录汇合,而窗口函数则是在满足某些条件的记录汇合上执行指定的函数办法。在日常工作中比拟常见的例子比方求学生的单科成绩排名、求前三名等等之类的。 窗口函数的根本语法如下: <窗口函数> OVER (PARTITION BY <用于分组的列名> ORDER BY <用于排序的列名>)像一些聚合函数如 SUM()、AVG()、COUNT()、MAX()与MIN()等等,以及专用的窗口函数RANK()、DENSE_RANK()与ROW_NUMBER()等等。 2. 排序函数就是进行排序操作,显示排名 RANK()、DENSE_RANK()与ROW_NUMBER() 咱们先创立数据表如下: DROP TABLEIF EXISTS 成绩单;CREATE TABLE 成绩单 ( 学号 VARCHAR ( 8 ), 姓名 VARCHAR ( 8 ), 科目 VARCHAR ( 8 ), 得分 INT ) ENGINE = INNODB DEFAULT CHARSET = utf8;INSERT INTO 成绩单VALUES ('1000', '小明', '语文' ,112 ), ('1000', '小明', '数学' ,120 ), ('1000', '小明', '英语' ,92 ), ('1001', '云朵', '语文' ,112 ),  ('1001', '云朵', '数学' ,118 ), ('1001', '云朵', '英语' ,99 ),  ('1002', '库里', '语文' ,101 ), ('1002', '库里', '数学' ,111 ), ('1002', '库里', '英语' ,90 ), ('1003', '佳人', '语文' ,112 ),  ('1003', '佳人', '数学' ,120 ), ('1003', '佳人', '英语' ,112 ),  ('1004', '小华', '语文' ,112 ), ('1004', '小华', '数学' ,112 ), ('1004', '小华', '英语' ,112 ), ('1005', '强森', '语文' ,92 ),  ('1005', '强森', '数学' ,120 ), ('1005', '强森', '英语' ,92 );这是一张成绩表,别离是学号、姓名、科目与得分。 成绩表 面对下面这份数据,咱们要求各科目学生们得分排名,就能够用到排序函数。 比方RANK() SELECT *, RANK() OVER ( PARTITION BY 科目 ORDER BY 得分 DESC) AS RANK_排名FROM 成绩单这个操作是依照科目进行分组,而后依照得分进行排序(DESC是由大到小)。 后果如下: RANK() 能够看到,对于同样得分而言,RANK()下的名次是同样的,而且名次中存在间隙(不肯定间断)。 咱们来看RANK()、DENSE_RANK()与ROW_NUMBER()三者的差别: SELECT *, RANK() OVER ( PARTITION BY 科目 ORDER BY 得分 DESC) AS RANK_排名 , DENSE_RANK() OVER ( PARTITION BY 科目 ORDER BY 得分 DESC) AS DENSE_RANK_排名 , ROW_NUMBER() OVER ( PARTITION BY 科目 ORDER BY 得分 DESC) AS ROW_NUMBER_排名FROM 成绩单后果比照如下: 差别比照 能够看到这三者的作用如下: 函数阐明ROW_NUMBER为表中的每一行调配一个序号,能够指定分组(也能够不指定)及排序字段(间断且不反复)DENSE_RANK依据排序字段为每个分组中的每一行调配一个序号。排名值雷同时,序号雷同,序号中没有间隙(1,1,1,2,3这种)RANK依据排序字段为每个分组中的每一行调配一个序号。排名值雷同时,序号雷同,但序号中存在间隙(1,1,1,4,5这种)咱们要获取各科目排名第一的学生及得分,就能够再加个条件判断即可,须要留神这里用到了子查问。 SELECT * FROM ( SELECT *, DENSE_RANK() OVER ( PARTITION BY 科目 ORDER BY 得分 DESC ) AS DENSE_RANK_排名 FROM 成绩单 ) a WHERE DENSE_RANK_排名 = 1;查问后果如下: DENSE_RANK_排名第一 另外还有个NTILE(n)将分区中的有序数据分为n个等级,记录等级数 比方依照学号分区得分排序进行分2个等级 SELECT *, NTILE(2) OVER ( PARTITION BY 学号 ORDER BY 得分 DESC ) AS NTILE_FROM 成绩单查问后果如下: NTILE(2) NTILE(n)在数据分析中利用较多,比方因为数据量大,须要将数据平均分配到n个并行的过程别离计算,此时就能够用NTILE(n)对数据进行分组(因为记录数不肯定被n整除,所以数据不肯定齐全均匀),而后将不同桶号的数据再调配。 3. 散布函数散布函数有两个PERCENT_RANK()和CUME_DIST() PERCENT_RANK()的用处是每行依照公式(rank-1) / (rows-1)进行计算。其中,rank为RANK()函数产生的序号,rows为以后窗口的记录总行数。 SELECT *, RANK() OVER ( PARTITION BY 科目 ORDER BY 得分 DESC) AS RANK_排名 , PERCENT_RANK() OVER ( PARTITION BY 科目 ORDER BY 得分 DESC) AS PERCENT_RANK_FROM 成绩单查问后果如下: PERCENT_RANK() CUME_DIST() 的用处是分组内小于、等于以后rank值的行数 / 分组内总行数。 查问小于等于以后问题的比例 SELECT *, RANK() OVER ( PARTITION BY 科目 ORDER BY 得分 DESC) AS RANK_排名 , CUME_DIST() OVER ( PARTITION BY 科目 ORDER BY 得分 DESC) AS CUME_DIST_FROM 成绩单查问后果如下: CUME_DIST() 能够看到,数学科目中有0.5也就是50%的敌人得分120,超过66.66%的学生问题在118分及以上。 4. 前后函数查问以后行指定字段往前后N行数据,LAG() 和 LEAD() 前N行LAG(expr[,N[,default]]),比方咱们看各科目同学每个人往前3名的同学得分。 SELECT *, RANK() OVER ( PARTITION BY 科目 ORDER BY 得分 DESC) AS RANK_排名 , LAG(得分, 3) OVER ( PARTITION BY 科目 ORDER BY 得分 DESC) AS LAG_FROM 成绩单查问后果如下: LAG(得分, 3) 能够看到,各科目前三行都是NULL空值,这是因为前三行不存在它们往前3行的值。rank 4的前3是rank 1,对应得分是120。 这个能够用于进行一些诸如环比的状况,在这里咱们能够计算以后同学与前1名同学得分差值,操作如下: SELECT *, LAG_ - 得分 FROM ( SELECT  *,  RANK() OVER ( PARTITION BY 科目 ORDER BY 得分 DESC ) AS RANK_排名,  LAG(得分, 1 ) OVER ( PARTITION BY 科目 ORDER BY 得分 DESC ) AS LAG_  FROM 成绩单  ) a查问后果如下: ...

June 24, 2022 · 1 min · jiezi

关于sql:企业需求管理到底该怎么做以数据部门示例

在与多个企业和客户的交换过程,咱们发现很多企业需要治理问题最重大的是数据部门。特地是在企业迫切进步数字化程度的当下,很多数据部门的人也不晓得数据需要到底是什么,数据需要相比拟用户需要、产品需要等需要有什么不同,对于数据需要应该怎么样来治理。 交换时,咱们向数据工作者提过这样一个问题:你的工作中有多少工夫花在需要相干的事务上?上千集体的答复中,大部分人给出的答案是50-60%。这些工夫或是用于理解需要背地的业务逻辑与规定,或是用于大大小小的需要沟通会议,或是用于梳理一版又一版需要落地计划,或是用于数据团队外部的需要合作分工。 再接着深问:既然在工作中花这么长时间做需要相干的工作,是否理解过相干的常识或方法论?仅有寥寥几位给出了必定的答案。 这样的景象在数据团队中普遍存在,一部分起因是数据人对需要治理的关注较少,另一部分是业内少有专题性的钻研,同行间的探讨分享也十分无限。 | 数据需要是什么?我国首个数据管理畛域国家标准DCMM(数据管理能力成熟度评估模型)中,对数据需要的定义是:指组织对业务经营、经营剖析和战略决策过程中产生和应用数据的分类、含意、散布和流转的形容。数据需要治理过程辨认所需的数据,确定数据需要优先级并以文档的形式对数据需要进行记录和治理。 在企业的实际中,咱们晓得数据需要是数据决策零碎胜利的外围之所在,它为其余许多业务洞察和治理流动奠定了根底。在大数据分析我的项目以及产品落地过程中,需要治理贯通始终。 那么,数据需要治理最根本的工作就是明确需要,并使我的项目团队和用户达成共识,即建设需要基线。另外,数据需要治理还要建设需要跟踪能力分割链,确保所有的用户需要都被正确地利用,并且在需要产生变更时,可能齐全地管制其影响范畴。 在《企业数据需要治理钻研报告》中,咱们钻研了目前中国各行业企业数据需要治理的广泛程度、投入水平以及常见痛点。大部分的企业是不晓得"是什么?要不要做?怎么做?"的。 (图片摘自《企业数据需治理钻研报告》) | 企业在进行数据需要治理时应该怎么做?数据管理能力大抵可从制度、人员、内容、流程、技术、知识库和内部单干7个维度评估。 而DCMM规范中数据需要能力项的过程指标如下: 建设数据需要管理制度,对立治理各类数据需要;数据相干方对数据需要有统一的了解,能满足业务的需要;各类数据需要失去梳理和定义;数据的命名、定义和示意遵循组织公布的相干规范。除此之外,需要生命周期各阶段间的关系对如何治理需要有很大影响。通过对以下要害项的推动,实现数据需要的无效治理,能够晋升数据工作对业务的价值产出,升高数据工作的不可控老本: 明确数据我的项目或者数据产品的需要边界对数据我的项目执行或者数据产品迭代工作进行进度与效力的监控通过无效的需要收集以及整合工具与办法,避免我的项目范畴或者产品需要池产生蔓延将以上常识具体落实到企业的实际中,咱们取得了治理数据需要应遵循的5个要害要点:那么进一步细化到具体的、通用的数据需要的全生命治理流程步骤上,则能够分为以下六个步骤:上面间接援用《企业数据需要治理钻研报告》的截图具体的阐明六个步骤: 值得一提的是,数据需要的反馈阐明最好是从业务层面进行形容,能够形容该需要的业务背景、业务指标和业务价值。而后续需要剖析,包含需要剖析协同时,数据人员应补充该需要的数据层面,包含但不限于需要明确的数据指标(取数起源、计算阐明等)、数据需要落地要求(报表、可视化、大屏、仪表盘看板等)、数据应用范畴、数据更新周期、数据保留周期等。二者联合就可能造成一份业务、数据双层面的需要文档。 数据需要治理复盘目标是基于需要治理平台,通过汇总和剖析数据需要治理各环节过程记录,敏锐的发现数据需要治理和数据我的项目施行过程中能够优化的中央。 数据是目前企业要害生产因素,数据需要流程的欠缺一方面会促使数据规范体系更加欠缺,另一方面,数据需要的品质有所晋升,相应的数据利用、数据我的项目的品质普遍提高,也可能促成企业的数字化转型和数据利用迈入新的阶段,进一步实现用数据驱动业务倒退。 文中提及工具应用:数知鸟 图片起源:《企业数据需要治理钻研报告》获取完整版钻研报告请移步公众号:数知鸟

June 23, 2022 · 1 min · jiezi

关于sql:Databend-SQL-Planner-全新设计

前言为了反对简单的 SQL 查问,并且提供更好的应用体验,咱们在最近的几个月里对 Databend 的 SQL planner 进行了大规模的重构。目前重构曾经靠近序幕,感兴趣的敌人能够通过批改 Databend 的 Session settings SET enable_planner_v2 = 1来启用新 planner 进行领先体验。 性能亮点更加敌对的查问体验无论是数据分析师还是开发人员,在编写 SQL 查问的时候总会遇到各种各样的报错。尤其是在 SQL 查问较为简单的状况下,排查报错成了许多人的噩梦(笔者自己已经批改过有数十个 JOIN 子句的 MySQL 查问,从此对 MySQL 的谬误提醒疾恶如仇)。 为了改善这方面的用户体验,咱们在新的 Planner 中引入了严格的语义查看环节,使得大部分的谬误能够在查问编译阶段就被拦挡。同时为了不便用户定位谬误的地位,咱们也引入了全新的谬误提醒算法。 当你的 SQL 查问应用了谬误的语法时(比方写错了关键字,或者脱漏了某些子句),Databend 会为你提供提示信息: 当你的 SQL 查问呈现语义上的谬误时(比方应用了不存在的 Column,或者 Column 具备歧义),Databend 也会为你指出谬误呈现的地位: 在编写简单查问时,仍然能够取得较好的体验: 反对 JOIN 查问与关联子查问在新的 SQL planner 中,咱们反对了 JOIN 查问(INNER JOIN,OUTER JOIN,CROSS JOIN)与关联子查问,并且提供了 Hash Join 算法用以执行 JOIN 查问。 JOIN 查问的相干文档曾经公布在 https://databend.rs/doc/refer...,你能够查阅文档以理解 Databend 中 JOIN 查问的应用形式。 在 OLAP 查问中,JOIN 是十分重要的一部分。在传统的星型模型和雪花模型中,咱们都须要通过 JOIN 查问将维度表与事实表连接起来以生成后果报表。 ...

June 21, 2022 · 2 min · jiezi

关于sql:技术分享-MySQL中一个聚类增量统计-SQL-的需求

作者:刘晨 网名 bisal ,具备十年以上的利用运维工作教训,目前次要从事数据库利用研发能力晋升和技术治理相干的工作,Oracle ACE ,腾讯云TVP,领有 Oracle OCM & OCP 、EXIN DevOps Master 、SCJP 等国内认证,国内首批 Oracle YEP 成员,OCMU 成员,《DevOps 最佳实际》中文译者之一,CSDN & ITPub 专家博主,公众号"bisal的集体杂货铺",长期保持分享技术文章,屡次在线上和线下分享技术主题。 本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 共事提了一个 MySQL 数据库中 SQL 统计数据的问题,我用测试数据模仿一下,如下所示,表 tt 有三个字段,code 是标识名称,cdate 是对应的日期,ctotal是个统计值 原始的统计语句如下所示,依照 code 和 cdate 进行聚类,统计出每个 code 每个月累加的记录数, 然而他的需要是能依照 code+cdate 的统计值进行累加显示,例如上图中第一行的 total 是10 ,第二行的 total 就显示10+9=19 ,第三行的 total 就显示10+9+11=30 ,以此类推。 他须要的是 total 逐行累加,MySQL 中能够通过定义变量累加来实现,如下所示,利用@i逐行累加, 的确看着实现了,然而有个问题,不同的 code ,并未做归零解决,例如上图中,code=BBB 的第一行记录,total 应该是5 ,以后的35则显著是通过30+5失去的。 此处应该再加个逻辑,即依照 code 聚类的同时做 sum 求和计算,如下所示,此时就能够看到,g_total 依照 code 和 cdate 进行累加,不同的 code ,就会归零,从新计算,符合实际需要, ...

June 21, 2022 · 1 min · jiezi

关于sql:大咖带你解读-PostgreSQL-15-新特性-直播预告

作为功能强大的开源数据库系统,PostgreSQL已在可靠性、稳定性、数据一致性等取得了业内极高的名誉。PostgreSQL 15的第一个 beta 版本的公布,在国内外具备极高的关注度。 作为国内业余的数据库社区,墨天轮社区联结PostgreSQL中文社区独特举办《 PostgreSQL 15 新个性解读》直播流动,国内当先的四位PG技术专家将带来业余解读。 直播将围绕着新版本在性能与开发者体验上的更新、新旧版本比照,最佳技术实际等主题开展分享,帮忙国内技术爱好者加深对新版本的理解,从而更好利用实战! 收费报名通道已开启 嘉宾及主题介绍议程一:PostgreSQL 15 局部新个性先睹为快 中兴通讯股份有限公司数据库内核零碎工程师 尚长军 数据库内核零碎工程师,从事数据库内核设计,研发和布局 议程二:PostgreSQL 15 局部新个性预览 云和恩墨PG技术顾问 彭冲 多年从事基于PostgreSQL数据库的软件研发,擅长于PL/PGSQL业务迁徙及优化,曾在天津通卡作为外围开发人员将我的项目胜利施行于委内瑞拉交通部现场,并胜利实现全国公交系统整体迁徙降级 议程三:PostgreSQL 15 零碎表、视图及期待事件改变 云和恩墨PG技术顾问 阎书利 PG ACE partner,中国PG分会认证讲师,PGfans 2021年度MVP 议程四:PostgreSQL15版本迁徙兼容性解析海能达通信股份有限公司 PostgreSQL高级DBA 崔鹏 PostgreSQL 爱好者,公众号"CP的PostgreSQL厨房"作者。 长期参加PostgreSQL中文社区外文技术文章翻译校对、直播技术分享 直播亮点前瞻大咖讲师强强联手,尽览版本个性面对新版本,我该如何理解与利用?新旧版本有何不同?有哪些新个性须要分外器重?具备多年教训的大咖讲师将从业余角度登程,独特为数据技术爱好者带来解读。学常识领奖品,超多福利等你领线上观看并参加抽奖,获奖几率超高!直播间瓜分处分已开启,邀请好友报名与观看直播,即可拿现金处分!更多流动惊喜,尽在下周四下午【PostgreSQL 15 新个性解读】直播流动, 快点击下方链接报名参加:https://www.modb.pro/event/612,更有定制T恤、水壶、鼠标垫等好礼等你拿! - 相干浏览 - 【国产数据库沙龙:开源生态专场】直播资源回顾【国产数据库沙龙-互联网行业利用专场】直播资源回顾【国产数据库沙龙-键值数据库专场】直播资源回顾【国产数据库沙龙:图数据库专场】直播资源回顾欲了解更多可进入墨天轮社区,围绕数据人的学习成长提供一站式的全面服务,打造集新闻资讯、在线问答、流动直播、在线课程、文档阅览、资源下载、常识分享及在线运维为一体的对立平台,继续促成数据畛域的常识流传和技术创新。 关注官网公众号: 墨天轮、 墨天轮平台、墨天轮成长营、数据库国产化 、数据库资讯

June 20, 2022 · 1 min · jiezi

关于sql:还在埋头敲代码这个提效工具赶快收好事半功倍的秘诀就在这儿

抬头赶路也别忘了低头看看天空,一味敲代码赶任务只能导致被动接活、工作挤压,影响工作幸福感。 开发如何破局,卓越提效,方正信息部大佬用切身经验通知你秘诀! 企业中的流程化治理,是保障工作效率进步的要害。对于信息化部门,如何搭建需要流程,让需要对接快、解决效率高,产出看得见? 1、案例背景 方正PCB隶属于方正科技集团股份有限公司,是寰球当先的印制电路板(PCB)厂商之一,成立于1986年,营业支出2021达到32.07+亿(RMB)。方正PCB信息化部门承接企业的日常需要和我的项目类需要,为进步团队工作效率,急需找到适宜的流程和对应的工具撑持。 在应用数知鸟之前,方正PCB也尝试过治理模式和工具,最开始应用Excel治理,然而 Excel表手动保护须要耗费过多人力,且短少批改记录,后续不便保护,起初应用市面上其余需要管理工具也问题频出,1是简单,有很多性能用不到,2是有流程管制不便的问题。 最初方正PCB信息化团队在梳理了适宜本人的流程治理形式后,抉择了性能更轻量、流程更灵便的数知鸟作为工具撑持。在数知鸟上搭建了企业信息化需要的治理流程。 基于流程治理的重要性,方正PCB信息化团队在流程治理中次要做三件事。1、进步企业工作的效率。优化工作流程,把不必要的工作环节剔除进来。2、升高企业经营老本。缩小流程中不必要的人力物力耗费,缩短流程的周期。3、管制危险。通过流程标准,让工作有据可依,避免出现互相推诿等景象。 让咱们一起来看方正信息化团队陈经理的实际成绩分享。 2、实际成绩 1、需要流入—— 简化需要流入步骤,高效对接咱们在信息化部门建设需要收口,即需要剖析组,组员按不同的业务线或业务畛域,对接业务的需要并负责剖析、设计。让业务有需要时可能找得准、沟通快,无效进步需要对接的效率。在需要的表单中,咱们除了记录各环节负责人外,也会记录需要的晋升改善类型,不仅可能在提交时对需要做把控,在一段时间后,通过统计可能晓得团队最近的产出是什么。  2、需要解决 —— 各司其职,缩小不必要人力耗费 咱们在数知鸟中设置了以下工作流以撑持需要流转,也让不同成员能够聚焦关注本人须要关注的需要状态。  需要的对立治理是流程的根底,在需要解决的过程中,咱们也能通过需要对立治理来把控需要状况,例如咱们团队里有各种职能的工程师,咱们能够快捷确认需要是否达到需要难度与工程师职能的正向匹配。数知鸟中的需要故事墙可能辅助实现对需要解决的把控,以此剖析理论工作中的问题,比方团队20几个开发,是否每个人手头都有开发中的工作?有没有需要提了很久还没有进入解决?特地是当需求量大的时候,更须要对需要状态做可视化的展示,从而把控问题。3、需要复盘 —— 复盘历史,一直迭代流程恒标准需要解决工作进行到肯定阶段时,咱们也会对历史数据进行复盘,反思有无需要排期、人员调配的不合理等问题,从而晋升需要治理的规范性。另外在部门做月度总结、季度总结时也须要需要的信息作为数据起源。咱们不仅仅以需要数量为唯一标准,而是对每个需要都进行难度系数、工时的辨别,来进一步量化员工的工作量,多劳多得。在数知鸟看板性能中,咱们可能将所需数据进行统计,可视化展示工作。不仅能够应用数知鸟提供的内置看板,也能应用企业数据自行制作看板,越来越欠缺的数据可能满足咱们的统计需要。 ✅产品介绍数知鸟是帆软旗下的一款面向数据团队的轻量需要管理工具,专一于需要收集、解决、交付、教训积淀的需要全生命周期治理。数知鸟升高沟通老本、进步合作效率,让需要治理更加简略,点击理解收费应用。 总结目前,咱们利用数知鸟空间治理的性能,帮忙咱们更不便的对日常需要和重点项目进行治理。通过流程管制性能,让需要从开始到完结的链条清晰可见,实现了需要的高效流转和我的项目要害里程碑的的重点管控。接下来咱们也将推动业务部门与数知鸟更多的互动,以及通过数知鸟与帆软决策零碎的集成,将报表需要一并治理起来,从而更高效实现的业务与IT的交融

June 14, 2022 · 1 min · jiezi

关于sql:SQL审核-云上用户可以一键使用-SQLE-审核服务啦

阿里云用户今后不须要装置部署SQLE, 就能够收费应用审核服务了。 近期,爱可生正式通过了阿里云计算巢 “云合打算”合作伙伴认证,并胜利公布“云树SQL审核软件”计算巢服务,即SQLE云服务,同时应用阿里云云市场作为产品公布渠道。 阿里云用户, 通过简略几步操作,即可领有 SQLE云一体化解决方案。SQLE云服务与SQLE开源版本性能完全一致, 继续为用户提供极致的应用体验。 接下来,文章将通过以下四局部内容来介绍下SQLE以及SQLE云服务的应用体验: 文章次要分为以下四局部内容: 一、SQLE 我的项目介绍 二、劣势比照 三、应用体验 四、后续打算 一、SQLE 我的项目介绍爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者,反对多场景审核,反对标准化上线流程,原生反对 MySQL 审核且数据库类型可扩大的 SQL 审核工具。 SQLE 获取 二、劣势比照1、对立的交付入口通过阿里云云市场可搜寻到 SQLE 服务,无缝对接用户本身的阿里云环境。阿里云用户 今后不须要装置部署SQLE, 就能够收费应用审核服务了。 近期,爱可生正式通过了阿里云计算巢 “云合打算”合作伙伴认证,并胜利公布“云树SQL审核软件”计算巢服务,即SQLE云服务,同时应用阿里云云市场作为产品公布渠道。 阿里云用户, 通过简略几步操作,即可领有 SQLE云一体化解决方案。SQLE云服务与SQLE开源版本性能完全一致, 继续为用户提供极致的应用体验。 接下来,文章将通过以下四局部内容来介绍下SQLE以及SQLE云服务的应用体验: 2、标准化公布通过计算巢服务提供的自动化部署实现SQLE服务的标准化公布,用户无需关怀架构,配置,底层环境,一键即可实现服务部署,整个过程只须要2分钟。 3、与云上RDS买通,提供审核上线入口基于阿里云的内网网络环境,可与RDS或其余自建数据库连通,数据库无需裸露外网,由SQLE提供外网服务给用户进行SQL审核上线流程。 三、应用体验1、购买通过阿里云云市场购买服务; 确认订单信息,配置对应的云资源; 确认订单信息,并领取订单; 2、主动部署购买胜利后,会提醒进入计算巢部署服务; 通过计算巢界面部署服务,部署仅需一键点击“部署”按钮,后盾即可主动部署装置,整个过程预计耗时2分钟; 部署胜利后,通过页面提供的外网地址拜访SQLE服务了。 3、性能体验找到RDS的内网地址; 通过SQLE的页面录入该RDS; 接下来即可通过SQLE界面对该RDS进行SQL审核上线了。 四、后续打算摸索SQLE基于云原生的服务模式,给用户提供更多的集成形式;反对更多的云平台。

June 10, 2022 · 1 min · jiezi

关于sql:少即是多从分钟级提升到毫秒级的PostgreSQL查询

英文版刊载于Flexport Engineering Blog 简介应用更多的索引并不一定能晋升数据库性能。“少即是多”的准则也实用于数据库畛域。本文将介绍咱们通过少用索引使一个PostgreSQL查问提速几千倍,从分钟级晋升到毫秒级的教训。 问题Flexport平台让Flexport的客户、经营人员和其余用户能发送音讯进行交换。这个性能的数据存储于AWS Aurora PostgreSQL上的一个音讯表,此表的规模为数千万行级。 音讯表上的主查问通常极快,然而近期它遇到了一些间歇的慢查问超时。慢查问岂但影响了音讯性能的用户体验,而且加大了整个零碎的负荷,拖慢了其余性能的用户体验。 这个查问长这样: SELECT messages.* FROM messages WHERE messages.deleted_at IS NULL AND messages.namespace = ? AND ( jsonb_extract_path_text(context, 'topic') IN (?, ?) OR jsonb_extract_path_text(context, 'topic') LIKE ? ) AND ( context @> '{"involved_parties":[{"id":1,"type":1}]}'::jsonb )ORDER BY messages.created_at ASC它用了一些PostgreSQL特有的语法。那么这个查问是在干什么呢? 那个@>符号是PostgreSQL的“蕴含”操作符。请参考官网文档,简略来说它就是一种反对多层级的子集运算,判断左侧是否“蕴含”右侧(例如,某个大对象是否蕴含一个小对象)。这个操作符能够被用于一些结构化类型,例如数组(array)、范畴(range)或JSONB(PostgreSQL中的JSON二进制示意格局)。 音讯表有一个整数型的id列,一个JSONB型的context列,以及其余列。在context列中的JSONB对象蕴含了一条音讯的描述性属性,例如,topic属性形容了此音讯的主题,involved_parties属性形容了有权查看此音讯的法人实体的列表。 在context列上有两个索引: context列上的GIN索引jsonb_extract_path_text(context, ‘topic’)表达式上的BTREE表达式索引GIN是PostgreSQL提供的一款用于简单值的索引引擎,个别用于数组、JSON或文本等的数据结构。GIN的设计用处是索引那些可对内部结构做细分的数据,这样就能够查找数据外部的子数据了。BTREE是PostgreSQL的默认索引引擎,能对简略值做相等性比拟或范畴查问。表达式索引是PostgreSQL提供的一种强力的索引类型,能对一个表达式(而不是一个列)做索引。JSONB类型个别只能用GIN这样的索引引擎,因为BTREE只反对标量类型(能够了解为“没有内部结构的简略值类型”)。因而,context列上的jsonb_extract_path_text(context, ‘topic’)表达式能够用BTREE索引,因为它返回字符串类型。不同于BTREE索引对立而统一的示意格局,GIN索引的内容能够因所用数据类型和操作符类型的不同而极为不同。而且思考到查问参数的抉择度有较高的多样性,GIN索引更实用于一些特定的查问,不像BTREE索引宽泛实用于相等性比拟和范畴查问。 初考察一个查问通常会先做索引扫描以初筛,再对筛选后的范畴做表扫描(一个特例是,当索引扫描足以笼罩所需的所有数据列时,则无需表扫描)。为了最大化性能,索引要有较好的抉择度来放大范畴,以缩小甚至防止之后的表扫描。条件context @> ‘{“involved_parties”:[{“id”:1,”type”:1}]}’::jsonb能应用context列上的GIN索引,然而这并不是一个好抉择,因为{“id”:1,”type”:1}这个值是存在于大多数行中的一个非凡值(这数字就很非凡,像管理员的号码)。因而,GIN索引对于这个条件的抉择度很差。实际上,这个查问中的其余条件已能提供很好的抉择度,所以永远不须要为这个条件应用索引。当初咱们须要晓得这个查问到底有没有在这个条件上应用GIN索引。 咱们能够在SQL控制台中执行形如“EXPLAIN ANALYZE {the query statement}”的语句来失去查问打算。这种语句会理论执行查问并返回所选的查问打算(其上标注有理论工夫消耗)。 然而,咱们只失去了一个快查问打算,它没有应用这个GIN索引。考察遇到了麻烦。 深刻技术细节首先,通过可视化示意来读懂这个快查问打算。 快查问打算这个链接有高亮,更适宜浏览 QUERY PLAN------------------------------------------------------------------------------ Sort (cost=667.75..667.76 rows=3 width=911) (actual time=0.093..0.094 rows=7 loops=1) Sort Key: created_at Sort Method: quicksort Memory: 35kB -> Bitmap Heap Scan on messages (cost=14.93..667.73 rows=3 width=911) (actual time=0.054..0.077 rows=7 loops=1) Recheck Cond: ((jsonb_extract_path_text(context, VARIADIC '{topic}'::text[]) = ANY ('{?,?}'::text[])) OR (jsonb_extract_path_text(context, VARIADIC '{topic}'::text[]) ~~ '?%'::text)) Filter: ((deleted_at IS NULL) AND (context @> '{"involved_parties": [{"id": 1, "type": 1}]}'::jsonb) AND ((namespace)::text = '?'::text) AND ((jsonb_extract_path_text(context, VARIADIC '{topic}'::text[]) = ANY ('{?,?}'::text[])) OR (jsonb_extract_path_text(context, VARIADIC '{topic}'::text[]) ~~ '?%'::text))) Heap Blocks: exact=7 -> BitmapOr (cost=14.93..14.93 rows=163 width=0) (actual time=0.037..0.037 rows=0 loops=1) -> Bitmap Index Scan on index_messages_on_topic_key_string (cost=0.00..10.36 rows=163 width=0) (actual time=0.029..0.029 rows=4 loops=1) Index Cond: (jsonb_extract_path_text(context, VARIADIC '{topic}'::text[]) = ANY ('{?,?}'::text[])) -> Bitmap Index Scan on index_messages_on_topic_key_string (cost=0.00..4.57 rows=1 width=0) (actual time=0.007..0.007 rows=7 loops=1) Index Cond: ((jsonb_extract_path_text(context, VARIADIC '{topic}'::text[]) ~>=~ '?'::text) AND (jsonb_extract_path_text(context, VARIADIC '{topic}'::text[]) ~<~ '?'::text)) Planning time: 0.313 ms Execution time: 0.138 ms快查问打算的可视化示意如下图,查问打算就像一个调用栈。查问被自顶向下地开展成一棵树,而后这棵树被自底向上地求值。例如,两个叶节点(Bitmap Index Scan)先求值,其后果被父节点(BitmapOr)合并,再返回给祖节点(Bitmap Heap Scan),等等。请留神,叶节点中的index 1和index 2实为同一个BTREE表达式索引,只不过被用于两个不同条件的扫描。 ...

June 3, 2022 · 3 min · jiezi

关于sql:SQL审核-这里有-MySQLOracle-最常用的-SQL-开发规则

本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 SQL审核工具 SQLE 企业版近期推出了Oracle审核插件的第一个测试预览版。咱们采集了过往咱们在客户那碰到的问题和行业专家的倡议,整顿了一大批Oracle审核规定。这个版本咱们从中筛选呈现频次最高的以及影响范畴最大一批规定退出到了Oracle审核插件中,这些规定能笼罩大多数客户的大多数场景,却又不会对客户应用产生额定的累赘。在后续的工夫内,咱们将推出的Oracle审核插件逐步完善规定的拼图。接下来的内容将对高频规定给出咱们的了解。插件的自身开发之前曾经做过介绍,开发文档参考:https://actiontech.github.io/...。 文章次要分为以下四局部内容: 一、SQLE 我的项目介绍 二、规定介绍 三、规定列表 四、后续打算 一、SQLE 我的项目介绍爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者,反对多场景审核,反对标准化上线流程,原生反对 MySQL 审核且数据库类型可扩大的 SQL 审核工具。 SQLE 获取 | 类型 | 地址 || --- | --- | | 版本库 | https://github.com/actiontech... | | 文档 | https://actiontech.github.io/... | 9000 || 公布信息 | https://github.com/actiontech... | | 数据审核插件开发文档 | https://actiontech.github.io/... || 社区版在线体验 | http://124.70.158.246:8888/ <br/>超级管理员:admin,明码:admin。 ||企业版在线体验|http://124.70.158.246:8889/ <br/>用户:admin,明码:admin。|| 类型 | 地址 | 二、规定介绍SQLE 依据规定的应用场景,将现有的规定分为以下几个类别: DDL标准类该类规定次要是对表定义做了不同个维度包含字段,索引的各方面属性等方面进行限度,规定值能够依据本人业务场景进行配置,满足绝大部分表设计的标准。 查问类的标准该类规定次要是反对一些常见可能会影响性能的语句,具体可依据本人的标准选择性开启敞开。 应用倡议类的规定该类规定波及一些公司的数据库应用红线,禁止应用来或防止一些潜在的应用上或者保护上的危险。 命名标准该类规定次要针对一些表名、字段名、索引名格局进行限度,次要作用还是作为对立命名规范进步可读性。 执行打算类该类规定次要是在审核SQL时借助执行打算输入,解读执行打算特色,对于特定的影响性能的SQL给予用户提醒。 三、规定列表表倡议应用主键;表不倡议应用外键;索引个数倡议不超过阈值;表字段过多;复合索引的列数量不倡议超过阈值;表不倡议应用指定的字段类型;表名、列名、索引名的长度不能大于指定字节;数据库对象命名禁止应用关键字。不倡议应用select *;delete 和 update 语句,必须带where条件;防止应用 having 子句;不举荐应用子查问。禁止除索引外的 drop 操作;禁止应用视图;禁止应用触发器;单条SQL不倡议过长。unique索引必须应用固定前缀;一般索引必须应用固定前缀。表关联存在笛卡尔积;表关联嵌套循环档次过多;表关联个数过多;对大表进行全表扫描;存在索引执行跳跃扫描;对大索引执行全扫描。 ...

June 2, 2022 · 1 min · jiezi

关于sql:执行一条-SQL-语句期间发生了什么

学习 SQL 的时候,大家必定第一个先学到的就是 select 查问语句了,比方上面这句查问语句: // 在 product 表中,查问 id = 1 的记录select * from product where id = 1;然而有没有想过,执行一条 select 查问语句,在 MySQL 中期间产生了什么? 带着这个问题,咱们能够很好的理解 MySQL 外部的架构。 所以,这次小林就带大家拆解一下 MySQL 外部的构造,看看外部里的每一个“整机”具体是负责做什么的。 MySQL 执行流程是怎么的?先来一个上帝视角图,上面就是 MySQL 执行一条 SQL 查问语句的流程,也从图中能够看到 MySQL 外部架构里的各个功能模块。 能够看到, MySQL 的架构共分为两层:Server 层和存储引擎层, Server 层负责建设连贯、剖析和执行 SQL。MySQL 大多数的外围功能模块都在这实现,次要包含连接器,查问缓存、解析器、优化器、执行器等。另外,所有的内置函数(如日期、工夫、数学和加密函数等)和所有跨存储引擎的性能(如存储过程、触发器、视图等。)都在 Server 层实现。存储引擎层负责数据的存储和提取。反对 InnoDB、MyISAM、Memory 等多个存储引擎,不同的存储引擎共用一个 Server 层。当初最罕用的存储引擎是 InnoDB,从 MySQL 5.5 版本开始, InnoDB 成为了 MySQL 的默认存储引擎。咱们常说的索引数据结构,就是由存储引擎层实现的,不同的存储引擎反对的索引类型也不雷同,比方 InnoDB 反对索引类型是 B+树 ,且是默认应用,也就是说在数据表中创立的主键索引和二级索引默认应用的是 B+ 树索引。好了,当初咱们对 Server 层和存储引擎层有了一个简略意识,接下来,就具体说一条 SQL 查问语句的执行流程,顺次看看每一个功能模块的作用。 第一步:连接器如果你在 Linux 操作系统里要应用 MySQL,那你第一步必定是要先连贯 MySQL 服务,而后能力执行 SQL 语句,广泛咱们都是应用上面这条命令进行连贯: # -h 指定 MySQL 服务得 IP 地址,如果是连贯本地的 MySQL服务,能够不必这个参数;# -u 指定用户名,管理员角色名为 root;# -p 指定明码,如果命令行中不填写明码(为了明码平安,倡议不要在命令行写明码),就须要在交互对话外面输出明码mysql -h$ip -u$user -p连贯的过程须要先通过 TCP 三次握手,因为 MySQL 是基于 TCP 协定进行传输的,如果 MySQL 服务并没有启动,则会收到如下的报错: ...

May 31, 2022 · 3 min · jiezi

关于sql:Rockset-陈博玚从数据库创新看云原生技术

物联市场 线上对谈第三期:Rockset 技术负责人 陈博玚 云计算产业对整个IT行业产生了革命性的影响,云化的趋势不可逆转,容器、K8s开始成为从业者和投资人口中最常提起的名词,这背地所代表的云原生赛道也成为云时代的下一个方向。 Rockset是新一代的云原生OLAP数据库,通过多维聚合索引和存储、计算、导入三层分流,使得各种企业的实时高并发查问需要失去很好的解决。买通物联网的孤岛,是Shifu和他的合作伙伴独特的愿景。 “物联市场 线上对谈”是由边无际发动的立足物联网行业的访谈栏目,第三期邀请到Rockset陈博玚,与边无际CEO陈永立、COO郑凯文、CTO李翔独特探讨云原生为数据库与物联网带来的时机与挑战。 对谈内容陈博玚:我是一名硅谷的软件工程师,现任职Rockset,是一家做云原生数据库的公司。我就任过两家独角兽守业公司,其中一家是Confluent,是做开源的Apache Kafka我的项目,围绕这个开源我的项目做了一整套的企业级服务的解决方案。再之前我是在Pinterest的做广告零碎架构工程师。 我当初任职的公司Rockset规模绝对小一些,当初是B轮融资阶段。Rockset在2020年的时候进行融资,公司团队规模在100人左右。我当初的次要工作是对于实时数据注入的。Rockset公司的产品定位是云原生的数据库方向,次要做OLAP(大数据查问)方面。 Rockset的产品比拟独特的点是强实时性与高并发。传统的产品更多针对的场景是某一个具体的数据去做一些剖析型的查问。Rockset的产品是面向用户的用户,咱们称之为tenant,举例来说如果一个体育网站的用户须要看NBA球赛实时的一些总结、赛况、运动员信息等,这个时候Rockset就能够提供很好的反对。 郑凯文:比照传统数据库,云原生数据库特点是什么呢? 陈博玚:首先讲一下云的特点。在平时提到云的时候是多概念混淆在一起的,人们也会比拟奇怪为什么一些词语加上云当前就变得更弱小了。云之所以弱小,是基于2015年左右亚马逊最早推的AWS我的项目,那个时候也是云的发展势头最强劲的一个阶段。 有一句话很好地概括了云的特色:在以前传统的机房落地的数据库里,租一台机器能够跑1个CPU,1个CPU做的工作须要100分钟,然而当初把这个工作放到云上能够变成100个CPU跑1分钟,这在以前是无奈设想的一件事件。 云计算能够在短期有一个爆发性的算力,这扭转了很多,包含数据库、技术构造等,也就是说人们能够有极强的在云上的弹性。所以我认为各种云原生的技术的要害就是在于弹性,这种弹性彻底突破了以前了解的互联网技术。原来互联网技术被当作一种须要事后买设施、算老本的行业,比方服装行业须要先去买布料能力动工。然而在云原生的时代的话,很多事件就会有一个十分大的效率的进步。互联网企业能够先不去想要买多少的机器,这些机器怎么保护,在哪儿设厂开机房等问题。这就是云原生带来的微小的劣势。云把所有的理念都虚拟化了,须要买的时候就买入,不须要的时候资源就被释放出来。这升高了很多互联网公司起步的难度。 数据库不是一个新兴概念,尤其在上云的热潮里。数据库自身的概念其实很简略,它可能让使用者以一种与人对话的形式去查问数据,并对数据做各种各样的操作。Rockset当初次要做的是查问这一部分,是一个读多写少的场景。 数据库以前用的一种语言就是咱们常常听到的SQL。SQL语言做得很杰出,它把很多人类想要表述的几个不同的数据因子去做聚合或者穿插,而后去搜寻并加很多搜寻限定条件。SQL把一些比拟形象的概念,用一种更自然语言的形式表达出来,而不是像以前一样作为程序员能力用的工具去写查问模式。 其实数据库也有一个演变:一开始是用SQL去做实现,起初大家发现这种办法太简单了,做很多的架构是比拟艰难,所以会有新一代的NoSQL呈现。NoSQL彻底进化成了机器似的语言,就只有程序员写代码能力去查问一个数据库的信息。然而,在新一代云原生当前,人们又把SQL搬回来,因为人们意识到SQL是一个通用的语言,不管是谁做这一代的数据库产品,没有人去避开SQL,不论MySQL还是PostgreSQL,依然是基于SQL这一套表达方式。 所以云原生数据库次要还是云原生扭转它底下的技术架构的底层,然而数据库自身没有很大的变动,它还是以前的那种用户用一种关系式的形式去把数据存储起来,而后有很好的形式能再把数据取出来。 郑凯文:OLAP这个数据库属于云原生数据库里一种是吗? 陈博玚:应该这样解释,OLAP的A的是Analytics,就是做剖析查问这个方向。另外一个跟它对应的概念叫OLTP,T是Transaction事务,是次要针对写的场景的。 当初市面上的数据库产品少数是针对AP来做的,起因就在于AP的查问量大而且拜访并发度高。反之TP利用场景更狭隘一些,更有挑战性的场景没有AP那么多。 能够看到AP的市场,取得了资本很高的青眼,比方20年上市的Snowflake,这家公司能够以这个当年营收的百倍作为它的市值,这是很夸大一件事件,可能是历史上最高的营收跟市场估值比。所以过后整个的市场就被Snowflake上市给带动起来了,大家都意识到这个市场有这么广阔。这个市场也还是很大的。 郑凯文:Rockset在这个市场中主打的特色是什么? 陈博玚:Rockset创建的工夫正好是Snowflake整个体系在逐步地占领市场的时候。Rockset在2016年创建的,那个时候Snowflake曾经成立4年左右了。Snowflake过后做的很多的是data warehouse,就是数据仓库,Snowflake心愿把用户各种不同的数据从不同的中央拿起来,放到一个一个仓库外面,比方用户有一个仓储零碎,他们能够从这外面轻易的把几个不同的数据联合在一起。 然而,这个数据仓库不足了几个因素,这就是Rockset想解决的问题: 第一,当初整个互联网用户的急躁正在升高。很多的事件会烦扰人们的心智,不论有如许好玩乏味的货色人们可能看一会儿而就要换下一个,所以对急躁最大的挑战就是网页加载速度。我小时候上网的时候我要是有什么货色想看的话,那个loading在那儿转很久,我能够有很大的急躁去期待。然而当初齐全不会了,当初没有人会看一个网页加载超过10秒钟,基本上两三秒就不想看这个网页了。所以,在信息的实时性上普通用户的要求变高了。 第二,在很多场景下,信息如果不够实时就等于是有效信息。这句话怎么了解呢?在一些跟广告相干的环境下,很多的时候须要去捕获用户的要害信息的窗口其实没有很大,可能就几分钟或者半个小时内,用户忽然有趣味想要去理解一个事物。比如说用户可能看家具途中忽然想去买把椅子,可能就这一会儿他有买椅子的需要,那如果零碎不能有这种实时的反馈,不能有实时的模型去计算得出这个论断的话,意味着错过了一个真正贴近用户的窗口。所以,很多人意识到传统那种一天跑一个模型的速度曾经跟不上了,剖析昨天用户的行为利用到明天可能偏差十分远,所以当初须要很多实时的信息去这个改正原来的模型,让它可能更精准的贴近用户的需要。在这个根底上,大家也越来越意识到实时性这很重要,Rockset就是去解决这个问题的。Rockset整个数据的集成都是走实时的通道,很多的信息能够管制在1秒到5秒左右的提早。 第三,数据推送的速度也要快。在传统的数据库上有一个概念叫索引,就是index。索引就好像一本书外面的目录,读者能很快去查到他须要的信息。比方一个学校可能要去查高二一班所有人的信息,那就能够在每个人的班级下来做一个索引,在这种构造下的数据库里能够很快的把数据拿进去。然而,建设索引不是那么容易的,它须要一个工作经验丰富的、或者对整个公司的业务十分理解的人,能力在传统数据库上建设出很好的索引。这项工作是齐全依据业务走的,比方明天建一个索引是给班级做的,今天可能要依照学号来做,然而整套索引要从新做其实是很麻烦的。以前有一个工作叫DBA,是专门负责数据库治理的岗位,当初这个岗位的需求量没有那么大了,它须要很多的教训并解决过很多的数据库系统,能依据一个需要建设索引使查问的效率更高。 Rockset提出了一个概念叫“多维索引”。即Rockset抉择暴力建索引,比方数据库有20个不同的column,即有20个不同的这个信息在外面,Rockset把每个信息都间接建设索引,这样不论用户按什么维度去查效率都比失常的数据库要快5到10倍。然而显然暴力建索引是有代价的,它带来的问题就是存储老本迅速减少。这个问题上云原生的劣势就能够体现进去,在当初这个时代的存储老本其实没有计算成本高,咱们齐全能够靠这个空间去换工夫。 这就是Rockset开始发明产品的核心理念:咱们认为在查问端的减速就是要保障把用户的工夫释放出来,不要让用户不停地调整索引条。调整索引是一个十分苦楚而且不稳固的工作,可能明天索引对了今天数据状态变了当前旧的索引就彻底废掉了。这就是Rockset想解决的问题,咱们把整套索引都做好用户应用时就不会有太大的问题。如果用户有非凡的问题,Rockset还会有一些后续的办法帮忙用户解决问题,保障开箱的用户体验达到最好。 李翔:您刚刚提到存储是有代价的,那么Rockset建设这么残缺的索引保留在哪里呢?这么大体量的存储也是须要相当大的开销了。 陈博玚:所有的用户数据会做一个正本,传到Rockset的云平台里,用户的所有的查问间接拜访Rockset。 Rockset做了一个前人没有做过的优化,比如说某一个家公司有寰球各地的业务,他们心愿把微小的数据库表放到不同的业务中心里。失常的逻辑会把这张表做一个分片,把欧洲的所有客户的信息放到一个分片外面,北美的、中国的别离分片。然而因为Rockset索引量太大了,就抉择了不同寻常的路线,即把某一份数据的索引做在一台机子上。不同类型的索引比方依照国家的、依照商业业务的形式,可能会做出好几个不同的数据的备份。Rockset的优化点在于,只有一份用户数据就能够把它所有的索引都放在一起。 这种形式为什么没人做呢?起因也很简略,比方我要查北美用户的信息,为什么要拜访欧洲的数据中心呢?比方原本分100片的时候,只须要拜访一台机子,这样的查问提早是能够保障的。但当初这100份数据每一条查问都要去拜访100台机子,查问提早可能会增大并且所有都要同时运行。但这就回到了刚刚提到的问题,在云上能够用这个100台机子的1分钟CPU来换取1台机子100分钟的CPU,等于同时利用了100台机子的算力。哪怕这种形式看上去会带来更高的提早,但其实在工夫换空间的衡量外面是赚的。以前做索引要跟数据走,做两三份数据量就十分大了,然而当初Rockset不再做分片而是把所有数据的索引做在一起,并且每次查问都会去查所有的机器,所以这是一个比拟有意思的优化。 李翔: Rockset是怎么建设索引的呢?是像SQL那样依照row来建设还是本人create index来建设呢? 陈博玚:咱们建设了3个维度索引,一个是row index,还有column index,还有 inverted index就是逆向索引,在文件外面把关键词拿进去作为一个逆向索引。 Rockset用的全是AWS的服务,然而有一点跟边无际很有缘就是也用Kubernetes零碎,Rockset的部署都是容器化的,因为咱们也发现这样能够更高效的去治理咱们的资源。 郭琦:请问Rockset进一步优化的方向是什么呢? 陈博玚:当初的次要方向是隔离,咱们当初的很多用户资源是共享状态的,包含一些计算资源。然而长期来看,咱们会去反对一些更高级的特点去让特定用户能够有本人的专属的数据的注入通道和查问模式。 其实这也是一个十分有争议性的话题,在云原生的大背景下很多人强调另一条路,是叫做多租户的计算资源共享。一台机器上既然能放很多容器,那实践上其实是能够让很多用户用这台机器资源把资源效率进步,然而另一方面, 万一有一台容器出问题了间接吃掉了一些其他人的资源,可能某一个算子的问题导致这台机器不可用反而影响了其余用户的查问体验。这依然是一个比拟难均衡的点。 郭琦:请问陈永立,云原生在软件架构上做到了什么能力去适配那么多种场景? 陈永立:这是一个特地大的话题,然而外围其实是两种技术。一个是Docker所代表的容器技术,另一个就是Kubernetes所代表的容器编排技术。如果没有容器技术的话,以前大家用虚拟机的耗费是十分大的,个别虚拟机里边都会跑很多的利用。有了容器当前人们把每一个利用都独自封装成一个image,很多的image串起来的话就能够做成微服务架构。这就是云原生技术的底层技术。 有了微服务当前怎么去治理这些微服务又是很大的问题,原来治理一个容器比较简单,然而当初治理成千盈百个容器了怎么办?这个时候就有了Kubernetes,用它来治理container fleet变得很简略,Kubernetes会把容器主动调度到不同的计算资源下面。而且Kubernetes还有很多运维自动化的性能,比方某个容器挂掉了当前Kubernetes能够主动重启,相当于把运维极大地简单化了。这也就使整个云原生的极度弹性的做法成为可能。这是一个底层的技术基础设施的提高而后推动下层的利用变革的过程。 Rockset也是基础设施的一部分,然而Rockset的技术提高也会让下层的用户的利用变得更快,而后就能凋谢进去十分多的新的场景。 郭琦:请问陈永立在理论过程中有遇到云原生有一些固有的阻碍须要冲破吗? 陈永立:必定是有的,它既然叫原生就阐明得从头来设计架构。很多传统的架构就须要打翻了从新设计,而后能力真正的用到云带来的便当。所以真正能做云原生架构的人才也不是特地多,这必定是限度大家转型的一个很大的问题。将来云原生的利用会变得越来越简略。 另外一点,云原生自身也会带来新的问题,比如说我原来我骑马的时候马要吃草,当初我改成开车的时候车也得加油。Kubernetes可能会呈现各种各样的问题,人们有没有能力去运维它呈现的各种问题。我原来在Azure Kubernetes Service工作,常常有客户能起1000个虚拟机,而后他过一段时间就删掉了,所以这也给整个的架构开发运维带来了很大的挑战。当然我认为这都是坏事,因为业务驱动的问题就是的确有这样的业务需要,而后才会呈现技术改革。 郭琦:陈永立之前在微软用Kubernetes做了第一套云厂商出品的云原生分布式防火墙,请介绍一下如何在Kubernetes的根底上做一个网络安全的解决方案? 陈永立:云原生时代有云原生时代本人的问题,平安的危险也在减少。原来只须要思考一个一个虚拟机的攻击面。然而在云原生的时候一个虚拟机里边的,可能有上百个容器,攻击面就会相应的变大。他人如果跑到一个容器里,可能能够从一个个容器渗透到整个的零碎里进行攻打。 所以我做的这套云原生的分布式防火墙实质上其实用的是Kubernetes network policy(网络策略)的思路,相当于能够设定哪些容器到容器之间是能够通信的,哪些是单向通信,哪些是双向通信。也能够用各种形式来更形象一层,比如说这个利用到那个利用能够通信,那个利用到这个利用不能反向通信。这个是我做的云原生的分布式防火墙Azure network policy manager也是开源的,大家也能够去看一看。 郑凯文:如果把物联网比作是血管,那数据库应该比作大脑皮层,这句话怎么了解? ...

May 26, 2022 · 1 min · jiezi

关于sql:SQL基础入门

体验简介本试验提供一台根底环境为CentOS的ECS(云服务器)实例,点击体验。 咱们将会在这台服务器上安装mysql,而后学习根本的SQL语句。 体验此场景后,能够把握的常识有: MySQL装置。根本SQL语句的应用。背景常识SQL:结构化查询语言(Structured Query Language)简称SQL,是一种数据库查问和程序设计语言,用于存取数据以及查问、更新和治理关系数据库系统。 数据查询语言(Data Query Language,简称DQL):其语句也称为“数据检索语句”,用以从表中取得数据,确定数据怎么在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其余DQL罕用的保留字有WHERE、ORDER BY、GROUP BY和HAVING。这些DQL保留字常与其余类型的SQL语句一起应用。数据操作语言(DML:Data Manipulation Language):其语句包含动词INSERT、UPDATE和DELETE。它们别离用于增加、批改和删除。事务管制语言(TCL):它的语句能确保被DML语句影响的表的所有行及时得以更新。包含COMMIT(提交)命令、SAVEPOINT(保留点)命令、ROLLBACK(回滚)命令。数据管制语言(DCL):它的语句通过GRANT或REVOKE实现权限管制,确定单个用户和用户组对数据库对象的拜访。某些RDBMS可用GRANT或REVOKE管制对表单个列的拜访。数据定义语言(DDL):其语句包含动词CREATE、ALTER和DROP。DDL语句用于在数据库中创立新表、批改、删除表(CREATE TABLE或DROP TABLE)、为表退出索引等。指针管制语言(CCL):它的语句包含DECLARE CURSOR、FETCH INTO和UPDATE WHERE CURRENT,用于对一个或多个表独自行的操作。云服务器ECS:云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越、稳固牢靠、弹性扩大的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您洽购IT硬件的后期筹备,让您像应用水、电、天然气等公共资源一样便捷、高效地应用服务器,实现计算资源的即开即用和弹性伸缩。阿里云ECS继续提供创新型服务器,解决多种业务需要,助力您的业务倒退。 装置并配置MySQL\1. 顺次执行如下命令,下载并装置MySQL。 wget http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpmyum -y install mysql57-community-release-el7-10.noarch.rpmyum -y install mysql-community-server --nogpgcheck返回如下后果,示意MySQL装置胜利。 \2. 执行如下命令,启动MySQL 数据库。 systemctl start mysqld.service\3. 执行如下命令,查看MySQL运行状态。 systemctl status mysqld.service返回如下后果,示意MySQL失常运行。 \4. 执行如下命令,查看MySQL初始密码。 grep "password" /var/log/mysqld.log返回如下后果。 \5. 执行如下命令,登录数据库。 mysql -uroot -p返回如下后果,输出MySQL初始密码。 返回如下后果,示意登录胜利。 \6. 执行如下命令,批改MySQL默认明码。 阐明 您须要将上面命令中的NewPassWord1.批改为您要设置的数据库明码。设置的新密码必须同时蕴含大小写英文字母、数字和特殊符号中的三类字符,否则会因为明码过于简略报错。留神每条残缺的SQL命令结尾都有一个半角分号(;),如果多行命令两头没有分号分隔,这些命令将不会执行,直至遇到一个分号。ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassWord1.'; ...

May 17, 2022 · 3 min · jiezi

关于sql:超强讲师阵容7天0元带你学完MySQL基础架构SQL性能调优MGR

简介:云数据库RDS MySQL从入门到高阶训练营开始收费报名啦! 大咖带你学习云数据库RDS MySQL,从入门基础架构和性能调优,到高阶MGR和云原生serverless。MySQL是当今最支流的开源数据库,它以稳定性、安全性、灵活性、低成本等劣势取得了大量用户的认可,在国内也有宽泛的受众群体。 本次阿里云联结中国MySQL用户组,为大家重点介绍MySQL数据库根底的架构、SQL性能调优等内容,以及高阶的MySQL MGR等个性,让您对MySQL数据库在短时间内有肯定的理解。同时,您还将有机会在试验环境中实操体验SQL诊断与调优,以及申请体验最新的Serverless能力,七天工夫轻松入门 RDS MySQL数据库,实现技术成长与职业冲破。优良毕业学员更有机会取得价值600元的ACA代金券,更有定制蓝牙音箱等惊喜礼品等着你! 本次训练营限时限额收费抢报!数量无限,报完即止!  >>点击此处立刻报名<< ——流动详情—— 报名工夫: 5月9日-5月23日开课时间:5月23日-5月31日(每晚19:00-20:00钉群授课) 开营名额:5000人(限时收费,报完即止)——七天训练营你将取得—— **——七天训练营课程表—— ** **——参营处分—— ** 版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

May 17, 2022 · 1 min · jiezi

关于sql:SQL审核-如何快速使用-SQLE-审核各种类型的数据库

作者:孙健 孙健,爱可生研发工程师,负责 SQLE 相干开发; 本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 前言近些年来,数据库产业倒退迅猛,各种新兴数据库如雨后春笋般呈现,各个公司的技术栈也不再局限于某一种数据库。对于SQL品质治理平台来说仅反对某一个类型的数据库(例如MySQL),那么是会有肯定的局限性,SQLE在设计之初思考反对多种数据库,因而产品设计时,将审核流程(业务)的代码和具体SQL审核上线的代码进行拆散,SQL审核上线通过插件的模式实现。SQLE对外提供插件开发所需的接口和库,能够疾速创立开启一个审核插件,无需降级软件,导入审核插件即可获对应数据库类型的审核上线能力,应用平台所有性能。 插件的开发参考文档:https://actiontech.github.io/... , 插件的应用参考文档:https://actiontech.github.io/...。 本文将演示如何从零开始创立一个简略可用的审核插件,作为案例。 指标首先将创立一个 Postgres 数据库审核插件,并增加两条规定,“禁止应用 SELECT *”和“创立的表字段过多”,并在开发过程中联合SQLE对Postgres数据库进行SQL审核上线工单的测试演示。以下过程中的演示代码可从此处https://github.com/actiontech...下载。 实操提醒:SQLE和插件为GO语言开发,如果要进行插件开发,须要对GO有一丢丢理解即可。 1. 创立插件我的项目首先应用go mod初始化一个go我的项目,而后 mkdir sqle-pg-plugincd sqle-pg-plugintouch main.gogo mod init sqle-pg-plugin # 初始化go mod export GOPROXY=goproxy.cn,goproxy.io,direct # 设置 GoProxy,解决SQLE库下载问题,通过IDEA开发的能够在IDEA软件上设置;go get github.com/actiontech/sqle@v1.2204.0 # 此版本为该文章编辑时的最新版本。2.编写最小化插件代码在我的项目main.go文件内编写如下代码,即可最快的增加一个Postgres数据库审核插件,此时插件没有审核规定。 package main import ( adaptor "github.com/actiontech/sqle/sqle/pkg/driver") func main() { plugin := adaptor.NewAdaptor(&adaptor.PostgresDialector{}) plugin.Serve()}应用‘go build‘编译后失去二进制文件 sqle-pg-plugin,按前言中的插件的应用参考文档,咱们部署到SQLE服务里。能够失常增加数据源,如下图所示: 此时失常进行SQL审核上线工单创立并上线,如下图所示: 3.给插件增加一条规定在刚刚代码的根底上,咱们在main函数内增加如下代码来新增一条规定“禁止应用 SELECT *”,残缺代码如下所示。 package main import ( "context" "strings" "github.com/actiontech/sqle/sqle/driver" adaptor "github.com/actiontech/sqle/sqle/pkg/driver" ) func main() { plugin := adaptor.NewAdaptor(&adaptor.PostgresDialector{}) rule1 := &driver.Rule{ Name: "pg_rule_1", // 规定ID,该值会与插件类型一起作为这条规定在 SQLE 的惟一标识 Desc: "禁止应用 SELECT *", // 规定形容 Category: "DQL标准", // 规定分类,用于分组,雷同类型的规定会在 SQLE 的页面上展现在一起 Level: driver.RuleLevelError, // 规定等级,示意该规定的重大水平 } // rule1Handler := func(ctx context.Context, rule *driver.Rule, sql string) (string, error) { if strings.Contains(sql, "select *") { return rule.Desc, nil } return "", nil } plugin.AddRule(rule1, rule1Handler) plugin.Serve()}咱们按之前的形式编译插件二进制文件,并部署到SQLE server内,能够看到新增了一条规定,如下图所示: ...

May 16, 2022 · 2 min · jiezi

关于sql:初级程序员的SQL拾遗②表操作

前言尽管平时开发中常常接触MySQL,但大多数的数据库操作都是通过ORM映射实现的,本人并没有从底层接触SQL。 本文继 高级程序员的SQL拾遗-①(增删改查) 次要内容包含:建库、建表、字段、束缚、查问等 理论开发过程中,与增删改查相比,建表、删表、束缚之类的这些低频操作更加不重要,因为数据库大部分工夫还是在增删改查(精确的说是查)。 所以本文的内容更不须要记,只需了解即可。 得益于弱小的可视化工具Navicat(或者PHPMyAdmin),咱们能够用鼠标实现建表,并转换成SQL语句。能够说,如果会用Navicat,SQL语句就不须要记住了(因为能够用软件生成)。 一、玩转Navicat这个软件有30试用版,也能找到谐和版,可自行搜寻。 关上软件连贯到MySQL服务后,左侧会显示以后MySQL的所有数据库: 新建数据库(图形化)在左侧任意数据库上右键->新建数据库,输出信息即可。 (在此处须要科普一下,为什么要用utf8mb4?因为MySQL内置的utf8是阉割版,用3字符示意而真正的UTF-8是1~4可变字符,换言之MySQL的utf8并不能示意所有UTF-8字符而utf8mb4才是真正4字符的UTF-8这是MySQL的一个坑) 能够看到表test1曾经显示进去了,这个操作用命令行怎么实现呢?首先须要理解一下什么叫做“查问” 查问(Query)SQL终端输出的一组能够实现特定性能的SQL语句称为一个查问。留神此处的Query并不是增删改查的查(SELECT),也绝不仅限于查。 能够了解成,所有SQL语句的执行过程都是查问过程。也就是粗犷的简化成,查问 == 执行SQL语句Query不仅包含了CRUD,还包含各种库操作、表操作。 接下来,在查问中用SQL建一个名为test2的数据库。 新建数据库 (命令行)首先在Navicat中新建查问(也就是新建一个输出SQL语句的性能)输出SQL代码后执行 // 建设数据库CREATE DATABASE 数据库名 // 示例:建设名为test2的数据库CREATE DATABASE test2 刷新后就会呈现新增的数据库。 双击新建的库后,图标变成绿色,文章前面的内容都能够通过在此数据库的Query中操作。 同理,删除数据库的语句是: ·`` // 删除数据库DROP DATABASE 数据库名// 删除名为test2的数据库DROP DATABASE test2演示Navicat生成SQL语句这是软件最神奇之处。 首先新建表,而后任意编辑表内字段。 编辑实现后不须要保留,此时点击SQL预览。 此时就能够发现,软件曾经主动为咱们生成了SQL语句: 这对于初学者学习SQL十分有帮忙,有利于在大脑中疾速建设某种性能和SQL代码的关联。 到此如果看明确并纯熟应用Navicat,前面的内容就不必看了(不是)。 二、常见表操作创立(CREATE)当初咱们能够拿出方才Navicat生成的SQL代码来看看: // 软件生成的SQL语句CREATE TABLE `test2`.`无标题` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NULL, `sex` int(1) NULL, `phone` varchar(255) NULL, PRIMARY KEY (`id`));咱们能够演绎出,创立表的写法是: ...

May 9, 2022 · 2 min · jiezi

关于sql:SQL学习网站推荐

Leetcode地址:https://leetcode-cn.com/study... 力扣网站上有一个SQL的专项练习,依照难度进行了分类,然而根底和进阶的题目须要付费解锁。 牛客网地址:https://www.nowcoder.com/exam... 牛客网提供了一个SQL必知必会专项题库,依照知识点和难度进行了分类,十分举荐用来练习SQL。 菜鸟教程地址:https://www.runoob.com/sql/sq... 菜鸟教程提供了SQL学习从入门到进阶的教程,十分具体,适宜初学者或者作为工具书,不过菜鸟教程没有提供相应的练习题目。 自学SQL网地址:http://xuesql.cn/ 自学SQL网由浅入深地介绍所有无关SQL的常识,每一个章节是一组SQL知识点,文字解说通俗易懂,并且在每一章前面都装备有一组入手练习工作。 以上,基本上这4个网站就够用了,可能很好的学习SQL以及应答面试。 对于飞援飞援是一个新兴的程序员接单平台。平台会居中主导匹配甲方需要和适合的开发者,不必本人在甲方背后和其余程序员竞标PK。所以如果工作品质比较稳定,并且工夫也比拟拮据,继续单干会源源不断的有单子。

May 7, 2022 · 1 min · jiezi

关于sql:BC码农网站搭建必备SQL高性能优化指南优质建议35条立马行动吧

因为BC一条龙工作搭建须要,最近做了很多 BI 取数的工作,须要用到一些比拟高级的 SQL 技巧,总结了一下工作中用到的一些比拟骚的进阶技巧,特此记录一下,以不便本人当前搭建网站一条龙查阅,次要目录如下: SQL 的书写标准SQL 的一些进阶应用技巧SQL 的优化办法SQL 的书写标准在介绍一些技巧之前,有必要强调一下标准,这一点我发现工作中常常被人疏忽,其实遵循好的标准可读性会好很多,应该遵循哪些标准呢 1、 表明要有意义,且规范 SQL 中规定表名的第一个字符应该是字母。 2、正文,有单行正文和多行正文,如下 多行正文很多人不晓得,这种写法不仅能够用来增加真正的正文,也能够用来正文代码,十分不便 3、缩进 就像写 Java,Python 等编程语言一样 ,SQL 也应该有缩进,良好的缩进对晋升代码的可读性帮忙很大,以下别离是好的缩进与坏的缩进示例 4、空格 代码中应该适当留有一些空格,如果一点不留,代码都凑到一起, 逻辑单元不明确,浏览的人也会产生额定的压力,以下别离是是好的与坏的示例 5、大小写 关键字应用大小写,表明列名应用小写,如下 花了这么多工夫强调标准,有必要吗,有!好的标准让代码的可读性更好,更有利于团队单干,之后的 SQL 示例都会遵循这些标准。 SQL 的一些进阶应用技巧1、巧用 CASE WHEN 进行统计 来看看如何巧用 CASE WHEN 进行定制化统计,假如咱们有如下的需要,心愿依据右边各个市的人口统计每个省的人口 应用 CASE WHEN 如下 2、巧用 CASE WHEN 进行更新 当初某公司员工工资信息表如下: 当初公司出台了一个奇葩的规定 对以后工资为 1 万以上的员工,降薪 10%。对以后工资低于 1 万的员工,加薪 20%。一些人不假思索可能写出了以下的 SQL: 这么做其实是有问题的, 什么问题,对小明来说,他的工资是 10500,执行第一个 SQL 后,工资变为 10500 0.9 = 9450, 紧接着又执行条件 2, 工资变为了 9450 1.2 = 11340,反而涨薪了! ...

April 29, 2022 · 2 min · jiezi

关于sql:SQL必知必会读书笔记

《SQL必知必会》读书笔记引言因为之前看过《Mysql必知必会》,所以看到这本书的名字之后挺感兴趣的,然而内容比拟根底和入门所以大多是跳读的,本次笔记更多是联合过来所学内容。 集体评估这本书能够说是能让初学SQL的技术人员用最快速度入门的一本书,对于很多一上来不晓得SQL语法感觉概念很形象的人来说也能对SQL畛域有一个大抵的理解,作为一个过来人当初感觉SQL真的挺神奇的。 这本书当然只适宜老手,对于新手来说更多是疾速回顾和查漏补缺,所以这一篇读书笔记将会简略提炼一些漠视的局部记录,以及工作实际之后对于书中一些倡议的补充和解释。 集体曾经看过十分老的小绿本的《Mysql必知必会》版本,在看到出到这本书的名字之后想再看看这本书。 最初千万不要认为SQL很简略,其实越是看似简略的货色越是简单。魔鬼常在细节中。 笔记内容很多,倡议按需浏览。笔记索引重要章节索引很多读者可能不爱看附录的内容,因为很多时候外面都是参考资料,然而这本书比拟特地,作者把本人认为重要和罕用SQL语法列了进去并且标记了对应的章节,置信你曾经明确这是什么意思了,所以这篇读书笔记间接把这一块内容迁徙过去了: 不晓得是不是出于让读者能看上来思考,很多比拟重要的内容都往后面的章节编排。另外上面标注的内容多是CRUD的内容,因为工作过程中用的最多。ALTER TABLEALTER TABLE 用来更新现存表的模式。能够用 CREATE TABLE 来创立一个新表。详情可参见第 17课。 COMMITCOMMIT 用来将事务写入数据库。详情可参见第 20课。 CREATE INDEXCREATE INDEX 用来为一列或多列创立索引。详情可参见第 22课。 CREATE TABLECREATE TABLE 用来创立新的数据库表。能够用 ALTER TABLE 来更新一个现存表的模式。详情可参见第 17课。 CREATE VIEWCREATE VIEW 用来创立一个或多个表的视图。详情可参见第 18课。 DELETEDELETE 用来从表中删除一行或多行。详情可参见第 16课。 DROPDROP 用来永久性地删除数据库对象(表、视图和索引等)。详情可参见罕用 SQL 语句速查 第 17课和第 18课。 INSERTINSERT 用来对表增加一个新行。详情可参见第 15课。 INSERT SELECTINSERT SELECT 用来将 SELECT 的后果插入到表中。详情可参见第 15课。ROLLBACKROLLBACK 用来撤销事务块。详情可参见第 20课。 SELECTSELECT 用来从一个或多个表(或视图)中检索数据。详情可参见第 2课、第 3课和第 4课(第 2课到第 14课从不同方面波及了 SELECT )。 UPDATEUPDATE 用来对表中的一行或多行进行更新。详情可参见第 16课。 ...

April 28, 2022 · 6 min · jiezi

关于sql:超越-SQL-的数据查询语言新秀Top8GraphQLPRQLWebAssembly上榜

几十年来,SQL(结构化查询语言)始终在数据查询语言畛域处于主导地位,简直成了数据库的“代名词”,任何想从数据库中检索信息的人都必须学习 SQL。但随着时代的变迁,SQL 对数据检索的主导力量正在削弱。 家喻户晓,世界上其余中央都应用小写字母,但 SQL 用户却仍在输出 SELECT 或 WHERE 等单词,这自身就是一种“倒退”。也正因为如此,当初市面上曾经呈现了一批应用全新语言的新数据库。 近日,InfoWorld 评比出了 8 款“超过” SQL 的数据查询语言,不仅为古代用例提供了更多的优雅、简略和灵活性,有些甚至还更好用,一起来看看吧! GraphQLGraphQL 的名字乍一听会让人有点困惑,因为它并非一种利用图形数据库中所有可能性的语言,反而更像一种查问相似于 JSON 的嵌套格局存储数据的优雅速记。 GraphQL 数据查询语言只是对后果的查问做疾速形容,通过后端查看该字段列表,这些字段可能对值有限度,并尝试查找匹配的后果。SQL 个别是指定数据库应该如何实现申请,而 GraphQL 用户只需提供一个字段列表。 特地对于某些 JSON 数据库来说,GraphQL 语言是一种人造的匹配语言,且 GraphQL 在应用表格模式搜寻关系数据库时也越来越风行,智能后端能够将嵌套申请转换为合乎模式的连贯模式。 GraphQL 最后由 Facebook 构建,用于 API 的查询语言,容许开发人员抉择他们想要收回的申请类型,并在单个申请中接管所需的信息。在作为一个独立的开源我的项目被公布后,开发人员开始开发 GraphQL 后端。 PRQLPRQL 语言为 Pipelined Relational Query Language(发音为“Prequel”)的缩写。这种语言中的查问被结构为一系列小命令,这些命令只应用所需的数据生成后果。 与许多古代编程语言相似,PRQL 查问的思考模型采纳函数办法,变量等简略性能能够缩小反复,简化流程。一行的后果以长链模式输出下一行,如果您想删除一个步骤,通常只需正文掉这一行,其余的 pipeline 依然能够工作。 PRQL 的代码采纳了 Rust 编写,以此将 PRQL 转换为 SQL 的传输工具,因而根本构造是可扩大的,这种简略的试验确保了语言的疾速倒退。 WebAssembly许多开发人员认为 WebAssembly(缩写为 Wasm)是一种用于创立在 web 浏览器中运行的疾速应用程序的工具,当 Redpanda 开始构建一个数据流工具来取代 Kafka 时,他们心愿增加一种机制,不仅能够传递数据,而且能够在过程中偶然转换数据,WebAssembly 就是最好的抉择。 ...

April 28, 2022 · 1 min · jiezi

关于sql:融云国产化适配排坑指南

超链接实验室,是融云策动推出的 IT 系列直播课,携手行业专家,一起聊聊 IT 国产化、协同办公通信、通信中台、企业数字化的那些事儿。关注【融云 RongCloud】,理解协同办公平台更多干货。 融云反对国产化的初心,可追溯到 2017 年进入政企市场之日起。时至今日,融云已成为国产化反对最欠缺、彻底的企业之一。(融云国产化适配范畴) 基于丰盛的国产化教训,「超链接实验室」首期课程《国产化之路 —— 国产化适配的那些坑》于 3 月 30 日正式开播。融云服务端研发架构师陈祥从服务端国产化适配、客户端国产化适配、以及国产化部署交付等三个局部为次要切入点,具体讲述了融云在国产化适配过程中曾遭逢的难题,并提出了一系列通过融云屡次验证的解决方案,心愿正走在“国产化之路”上的搭档们能够以此为鉴,少走弯路。 服务端国产化适配◆ 关系型数据库表名 / 字段名倡议全⼤写且防止以单个单词命名⽀持 SQL 的数据库⼀般由存储服务(Service)、存储引擎(Engine)组成,分析器进⾏ SQL 语句的词法和语法分析,执⾏器负责与存储引擎交互,国产关系数据库分析器层⾯均遵循 SQL 标准,但在存储引擎上各不相同。支流国产关系数据库人大⾦仓、达梦、神舟通用、南大通用尽管都⽀持 SQL ,但并不象征 MySQL 上执⾏没有问题的 SQL 语句在国产数据库上执行同样没有问题。 融云倡议:关系型数据库表名 / 字段名倡议全⼤写,并且防止以单个单词命名(在极其状况下能够将其列为开发标准明令禁止)。 全⼤写能够防止因为数据库大小写敏感设置所导致的找不到库 / 表 / 字段的状况的产生;不以单个单词命名表 / 字段,则根本能够防止关键字抵触问题。 ◆ 应用 jdk-8u192 作为 Java 运行环境为了保障高性能,融云协同办公产品的所有接入接口服务均应用 Netty(Netty 提供异步的、事件驱动的网络应用程序框架和工具,用以疾速开发高性能、高可靠性的网络服务器和客户端程序)。问题是,Netty 依赖的第三方包较多,因而呈现不反对 ARM / MIPS 的可能性较大,容易遭逢 HTTPS 解决失败等问题。 通过多方尝试,倡议:应用 jdk-8u192 作为 Java 运行环境,并在对应架构下从新编译。 须要补充阐明的是,2019 年 1 月起 Oracle 对 JDK8 进⾏免费,8u192 是 2018 年的最初⼀个版本更新,能够持续收费应用上来。然而从 2019 年 1 月开始,如果还想获取 JDK 的更新,则须要付费订阅。 ...

April 27, 2022 · 1 min · jiezi

关于sql:初级程序员的SQL拾遗增删改查

前言尽管平时开发中常常接触MySQL,但大多数的数据库操作都是通过ORM实现的(SpringDataJPA),本人并没有从底层接触SQL。再加上笔者非专业的身份,对于原生的SQL语句简直齐全不理解。本文是写给本人的,对于原生SQL的一篇笔记。 小Tip: 初学者如何调试SQL代码呢?能够用Navicat或PHPMyAdmin可视化练习。先用图形界面建几张表,再练习用SQL语句操作数据表即可。这样就防止了后期就用纯命令行难度过高。 一、增删改查(CRUD)在REST标准中写到:查问应用GET、减少应用POST、批改应用UPDATE、删除应用DELETE。增删改查是最常见的搬砖了,那么它们的SQL代码是什么呢? 咱们先以单表为例(也就是无外键状况)。 单表操作的命令具备很强的法则。包含以下因素: 指令字段指标表参数分号指令通知SQL要执行什么操作,是减少?还是批改?还是删除?字段通知SQL要操作哪几个列,比方查出所有学生的姓名和年龄。指标表通知SQL要操作哪张表,比方删除班级表某个班级? 查——SELECT写法是: SELECT 字段1,字段2,... FORM 表名 WHERE 条件;示例: // 从学生表查找ID为1的姓名和年龄SELECT name, age FORM student where id=1;(辅助记忆:)此时的指令为SELECT指标表应用FORM 表名来确定参数次要是减少筛选的条件,精确查到想要的数据 分页查——LIMIT参数(对于MySQL)写法是: SELECT 字段1,字段2,... FORM 表名 WHERE 条件 LIMIT 条数;示例: // 从学生表查找10条性别是女的学生的所有字段SELECT * FORM student where sex=1 LIMIT 10;(辅助记忆:)LIMIT不属于原生SQL的语法,对于不同的发行版有着不同的实现。其中MySQL应用的是LIMIT语句,作用是只取出十条。这种查询方法罕用于Web的分页查问。 减少——INSERT写法: INSERT INTO 表名 (字段1,字段2,...) VALUES (值1,值2,...);示例: // 向学生表插入姓名为张三、性别为女、年龄20岁的学生INSERT INTO student (name, sex, age) VALUES (zhangsan, 1, 20);(辅助记忆:)对于减少操作,指令就变成了INSERT。减少操作不仅要给出字段还要给出值,所以须要VALUES。此时作用表的前缀有一些变动,设想一下:执行查问时,数据从数据库到用户,所以用FORM;但插入时,数据从用户到数据库,所以是INTO。而因为插入会间接插到最初一条数据,所以没有WHERE参数。 批改——UPDATE写法: UPDATE 表名 SET 字段1=值1,字段2=值2,字段3=值3,... WHERE 条件;示例: // 在学生表中找到id为1的学生,而后更新姓名=张三、年龄=20、性别=男UPDATE student SET name=zhangsan,age=20,sex=0,... WHERE id=1;(辅助记忆:)此时的指令为UPDATE。因为须要批改字段,须要应用SET批改只针对一条或几条数据,必须应用WHERE条件进行限度,否则会批改整张表的数据! ...

April 24, 2022 · 1 min · jiezi

关于sql:10-个使用-SQL-的-AWS-服务

抉择哪个?Amazon Web Services (AWS) 是世界上最大的云平台,领有200 多项性能。在本文中,咱们合成了 10 种至多反对某些 SQL 语法的 AWS 服务,探讨它们的用例,并举例说明如何编写查问。 服务 形容 SQL 反对 用例RDS Postgres、MySQL 等 满的 中小型网络应用极光 无服务器数据库 满的 无服务器利用红移 数据仓库 满的 OLAP、PB 级数据、剖析动静数据库 NoSQL 数据库 一些 - PartiSQL 电子商务,疾速构建键空间 托管 Cassandra(键值) 一些 - CQL 消息传递海王星 图数据库 一些 - openCypher 社交网络工夫流 工夫序列数据库 局部的 物联网、日志记录量子账本 加密验证交易 一些 - PartiSQL 金融雅典娜 S3 上的即席查问 一些 - CTAS 历史数据巴别鱼 Aurora 上的 MSFT SQL Server 满的 。网上表显示了服务之间的 SQL 反对如何变动。图形数据库不能像经典关系数据库那样被查问,各种 SQL 子集(如PartiQL)曾经呈现以适应这些模型。事实上,即便在规范 SQL 中,也有许多SQL 方言实用于不同的公司,如 Oracle 和 Microsoft。 ...

April 24, 2022 · 3 min · jiezi

关于sql:MySQL基础合集

我的小站 1、MySQL的劣势运行速度快应用成本低可移植性强实用用户广2、MySQL的运行机制一个SQL语句,如select * from tablename ,从反对接口进来后,进入连接池后做权限、验证等环节,而后判断是否有缓存,有则间接放回后果,否则进入SQL接口,在查问之前查问优化器进行优化,最初进行解析,查问。并通过存储引擎与文件交互。 3、MySQL的配置端口号:3306 默认字符集:utf8 将bin目录写入 环境变量 root明码设置 注:utf8:一种Unicode编码,解决国内上字符不对立的多字节编码,通用性强 my.ini:记录MySQL配置信息,可批改配置内容,如端口号,字符集等 4、命令行连贯MySQL首先查看是否启动服务 **属性窗口****DOS命令:** 启动:net start mysql57 进行:net stop mysql57 57代表是5.7的版本,以下的不需接57 注:如果批改了配置文件,必须重启MySQL服务能力失效 命令行连贯MySQL语法:mysql –h服务器主机地址 –u 用户名 –p明码 l –h服务器主机地址(如果是本机能够省略这名句) 明码可省略,按回车再输出 5、零碎数据库和用户数据库零碎数据库: information_schema:次要存储系统中的一些数据库对象信息,如用户表信息、字段信息、权限信息、字符集信息和分区信息等。 performance_schema:次要存储数据库服务器性能参数 mysql:次要存储系统的用户权限信息 test:MySQL数据库管理系统主动创立的测试数据库,任何用户都能够应用 用户数据库: 用户数据库是用户依据理论需要创立的数据库。本章前面的解说次要针对用户数据库。 6、创立数据库 set names utf8; 语法: create database 数据库名 示例:create database myschool; 7、查看数据库列表语法:show databases; 8、抉择数据库语法:use 数据库名; 注:应用数据前必须先抉择该数据库! 9、删除数据库语法:drop database 数据库名; 10、MySQL数据类型 11、创立表语法:CREATE TABLE [IF NOT EXISTS] 表名 ( 字段1 数据类型 [字段属性|束缚][索引][正文], …… 字段n 数据类型 [字段属性|束缚][索引][正文] )[表类型][表字符集][正文];例: ...

April 21, 2022 · 3 min · jiezi

关于sql:MySQL数据库常识之储存引擎

我的博客 贮存引擎分类 show engines;这个命令能够查看数据库的数据引擎,能够看到InnoDB是默认的引擎。 命令除了在终端运行,也能够在查询数据库可视化工具中运行。 而,(我是5.7版本)咱们能够看出数据库中,存储引擎一共有九个。 别离是InnoDB、MRG_MYISAM、MEMORY、BLACKHOLE、MyISAM、CSV、ARCHIVE、PERFORMANCE_SCHEMA、FEDERATED。 设置默认引擎SHOW VARIABLES LIKE 'default_storage_engine%'这个语句能够查问以后默认的数据库引擎。 default_storage_engine%示意查问默认数据库存储引擎。 如果咱们要批改默认贮存引擎,咱们能够通过批改my.ini/my.cnf文件实现(不倡议!)。 增加 default-storage-engine = 数据库引擎名(INNODB/MYISAM)。 sudo service mysql restart用命令重启mysql。 应用上面的语句能够批改数据库长期的默认存储引擎: SET default_storage_engine=< 存储引擎名 >然而当再次重启客户端时,默认存储引擎依然是InnoDB。 创立表时指定引擎CREATE TABLE 表名 ( -- 字段省略) ENGINE = MyISAM;ENGINE = 引擎类型接在建表语句最初,能够指定引擎。

April 21, 2022 · 1 min · jiezi

关于sql:精彩联动OpenMLDB-Pulsar-Connector原理和实操

人工智能工程化落地的关键点之一,在于解决实在业务场景的实时批量预估和实时模型更新问题。更好更快的将线上实时数据转化为AI可用的特色,将减速AI利用落地的效率及成果。为此,OpenMLDB 和 Apache Pulsar 单干推出OpenMLDB Pulsar Connector,实现稳固的流式集成,为高效买通实时数据到特色工程提供一条值得期待的清晰门路。 对于OpenMLDBOpenMLDB 是一个开源机器学习数据库,致力于闭环解决 AI 工程化落地的数据治理难题。自 2021 年 6 月开源以来,OpenMLDB 优先开源了特色数据治理能力,依靠 SQL 的开发能力,为企业提供全栈性能的、低门槛特色数据计算和治理平台。 OpenMLDB 蕴含 Feature Store 的全副性能,并且提供更为残缺的 FeatureOps 全栈计划。除了提供特色存储性能,还具备基于 SQL 的低门槛数据库开发体验、面向特色计算优化的 OpenMLDB Spark 发行版,针对实时特色计算优化的索引构造,特色上线服务、企业级运维和治理等性能,让特色工程开发回归于实质——专一于高质量的特色计算脚本开发,不再被工程化效率落地所羁绊。 对于Apache PulsarApache Pulsar 是下一代云原生音讯流平台,在 2018 年 9 月毕业成为 Apache 软件基金会顶级我的项目。从 2012 年诞生时,Apache Pulsar 就前瞻性地采纳了存储计算拆散、分层分片的云原生架构,极大加重用户在音讯零碎中遇到的扩大和运维艰难。 Pulsar 通过特地的设计和形象,对立地反对 Stream 和 Queue 两种音讯生产模式,放弃了 Stream 模式的高性能和 Queue 模式的灵活性。Pulsar 在保障大数据音讯零碎的性能和吞吐量的同时,提供了更多企业级的 Feature,包含不便的运维和扩大、灵便的音讯模型、多语言 API、多租户、异地多备、数据的强持久性一致性等等,解决了现有开源音讯零碎的很多不足之处。同时,这种设计对容器十分敌对,使得 Pulsar 成为流原生平台的现实抉择。 OpenMLDB-Pulsar Connector【Connector概述】定位OpenMLDB Pulsar Connector,高效买通实时数据到特色工程,大幅晋升数据应用效率、助力开发者构建实时数据管道、使企业更专一和更高效的摸索数据的商业价值。在 Pulsar in OpenMLDB 的工作流中,Connector(地位如下图所示)帮忙开发者轻松地将音讯零碎 Pulsar 与开源机器学习数据库 OpenMLDB 联合应用,面向机器学习施展出 Pulsar 最弱小的实时价值。 ...

April 21, 2022 · 2 min · jiezi

关于sql:OpenMLDB-Pulsar-Connector高效打通实时数据到特征工程

导读:人工智能工程化落地的关键点之一,在于解决实在业务场景的实时批量预估和实时模型更新问题。更好更快地将线上实时数据转化为AI可用的特色,将减速AI利用落地的效率及成果。为此,OpenMLDB 和 Apache Pulsar 单干推出OpenMLDB Pulsar Connector,实现稳固的流式集成,为高效买通实时数据到特色工程提供一条值得期待的清晰门路。 我是黄威,目前是第四范式研发架构师,也是OpenMLDB的外围研发。明天次要为大家介绍三个方面的内容: Pulsar Connector简介OpenMLDB Connector on Pulsar介绍OpenMLDB Connector on Pulsar演示01 Pulsar Connector简介Apache Pulsar 是一个云原生的,分布式音讯流平台。它能够作为 OpenMLDB 的在线数据源,将实时的数据流导入到 OpenMLDB 在线。Pulsar 提供了Connector 框架,在此基础上能够与不同零碎的对接。咱们基于Connector框架,开发了 OpenMLDB JDBC Connector,通过它咱们就能够无障碍地连贯 Pulsar与OpenMLDB,Pulsar的音讯将主动地写入OpenMLDB。 02 OpenMLDB-Pulsar Connector介绍1. 定位OpenMLDB Pulsar Connector,高效买通实时数据到特色工程,大幅晋升数据应用效率、助力开发者构建实时数据管道、使企业更专一和更高效的摸索数据的商业价值。 在OpenMLDB 的工作流中,Pulsar Connector(地位如下图所示)帮忙开发者轻松地将音讯零碎Pulsar与开源机器学习数据库OpenMLDB连接起来,造成一条实时数据流。 2. 性能Pulsar能够应用connector来连贯其余零碎。Source connector能够使其余零碎的数据流入Pulsar,sink connector能够将音讯流出至其余零碎。 OpenMLDB Pulsar Connector反对了sink性能,使Pulsar音讯能够写入到OpenMLDB在线存储中。 能够通过 Connector Admin CLI并联合 sinks 子命令来治理 Pulsar connector(例如,创立、更新、启动、进行、重启、重载、删除以及其余操作)。 3. 劣势想要使OpenMLDB与Pulsar领有稳固的流式集成,咱们举荐间接应用Pulsar OpenMLDB connector 。它具备诸多劣势,包含但不限于: 易上手。无需编写任何代码,只需进行简略配置,便可通过OpenMLDB Pulsar Connector 将Pulsar的音讯流入 OpenMLDB 。简化的数据导入过程能大幅晋升企业的数据应用效率。易扩大。依据不同的业务需要,能够抉择在单机或集群上运行 OpenMLDB Pulsar Connector ,助力企业构建实时数据管道。可继续。OpenMLDB Pulsar Connector 简略的装置和部署过程,使企业能更专一和更高效地摸索数据的商业价值。4.Connector下载地址OpenMLDB Pulsar Connector: ...

April 20, 2022 · 2 min · jiezi

关于sql:Linux中MySQL的常用命令

我的博客 登录 mysql -u用户名 -p-- 而后在上面输出明码,Linux的明码不会显示出,盲打就能够mysql -u用户名 -p明码-- 这种形式将间接登录开关开启数据库service mysql start我这里没加分号,要是终端运行命令,记得结尾加上;不然就可能呈现如下后果。 敞开数据库service mysql stop重启数据库service mysql restart罕用操作显示数据库列表show databases;创立、删除数据库create database 数据库名;drop database 数据库名;显示库中的数据表use mysql;show tables;显示数据表构造describe 数据表名;批改明码SET PASSWORD命令(需登录)mysql> set password for 用户名@localhost = password('新密码');应用sql语句更新 mysql 库中的 user 表(需登录)mysql> use mysql; mysql> update user set password=password('123') where user='root' and host='localhost'; mysql> flush privileges;mysqladmin命令,明文(不需登录)mysqladmin -u用户名 -p旧明码 password 新密码命令,密文(不需登录)mysqladmin -u用户名 -p旧明码 password+回车,而后输出两次新密码其余命令导入、导出数据库(不需登录)导出所有数据库mysqldump -u用户名 -p明码 --all-databases >导出门路导出指定数据库mysqldump -u用户名 -p明码 --databases 数据库名>导出门路导出指定数据库的构造(无数据)语法:mysqldump -u用户名 -p明码 --no-data --databases 数据库名>导出门路举例:mysqldump -uroot -p123456 --no-data --databases testdatebase >/tmp/testdatebase_no_data.sql导出指定数据库中的指定表语法:mysqldump -u用户名 -p明码 --databases 数据库名 --tables 数据表名>导出门路举例:mysqldump -uroot -p123456 --databases testdatebase --tables t_user >/tmp/testdatebase_user.sql导出指定数据库中的指定表的构造(无数据)语法:mysqldump -u用户名 -p明码 --no-data --databases 数据库名 --tables 数据表名>导出门路举例:mysqldump -uroot -p123456 --no-data --databases testdatebase --tables t_user >/tmp/testdatebase_user_no_data.sql导出指定数据库中的指定表,设置查问条件语法:mysqldump -u用户名 -p明码 --databases 数据库名 --tables 数据表名 --where='条件'>导出门路举例:mysqldump -uroot -p123456 --databases testdatebase --tables t_user --where='user_no=1'>/tmp/mysql_user_no.sql跨服务器备份数据库-- 将 host1 服务器中的 db1 数据库的所有数据导入到 host2 中的db2数据库中,db2的数据库必须存在否则会报错-- (经测试,在mysql5.5版本中,db2存在即可,理论生成数据库名称与db1统一;加上-C参数能够启用压缩传递)语法:mysqldump --host=host1 -u用户名 -p明码 --databases db1 |mysql --host=host2 -u用户名 -p明码 --databases db2举例:mysqldump --host=192.168.1.101 -uroot -p123456 -C --databases testdatebase |mysql --host=192.168.3.102 -uroot -p123456 --database testdatebase通过 sql 文件导入数据库语法:mysql -u用户名 -p明码 < 导入门路举例:mysql -uroot -p123456 < /tmp/testdatebase.sql注:局部摘自博客园

April 20, 2022 · 1 min · jiezi

关于sql:Flink-流批一体在小米的实践

简介:基于流批一体的革新,无论是实时还是离线都只须要保护一套计算框架,为业务开发人员、平台提供方和计算引擎的反对方节俭了大量人力资源。 摘要:本文整顿自小米软件开发工程师金风在 Flink Forward Asia 2021 流批一体专场的演讲。本篇内容次要分为三个局部: 小米的大数据倒退演变流批一体的平台建设流批一体利用场景将来布局点击查看直播回放 & 演讲PDF 一、小米的大数据倒退演变 2019 年之前,小米的实时计算次要以 SparkStreaming 为主,少部分 Storm,离线计算以 Spark 为主。2019 年,开始接入 Flink,并广泛应用于信息流搜寻举荐、广告实时样本、实时 ETL 等场景,逐渐替换了原来的 SparkStreaming 作业,得益于 Flink 框架的各种优良个性,咱们在作业的正确性,实时性,资源应用效率方面都有较大晋升。2020 年,开始接入应用 FlinkSQL,并宽泛用于实时数仓的建设和实时 ETL 作业的开发。FlinkSQL 的实时数仓将数据链路由 T+1 升高到了秒级。2021 年,开始接入数据湖 Iceberg,基于 Flink 和 Iceberg 来构建流批一体的实时数仓解决方案,并在小米外部的局部业务进行了落地,证实流批一体在赋能业务、晋升作业开发效率、简化链路节俭资源的方面是可行的。 上图是小米以后的实时和离线框架,目前是多种框架并存的状态。业务开发人员无论是写 SQL 作业还是写 Jar 包作业,都至多要保护两套代码。公司外部的计算引擎团队也须要花两拨人力别离去保护不同的计算框架,同时平台层也须要对不同的计算引擎去做不同的适配。 基于流批一体的革新,无论是实时还是离线都只须要保护一套计算框架,为业务开发人员、平台提供方和计算引擎的反对方节俭了一半的人力资源。 二、流批一体的平台建设为了摸索流批一体,咱们也做了很多相干的摸索和实际。 对于流批一体的平台化建设,次要分为 4 个方面,别离是元数据管理、权限治理、作业调度以及 Flink 的生态建设。 2.1 元数据管理 咱们基于 Metacat 做了对立的元数据管理,由 Metacat 对立对接上游不同的存储系统和上游的计算引擎。 基于 Metacat,外部的所有零碎都被对立划分成三级构造,与 FlinkSQL 的三级构造绝对应。 第一级 Catalog,次要由服务名和集群名拼接而成。第二级 Database,它与大部分零碎的 Database 保持一致。没有 Database 的零碎默认应用 default 来代替。第三级 Table,也与零碎的 Table 保持一致,比方音讯队列的 topic 名, Elasticsearch 的索引名。在构建好对立的元数据管理之后,只须要写一条 DML 语句即可实现一个实时将音讯队列数据入湖作业的开发。 ...

April 20, 2022 · 3 min · jiezi

关于sql:SQL审核-SQLE-兼容-MySQL-80-测评

作者:任仲禹 爱可生 DBA 团队成员,善于故障剖析和性能优化,文章相干技术问题,欢送大家一起探讨。 本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 目录前⾔DDL语句审核DCL语句审核DML语句审核DDL与DML高低⽂关联论断前⾔SQLE是由爱可⽣开发并开源、⽀持SQL审核、标准化上线流程等丰盛性能的可扩大 SQL 审核⼯具(https://github.com/actiontech...);⽬前⼤局部 MySQL 业务使⽤场景以5.7版本为主,明天本⽂来验证下 SQLE 对 MySQL 8.0 的⽀持水平。 SQLE版本:sqle-ce-1.2203.0MySQL版本:MySQL 8.0.28环境装置过程:略DDL语句审核1. 测试create table建表语句⼀ 审核后果如下图。 ⼩结 审核后果根本没啥问题,不合乎建表规定和命名标准的问题SQLE将失常甩出谬误。2. 测试create table 建表语句⼆下⾯2条SQL示例,⼀条为语法⽆误、⼀条为语法错误(含MySQL保留关键字)。如下图审核后果,第⼆条 rank 表 其实与预期后果不合乎,SQLE应该甩出报错。 失常的审核后果应该跟下图⼀样甩出谬误。 ⼩结 上述审核后果不⼀样的起因在于,order、rank 尽管同属于MySQL 8.0的保留关键字,但 rank 是8.0版本新增的,以后SQLE的审核规定中关键字库预计须要更新。留神:该rank建表语句虽能通过审核,但上线依然会失败。3. 测试alter table创立/批改索引或列。 审核后果如下图。 ⼩结 审核后果根本没啥问题,不合乎索引、字段创立规定的问题SQLE将失常甩出谬误。4. 测试alter table禁⽤索引下⾯2条SQL示例,⼀条为创立索引,⼀条为将索引批改为不可⻅(禁⽤)状态。如下图审核后果,其实不合乎预期。 失常的的审核后果应该为 ⽆问题 ,该语句 MySQL 中执⾏如下图所示。 ⼩结审核后果不合乎预期的起因,应该是该 ALTER TABLE ... ALTER INDEX ... 语法为8.0新增,⽬前SQLE临时还未加⼊解析器。DCL语句审核DCL语句⼀般很少在线上环境中进⾏审核或上线,但SQLE仍然能够⽀持。 1. 测试set命令示例语句如下。 然而也有可能会有⽆法审核的命令,如下图所示。 审核后果如下图,第2条语句审核后果不合乎预期。 失常的审核后果应为 ⽆问题 ,该语句MySQL中执⾏如下图所示。 ...

April 18, 2022 · 1 min · jiezi

关于sql:分布式存储论文研读四Aurora

分布式存储钻研打算的最初一篇论文,研读Amazon的Aurora数据库。其对应论文为:Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases。论文发表于2017数据库顶会SIGMOD。键值对数据库,Amazon提出了Dynamo,而关系型数据库,Amazon推出了Aurora。 Introduction随着数据库上云,传统数据库的业务IO瓶颈曾经转化为数据库层和数据存储层之间的IO瓶颈,在这种状况下,内部存储节点、磁盘和网络门路对于响应工夫有很大的影响。另外,一些同步操作会导致数据库提早和环境切换。还有,事务提交也会很大水平上影响性能,尤其是2阶段提交等简单操作。 绝对应的,Aurora有以下长处: 应用了一个独立的,能容忍谬误并自我修复的跨数据中心存储服务,保障了数据库不受网络层或数据存储层问题的影响。在数据存储中,只写入redo log记录,能够从量级上缩小网络IOPS。将耗时简单的性能从一次低廉的操作转变为间断的异步操作,保障这些操作不会影响前台解决。Durability at Scale为了保障大规模集群下的耐久性,Aurora次要有两项措施:应用一个仲裁模型(quorum model)以及分段存储。 仲裁模型,咱们曾经比拟相熟了,对于V个正本的数据,R + W > V即可保障一致性。在之前的Dynamo论文中也有提到。一个典型的取值是(V,R,W)=(3,2,2)。但Aurora认为这还不够。一个简略的例子是,将数据的三个正本别离放在三个可用区(AWS的AZ概念,在同一个地区相邻的三个数据节点),如果同时一个可用区产生了大规模故障,而另一个可用区里的一台服务器产生了偶尔故障,那么仲裁模型将不再无效。 为了保障(a)即使整个可用区加一台其它可用区服务器产生故障,零碎不会失落数据,以及(b)一整个可用区故障后仍能进行写数据,Aurora的参数设置为(V,R,W)=(6,3,4),每个可用区会有两个数据正本。能够看到(a)状况下,3个正本产生故障,不影响读操作,数据不失落。而(b)状况下,2个正本故障,不会影响写操作。 Segmented Storage故障复原有两个概念:MTTF(Mean Time to Failure,均匀故障产生工夫)和MTTR(Meat Time to Repair,均匀故障修复工夫)。如果心愿零碎可能抵挡故障,那么须要MTTF > MTTR,在故障修复期中尽可能没有新的故障产生。MTTF很难优化,Aurora专一于升高MTTR,策略也很直观:将数据分段为10GB的Segment,每份会在3个可用区中有一共6个正本,数据存储在带有SSD的EC2上(亚马逊的虚构服务器)。那么Segment就是零碎探测生效和修复的最小单元。10GB的分段数据在10Gbps的网络连接上只须要10s就能传输结束,在这个窗口内1个可用区生效,外加另外可用区中两个正本同时生效的概率十分非常低。 Operational Advantages of Resilience因为整个Aurora的设计针对故障保障了高可用性,那么利用这个高可用性也能够做很多运维操作。例如回滚一次谬误的部署;标记过热的节点为已损坏,由零碎从新将其数据调配到冷节点中去;以及进行节点为其打上零碎和安全补丁。其中,打补丁时,会一个个可用区顺次进行,同一时间一份数据只会有一个正本所在节点进行打补丁操作。 The Log is The DatabaseThe Burden of Amplified WritesAurora在提供了弱小的高可用性背地,理论放大了整个数据库读写的操作。例如一个MySQL的写操作须要写4次,在写的过程中,实际上分为了很多类的数据,包含redo log、binaray log(会被同步归档在S3中来反对实时restore)、批改的数据页、长期的double-write以及FRM元数据。所有数据都会在节点间流传和写入数据库。被放大了的网络负载如图: Offloading Redo Processing to Storage为了解决上述的问题,在Aurora中,在网络中流传的写数据只有redo log。在将log传递到数据存储层后,再在后盾或按需生成数据库的页。因而也才有了题目“The log is the database”。优化后的网络负载如图: 通过试验比照,这项优化达成了其同一时间解决的事务量进步到了35倍,优化前每个事务处理的I/O数量是优化后的7.7倍,以及更多数据上的性能进步。性能的进步也意味着零碎可用性的降级,升高了故障复原工夫。 Storage Service Design PointsAurora的一项外围设计理念,就是把大部分的存储操作放到后盾,精简前台的解决以缩短响应工夫。拆散前后台的做法让整个零碎更加灵便。例如在CPU忙于解决前台申请的时候,就能够临时不必管旧页面的垃圾回收。后盾解决与前台解决出现负相关的关系,相互削峰填谷。一个更加粗疏的存储节点交互如图: 接管到日志记录,并填入一个内存队列。在磁盘上将记录长久化,并返回一个应答。整顿记录,并查看是否有因为一些操作失落导致的记录差别。通过Gossip和其它节点交换填补差距。将日志记录合并到新的数据页中去。定期将日志和新页面备份到S3。定期进行垃圾回收,清理掉无用的旧版本数据。定期进行CRC校验。其中只有第1第2步波及前台交互,影响响应工夫。 The Log Marches Forward这节的题目起的很有意思,内容次要讲的就是Aurora如何在不应用简单的2PC协定的状况下进行多个状态(durable,runtime,replica)的数据同步。 ...

April 17, 2022 · 1 min · jiezi

关于sql:SQL-JOIN的常见连接方式与相关概念

JOIN 连贯操作介绍SQL中的连贯JOIN是指将来自两个或多个表、视图或物化视图的行组合在一起的查问;当查问的FROM子句中呈现多个表时,数据库就会执行一个连贯。 查问的抉择列列表能够从这些表中抉择任何列,如果其中任意两个表存在同名的列,则必须应用表名限定整个查问中对这些列的援用以防止歧义。 大多数连贯查问至多蕴含一个连贯条件,要么在FROM子句中关键字ON前面,要么在WHERE子句中;连贯条件比拟来自不同表的两个列,多个条件能够用AND或OR连接起来,最终都是返回一个bool值;连贯条件中的列不须要也呈现在抉择列表中。蕴含连贯条件的WHERE子句还能够蕴含仅援用一个表的列的其余过滤条件,用于进一步限度连贯查问返回的行。 关注公众号大数据研学社:BigDataRLC,第一工夫看最新文章。 SQL查问的根本过程单表查问:依据WHERE子句中的条件过滤FROM子句中指定表中的记录,造成两头表;如果有GROUP BY、HAVING、WINDOW、ORDER BY、LIMIT等子句则按程序进一步做相应解决,最初依据SELECT子句中的列与表达式做相应解决后返回最终后果两表连贯查问:对两表求积(笛卡尔积)并用ON条件和连贯类型进行过滤造成两头表;而后再依据WHERE条件过滤两头表的记录,最初依据SELECT指定的列返回查问后果多表连贯查问:先对第一个和第二个表依照两表做连贯,而后用查问后果和第三个表做连贯,以此类推,直到所有的表都连贯上为止,造成一个两头的后果表,而后依据WHERE条件过滤两头表的记录,最初依据SELECT指定的列返回查问后果JOIN中ON和WHERE两种条件的区别连贯条件能够呈现在ON关键字或者WHERE子句中,然而咱们要特地留神 ON条件和WHERE条件失效机会是不一样的,在大数据量状况下耗费的资源可能会存在很大的差别: ON条件:做为过滤两个连贯表的笛卡尔积造成两头表的约束条件,生成的两头表曾经是过滤后的数据WHERE条件:在有ON条件的两表或多表连贯中,是过滤两头表的约束条件,两头表学生成进去再做过滤此外,INNER JOIN中两种条件的后果是雷同的,然而用LEFT JOIN 时(RIGHT JOIN或FULL JOIN相似),因为无论ON的条件是否满足都会返回左表的所有记录,因而上面两个语句是不等价的: SELECT * FROM tab1 LEFT JOIN tab2 ON (tab1.size = tab2.size) WHERE tab2.name='AAA';SELECT * FROM tab1 LEFT JOIN tab2 ON (tab1.size = tab2.size AND tab2.name='AAA');后面咱们提到只有是返回bool值表达式都能够做为JOIN的连贯条件,因而有人会在ON条件上间接写上形如 column1 != 100 的过滤条件,举荐用法是ON条件只进行连贯操作,WHERE则用于过滤两头表的记录。 常见JOIN连贯形式通常咱们说的Join的连贯形式或者说连贯类型有5种,最罕用的是后面2~3种: 内连贯 INNER JOIN左外连贯 LEFT OUTER JOIN右外连贯 RIGHT OUTER JOIN全外连贯 FULL OUTER JOIN穿插连贯 CROSS JOIN内连贯 INNER JOIN内连贯INNER JOIN 通常简写为 JOIN,只返回两个表中连贯字段相等的行。SQL举例: SELECT * FROM table1 JOIN table2 ON table1.column_name1 = table2.column_name2;下面的内连贯SQL还有一种等价的写法,有人称为多表联结查问: ...

April 8, 2022 · 2 min · jiezi

关于sql:众安保险-x-StarRocks-全新实时分析能力开启数字化经营新局面

作为国内⾸家互联⽹保险公司,众安保险是一家以技术创新带动⾦融倒退的⾦融科技公司。区别于传统保险公司的经营模式,众安保险业务流程全程在线,全国均不设任何分⽀机构,齐全通过互联⽹进⾏承保和理赔服务。目前已服务超5亿用户,2021 年总保费冲破 200 亿元,同比增长 21.9%。 由“保险+科技”双引擎驱动,众安保险专一于利用新技术重塑保险价值链,围绕衰弱、数字生存、生产金融、汽车四大生态,以科技服务新生代,为其提供个性化、定制化、智能化的新保险。 在科技赋能保险的同时,众安保险将通过业务验证的科技对外输入,海内合作伙伴包含日本历史最悠久的财产保险公司 SOMPO、东南亚当先的 O2O 平台Grab、新加坡最大的综合保险机构 Income 等知名企业。 近年来,众安保险致力于减速数据价值向业务价值转化,促使数据因素带来业务的提质增效。这既须要业余技术团队+成熟的数字化体系,还须要技术具来提供智能化解决案。 本文将以众安集智平台基于极速 MPP 剖析型数据库系统 StarRocks 的利用实际,解说集智平台如何解决极速查问和高并发等数据问题,晋升整体的数据反对能力。 行业背景在传统的保险售卖场景中,保险公司次要通过承保利润和投资收益两局部取得盈利,⽽保险⾦融的⾏业特殊性以致保司对公司整体的数据、平安、⻛控等持有⾼度敏感性,因而一款保险产品从市场投放到销售、核保及理赔,每个环节都须要严格监测业务⾛向和数据变动。 并且随着工夫的积淀和业务拓展,保司所波及和积攒的相干数据越来越多,其中既蕴含保司⾃营的业务数据,也有单干渠道的电商销售、医疗衰弱等数据以及第三⽅的信贷评级、核保⻛控等数据。在⽇益强烈的市场竞争和技术变⾰这两⼤背景下,基于⼤数据、⼈⼯智能等技术的商业模式翻新,以及数字化转型降级曾经成为保险机构的必然选择。 因而在以上背景下诞⽣了专门针对保险⾦融⾏业的相干技术和产品,通过⼤数据、⼈⼯智能等相干技术加持,保障保司在每个业务环节中做到费⽤可控数据可经营的⽬的。常⻅的例如营销场景中的渠道投放、⽤户触达、流动监控;信贷场景中的授信、⽀⽤、还款、防⽌逆抉择⻛险等场景。 当然⾯对保险⾦融⾏业如此⼤的数据量和业务复杂度,既有挑战也有时机,但须要将这些数据进⾏充沛整合并无效利⽤,能力更好地使其转换为企业⾃⼰的数据资产,从传统的经营⽅式过渡到数字化在线经营。让数字反映出实在的经营情况,及时管制产品⻛险和策略调整,以实现保费收⼊的正向利润,达到精细化经营。 而众安作为寰球⾸家以技术创新带动⾦融倒退的互联⽹保险公司,在互联⽹+保险⾦融的双轮驱动下,全程通过互联⽹进⾏承保和理赔服务。在以上双重背景下诞⽣了数字化转型中专门针对业务数据管理和剖析的零碎产品——集智。 本⽂将以集智基于 StarRocks 全⾯降级数字化经营能⼒的实在使⽤场景为例,讲述集智如何通过 StarRocks 解决极速查问和⾼并发等数据问题,晋升集智平台整体的数据⽀持能⼒和市场竞争⼒。 集智平台介绍集智是众安的一款可视化智慧经营剖析平台产品,集成了⼈⼯智能+商业智能+可视化数据仓库技术,智能整合来⾃不同场景的数据,标准企业数据池,实现繁冗的数据治理和智能决策环节。 集智秉着“助⼒企业实现智慧经营”的愿景和“从数据到价值,从看⻅到预⻅”的理念,依靠丰盛的可视化图表组件以及底层的⼤数据处理能⼒,实现零代码拖拽式剖析与亿级数据的秒级响应,帮忙企业战略规划⼈员、财务企划⼈员、销售治理⼈员、业务经营⼈员及数据⼈员等全⾯晋升信息效率、资源效率及决策效率。 ⽬前在众安外部,数字⽣活、健康险、⾦融、直营、⻋险各个业务线,以及 HR、运管、⻛控等中后盾部门,超过 3000 ⼈都在使⽤集智平台,均匀⽇活可达 2000+,晋升超过 50% 的数据分析效率,升高了公司 40% 的⼈⼒老本。 业务背景一款好的数据分析产品离不开底层的数据引擎,集智平台的⼏⼤使⽤场景对底层的数据架构提出了不同的要求 可视化剖析→须要有丰盛的函数库⽀持不同类型图表的数据计算;交互式剖析→须要剖析后果的疾速响应来保障⽤户晦涩的剖析思路;多维透视剖析→须要⼤数据量的明细数据来⽀撑不同维度的筛选和下钻;实时数据分析→须要⽀持数据的实时写⼊、实时查问。针对上述的⼏个需要,咱们在平台建设的初期选⽤了 ClickHouse 作为底层对立的 OLAP 引擎,数据链路如下: 离线的数据会通过 DataX 对立采集到 MaxCompute 或 Hive 数仓,在离线数仓外部实现数据 ETL 的⼯作,数据加⼯实现之后,再次经由 DataX 输入到 ClickHouse 中,ClickHouse 中的数据间接提供给看板或者第三⽅零碎做数据查问。 实时的数据会通过 Binlog 监听或者⽇志采集⼯具同步到 Kafka,再经由 Flink 实现实时的数据 ETL,最终落到 ClickHouse 中。值得一提的是,这⾥为了应答一些业务场景中数据须要实时按主键更新的需要,咱们采⽤了 ClickHouse 的 ReplacingReplicatedMergeTree 引擎。因为 ClickHouse 对数据更新操作的⽀持还不够成熟,因而在使⽤ Replacing 引擎的过程中遇到很多问题,这也是咱们寻求新的 OLAP 技术选型的次要起因。 ...

April 7, 2022 · 2 min · jiezi

关于sql:SQL-必知必会-50-题11-15

本文已同步至:村雨遥SQL11 返回更多的产品形容OrderItems 表含有:订单号 order_num,quantity 产品数量 order_numquantitya1105a21100a2200a41121a510a219a75问题从 OrderItems 表中检索出所有不同且不反复的订单号(order_num),其中每个订单都要蕴含 100 个或更多的产品。 示例后果返回订单号列 order_num order_numa1a2a4示例DROP TABLE IF EXISTS `OrderItems`;CREATE TABLE IF NOT EXISTS `OrderItems`( order_num VARCHAR(255) NOT NULL COMMENT '商品订单号', quantity VARCHAR(255) NOT NULL COMMENT '商品数量');INSERT `OrderItems` VALUES ('a1','105'),('a2','1100'),('a2','200'),('a4','1121'),('a5','10'),('a2','19'),('a7','5')解答要筛选指定列中不反复的数据,则须要应用关键字 DISTINCT。此外,要筛选出满足指定条件的数据,则须要关键字 WHERE,而后依据题意,能够将条件写到一起,也能够将条件进行拆分后用关键字 OR 并联。 SELECT DISTINCT order_num FROM OrderItems WHERE quantity >= 100;SELECT DISTINCT order_num FROM OrderItems WHERE quantity > 100 OR quantity = 100;SQL12 检索供应商名称形容Vendors 表有字段供应商名称(vend_name)、供应商国家(vend_country)、供应商州(vend_state) vend_namevend_countryvend_stateappleUSACAvivoCNAshenzhenhuaweiCNAxian问题编写 SQL 语句,从 Vendors 表中检索供应商名称(vend_name),仅返回加利福尼亚州的供应商(这须要按国家[USA]和州[CA]进行过滤,没准其余国家也存在一个 CA) ...

April 6, 2022 · 2 min · jiezi

关于sql:SQL-必知必会-50-题6-10

本文已同步至:村雨遥SQL6 依照数量和价格排序形容假如有一个 OrderItems 表 quantityitem_price11001010032500问题编写 SQL 语句,显示 OrderItems 表中的数量(quantity)和价格(item_price),并按数量由多到少、价格由高到低排序。 示例答案返回 quantity 和 item_price 示例DROP TABLE IF EXISTS `OrderItems`;CREATE TABLE IF NOT EXISTS `OrderItems` ( `quantity` INT(64) NOT NULL COMMENT '数量', `item_price` INT(64) NOT NULL COMMENT '订单价格');INSERT INTO `OrderItems` VALUES (1,100),(10,1003),(2,500);解答同样是查问语句,要对查问后果进行排序,则须要应用 ORDER BY 关键字,最初则是须要留神是正序还是倒序,题目中由多到少和由高到低都是属于倒序,所以须要应用关键字 DESC。 SELECT quantity, item_price FROM OrderItems ORDER BY quantity DESC, item_price DESC;SQL7 查看SQL语句形容有 Vendors 表 vend_name海底捞小龙坎大龙燚问题上面的 SQL 语句有问题吗?尝试将它改正确,使之可能正确运行,并且返回后果依据 vend_name 逆序排列 SELECT vend_name, FROM Vendors ORDER vend_name DESC;示例展现返回 vend_name ...

April 6, 2022 · 2 min · jiezi

关于sql:SQL-必知必会-50-题1-5

本文已同步至:村雨遥SQL1 从 Customers 表中检索所有的 ID形容现有表Customers如下: cust_idABC问题编写 SQL 语句,从 Customers 表中检索所有的 cust_id。 示例答案返回 cust_id 列的内容 cust_idABC示例DROP TABLE IF EXISTS `Customers`;CREATE TABLE IF NOT EXISTS `Customers`( cust_id VARCHAR(255) DEFAULT NULL);INSERT `Customers` VALUES ('A'),('B'),('C');解答考查最简略的查问语句,因为 Customers 表中仅有 cust_id 一列,所以咱们能够应用以下两种解答形式。 第一种形式,抉择特定列进行输入,这也是咱们在工作中更加举荐应用的一种形式,将须要输入的列名全副形容进去。SELECT cust_id FROM Customers;第二种形式,应用 * 对表中所有列进行输入,因为 Customers 表中仅有一列,所以能够应用该形式。但在日常工作中,就算查问后果列中蕴含了数据库表的所有字段,也不要间接应用 *.SELECT * FROM Customers;SQL2 检索并列出已订购产品的清单形容表OrderItems含有非空的列prod_id代表商品id,蕴含了所有已订购的商品(有些已被订购屡次)。 prod_ida1a2a3a4a5a6a7问题编写SQL 语句,检索并列出所有已订购商品(prod_id)的去重后的清单。 示例DROP TABLE IF EXISTS `OrderItems`;CREATE TABLE IF NOT EXISTS `OrderItems`( prod_id VARCHAR(255) NOT NULL COMMENT '商品id');INSERT `OrderItems` VALUES ('a1'),('a2'),('a3'),('a4'),('a5'),('a6'),('a6')解答要对后果去重,能够应用 DISTINCT 关键字。应用时,在后边跟上须要去重的字段即可保障这些去重字段的查问后果不反复。 ...

April 6, 2022 · 2 min · jiezi

关于sql:SQL审核-如何使用-SQLE-进行开发阶段-SQL审核

作者:孙健 孙健,爱可生研发工程师,负责 SQLE 相干开发; 本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 一、 SQLE 介绍SQLE 是一款由爱可生开源社区发动,面向数据库开发与管理人员,实现了 SQL 的「开发」-「测试」-「上线」等全流程笼罩,资源与权限精细化治理,兼顾简洁与高效,易保护、易扩大的的开源我的项目,旨在为用户提供一套的安全可靠、自主可控的 SQL 品质管控计划。 二、 性能介绍SQLE 的开发阶段 SQL审核次要是通过 SQLE 的性能审核工作来实现的,该功能定位是应答全场景 SQL 品质管控解决方案,可能在利用开发、测试、上线、生产等不同阶段对 SQL 进行品质管控。将 SQL 采集与SQL审核联合对数据库进行长期审核,目前反对Mybatis 扫描,慢日志,库表元数据,TopSQL ,应用程序 SQL 抓取(java利用)的场景审核。利用开发阶段能够通过审核工作的 Mybatis 扫描类型的工作对利用代码做实时审核,Mybatis 扫描的审核工作须要通过 SQLE 提供的 Scanner 工具进行SQL采集并推送到 SQLE 进行SQL审核, 以下是 SQLE 通过 Scanner 采集 SQL 的流程图: 目前开发阶段根本都是应用 CI/CD 平台进行继续集成,例如 Jenkins ,GoCD ,git平台的 CI/CD 等,该阶段次要用来进行代码的查看,单测,打包。益处是标准化开发流程,缩小简单的工作量。因而在开发阶段也能够将SQL审核作为一个查看模块集成进CI流程。将 SQL审核事宜前置到开发阶段可能缩小前期SQL审核的压力。目前应用 SQLE 的审核工作可能做到: SQLE 提供 Scanner 模式能够集成简直所有CI/CD,配置简略,能够轻易集成进现有的开发流程;SQL审核后果即时反馈,对于未通过的SQL审核,开发能够即时优化;除了CI流程之外,也能够在 SQLE 界面进行 SQL分类统计和审核报告查看。三、 成果演示1. 创立审核工作 2. 在 jenkins 对应的工作上加一个构建流程SQLE 的 Scanner 与CI/CD的集成形式是通过增加bash类型的工作,个别CI/CD都反对该形式。SQLE Scanner 实质上是一个二进制命令行工具,该工具集成在 SQLE 内,能够在 SQLE 平台装置目录的 bin 下找到,具体的应用形式和命令行参数解释参考:https://actiontech.github.io/... 。 ...

April 6, 2022 · 1 min · jiezi

关于sql:T3-出行-Apache-Kyuubi-Flink-SQL-Engine-设计和相关实践-网易数帆-网易数帆

在日前的 Apache SeaTunnel & Kyuubi 联结 Meetup 上,T3出行大数据平台负责人、 Apache Kyuubi committer 杨华和T3出行高级大数据工程师李心恺独特分享了 Apache Kyuubi(Incubating) 在T3出行的最新实际与利用,包含基于 Kyuubi 设计的 Flink SQL Engine,Kyuubi 与 Apache Linkis 的集成,以及在T3出行的落地实际。 JDBC 之于 Flink 的现状首先咱们来聊一下 Apache Flink 社区 JDBC 的现状,Flink 在最后是一个流式计算(data flow)的模型,起初将批处理也引入了 data flow 上来,造成了“流批一体”的理念。 Flink 的批处理逐渐在倒退,但相比于一些成熟的离线计算引擎,比方 Hive、Spark SQL 而言,还不是很成熟,体现之一就是对 JDBC 标准的反对比拟欠缺。当然 Flink 社区为此也做出了一些致力,这里给大家分享两来自 Flink 的德国的母公司 Ververica 所开源的两个我的项目,一个叫做 Flink SQL Gateway,一个叫做 Flink JDBC Driver。 这两个我的项目联合起来是可能让 Flink 反对 JDBC 的,然而这两个我的项目曾经有一年多的工夫不太沉闷了,最初的一个奉献还停留在 2020 年。依据 Ververica 的现状预计,这两个我的项目再次沉闷的可能性并不大。 Flink SQL Gateway 和 Flink JDBC Driver 的设计和实现,这是我基于源码画出的,大抵的就是这两个组件联合起来,跟 Flink 交互提供对 JDBC 的反对。咱们能够分成三层来看,最底下的 JDBC Driver 外部是通过 RESTful API 跟 Flink SQL Gateway 的过程所提供的服务去交互,走的是一个 HTTP 的协定。Flink SQL Gateway 能够看作是一个围绕 flink-client 包装进去的服务,在外部引入了 Session 的概念,并且提供了 SessionManager,能够认为它对资源做了一些 share 或者 cache 的能力,主入口是 SQLGatewayEndpoint,外部也提供了很多 Operation 的实现。 ...

March 31, 2022 · 4 min · jiezi

关于sql:万字详解搜狐智能媒体基于-Zipkin-和-StarRocks-的微服务链路追踪实践

作者:翟东波、叶书俊在微服务体系架构下,搜狐智能媒体应用 Zipkin 进行服务链路追踪(Tracing)的埋点采集,将采集的 Trace 信息存储到 StarRocks 中。通过 StarRocks 弱小的 SQL 计算能力,对 Tracing 信息进行多维度的统计、剖析等操作,晋升了微服务监控能力,从简略统计的 Monitoring 回升到更多维度摸索剖析的 Observability。 全文次要分为三个局部:第一节次要介绍微服务下的罕用监控形式,其中链路追踪技术,能够串联整个服务调用链路,取得整体服务的要害信息,对微服务的监控有十分重要的意义。第二节次要介绍搜狐智能媒体是如何构建链路追踪剖析体系的,次要包含 Zipkin 的数据采集,StarRocks 的数据存储,以及依据利用场景对 StarRocks 进行剖析计算等三个局部。第三节次要介绍搜狐智能媒体通过引入 Zipkin 和 StarRocks 进行链路追踪剖析获得的一些实际成果。 01 微服务架构中的链路追踪近年来,企业 IT 利用架构逐渐向微服务、云原生等分布式应用架构演进,在搜狐智能媒体外部,应用服务依照微服务、Docker、Kubernetes、Spring Cloud 等架构思维和技术计划进行研发运维,晋升部门整体工程效率。 微服务架构晋升工程效率的同时,也带来了一些新的问题。微服务是一个分布式架构,它按业务划分服务单元,用户的每次申请不再是由某一个服务独立实现了,而是变成了多个服务一起配合实现。这些服务可能是由不同的团队、应用不同的编程语言实现,可能布在了不同的服务器、甚至不同的数据中心。如果用户申请呈现了谬误和异样,微服务分布式调用的个性决定了这些故障难以定位,绝对于传统的单体架构,微服务监控面临着新的难题。 Logging、Metrics、Tracing微服务监控能够蕴含很多形式,依照监测的数据类型次要划分为 Logging、Metrics 和Tracing 三大畛域: Logging用户被动记录的离散事件,记录的信息个别是非结构化的文本内容,在用户进行问题分析判断时能够提供更为详尽的线索。 具备聚合属性的采集数据,旨在为用户展现某个指标在某个时段的运行状态,用于查看一些指标和趋势。 Tracing记录一次申请调用的生命周期全过程,其中包含服务调用和解决时长等信息,含有申请上下文环境,由一个全局惟一的 Trace ID 来进行标识和串联整个调用链路,非常适合微服务架构的监控场景。 图 1 三者的关系如上图所示,这三者之间也是有重叠的,比方 Logging 能够聚合相干字段生成 Metrics 信息,关联相干字段生成 Tracing 信息;Tracing 能够聚合查问次数生成 Metrics 信息,能够记录业务日志生成 Logging 信息。个别状况下要在 Metrics 和 Logging 中减少字段串联微服务申请调用生命周期比拟艰难,通过 Tracing 获取 Metrics 和 Logging 则绝对容易很多。 另外,这三者对存储资源有着不同的需要,Metrics 是人造的压缩数据,最节俭资源;Logging 偏向于有限减少的,甚至会超出预期的容量;Tracing 的存储容量,个别介于 Metrics 和 Logging 两者之间,另外还可通过采样率进一步管制容量需要。 ...

March 28, 2022 · 11 min · jiezi

关于sql:华米科技-x-StarRocks让智能穿戴数据焕发新活力

作者徐昱 | 华米科技/ Zepp Health华米科技是一家基于云的衰弱服务提供商,领有寰球当先的智能可穿戴技术。在华米科技,每天都会有海量的埋点数据,以往基于 HBase 建设的埋点计算剖析我的项目往往效率上会绝对较低,查问形式不够灵便。 在埋点剖析中,用户往往是基于单维度或者多维度组合去查看某个指标,这里的维度能够是工夫、事件名称、城市或者设施属性等,指标能够是用户量、某个埋点的次数等。在此海量埋点数据背景下,如何比拟灵便、高效地实现维度 + 指标的计算,满足用户疾速查问剖析的需要,是一个值得摸索的问题。基于高效的 OLAP 引擎建设埋点剖析平台就成为了业务倒退中的重要一环。 原有计划及其痛点在之前的架构中,华米科技的埋点数据统计相干信息,须要依据统计的指标,优先将须要计算的指标(例如 PV、UV)通过 Spark/Hive 进行预计算操作,而后写入到 HBase 中,对上游相干用户提供点查的能力。 对于该计划,以下三点是较为不便的: 在 HBase 中,数据以 KV 模式存储,只能提供点查能力,不具备简单的统计分析能力;无奈应用 Bitmap 相干技术,须要将须要的指标当时计算出来,形式不够灵便,不能做汇合操作;流程链路较长,保护复杂度高,不具备模型形象能力,业务降级有所不便。引入 StarRocks针对数据存储层的问题与挑战,咱们着力于寻找一款高性能、简略易保护的数据库产品来替换已有的 Spark + HBase 架构,同时也心愿在业务层上能冲破 Hbase 点查的限度,通过实时多表关联的形式拓展业务层的需要。 目前市面上的 OLAP 数据库产品百花齐放,诸如 Impala、Druid、ClickHouse 及 StarRocks。在通过一系列的比照之后,StarRocks 高效的读写性能在泛滥产品中怀才不遇。同时,高度沉闷的社区生态给开发者与用户带来了良好的开发与应用体验,所以咱们抉择了 StarRocks 来作为 华米的 OLAP 引擎,替换原有的 HBase 成为存储层的新抉择。 从下面的比照能够看出,StarRocks 是一款极速全场景 MPP 企业级数据库产品,具备程度在线扩缩容、金融级高可用,兼容 MySQL 协定和 MySQL 生态,提供全面向量化引擎与多种数据源联邦查问等重要个性,在全场景 OLAP 业务上提供对立的解决方案,实用于对性能,实时性,并发能力和灵活性有较高要求的各类利用场景。 计划革新架构设计以后埋点数据经由网关转入 Kafka,采纳 Hudi on Flink 的模式进行数据荡涤、过滤、转换,基于流式数据湖构建 OLAP 的预处理层。依据数据个性和写入的性能要求及老本的衡量,别离基于 Hudi 的 Upsert 和 Append 模式构建 DWD 层(借助 Hudi 的去重、追加能力),定时离线解决数据转入 DWS,思考数仓的整体架构以及老本优化,将 DWS 数据定时离线导入到 StarRocks 中。最初经由 对立的查问剖析平台查问 StarRocks 数据。 ...

March 25, 2022 · 1 min · jiezi

关于sql:征文丨TiDB-社区专栏第一届征文大赛快来一次性集齐所有周边吧

TiDB 社区专栏第一届征文大赛来袭!只有你对 TiDB 产品感兴趣、有钻研的 TiDBer 都能够来加入,在这里给你筹备了十分多的主题供你抉择,也能够说出你和 TiDB 的故事。 TiDB 社区专栏是什么TiDB 社区专栏http://tidb.io/blog是社区技术文章的汇合地,是 TiDB 用户/爱好者【交流思想】和【剖析问题】的博客平台。 Part 1. 参赛福利丰富的较量奖品每篇文章可取得 100-600 积分 & 经验值打造集体影响力:登上 PingCAP 公众号头条,深入集体影响力TiDB 社区对技术文章写作的领导领有更多和布道师交换的平台与机会优良内容贡献者更有机会来 TiDB 社区参加 Meetup 现场分享优质内容可取得“TiDB 社区”媒体矩阵全渠道推广 Part 2. 大赛要求流动工夫:2022.3.14 - 2022.05.31 1、文章要求·内容:首发、原创、800字以上文字,内容有深度,内容品质(遇到什么问题,怎么解决?对读者有什么帮忙?) ·构造:内容构造残缺、逻辑清晰、行文流畅· 排版:图文并茂 · 加分项:有借鉴性、实用性、创新性 集体备忘、记录、笔记类不合乎参赛要求。 2、征文主题· 故障案例 故障诊断&故障修复 · 数据库迁徙实战 TiDB 上下游同步及海量数据的全量增量迁徙案例 其余数据库迁徙到 TiDB 最佳实际 · 性能调优 装置前(硬件 or 零碎层面)调优T iDB 参数调优SQL 优化 TiKV 冷热数据存储计划调研和验证 TiDB 执行打算解析和sql优化案例 其余性能调优 · 灾备和异样复原 TiCDC 备份复原最佳实际 Region少数正本故障复原 BR 备份复原 ...

March 18, 2022 · 2 min · jiezi

关于sql:如何打造极速数据湖分析引擎

“ 作者:阿里云EMR开源大数据OLAP团队,StarRocks 社区数据湖剖析团队”前言数字产业化和产业数字化成为经济驱动的重要能源,企业的数据分析场景越来越频繁,对数据分析的要求也越来越高。新的数据分析场景催生了新的需要,次要包含三个方面: 用户心愿应用统计数据的形式和数据来自的报价,并实时存储任何的数据(例如,在线应用程序的经营数据)和非数据(例如,挪动应用程序、物联网设施关系社交)媒体的经营数据库和数据)用户心愿本人的数据资产受到紧密的爱护用户心愿数据灵便剖析的更快、更、更实时数据湖的杰出满足满足了两个需要,它容许湖用户导入任何数量的数据。从源头收集数据,并能够从用户中实时呈现的多个数据模式存储到其中。具备极高数据能力的存储能力,一般消费者能够通过任何规模的存储性能来爱护用户的价值,并升高其智能辨认、数据分类、隐衷、资源的价值。管制、数据加密加密传输、加密存储、数据危险辨认以及合规审计等措施,帮忙用户建设平安预警机制,加强整体平安能力,让数据可用得和平安合规。 为进一步满足用户对数据湖剖析的要求,咱们须要装备实用于数据湖剖析的引擎,在更短的工夫内更多地利用更多数据,于用户更能解决数据和剖析不同的协同形式进一步的数据,确定更好的决策,做出更好的决策。本篇文章将向读者具体揭晓这样安顿数据湖剖析引擎的关键技术,并通过 StarRocks 来帮忙用户了解零碎的架构。 之后会发表文章,来更具体地极速数据湖剖析引擎的两篇文章的介绍和咱们持续应用案例: 代码走读篇:通过走读 StarRocks 这个开源剖析型数据库内核的要害数据结构和算法,帮忙进一步理解极速数据湖剖析引擎的原理和具体实现。案例钻研篇:灵便的大型企业应用 StarRocks 数据湖上实时的帮忙如何帮忙洞察数据的价值,从而更好地在业务中进行决策,进一步深刻实践是在理论场景中介绍落地的。什么是数据湖什么是数据湖,依据维基百科的定义,“数据湖是以天然/原始格局存储的数据的零碎或存储库,通常是对象 blob 或文件”。艰深来说能够将数据湖了解为在便宜的对象存储中或者是一张表格的表格,显示这些包裹类型中的某个对象,或者说是“典型的零碎关系表”等。 理解完数据湖的定义之后,咱们而然地想晓得数据湖天然运行咱们为什么要提供什么独特的数据湖的能力,咱们要应用什么?例如在数据湖这个概念呈现之前,曾经有很多或组织大量应用 HDFS 或者 S3 来提供各企业日常生产的各种类型的数据,用户可能会心愿将这些数据(一个制作 APP 的公司可能会心愿将其点击事件无这些巨细的数据可能在暂存现场的存储,的价值零碎将它们,而过后的一天数据,因而可能再寻找一个潜在的后果。然而,HDFS的明天3个早晨提供工夫的全面覆盖率。为阻止数据显示应用这些数据的工夫,数据将一解析了解数据的含意,聪慧的工程师将再定义这些数据,而后再应用这些数据形容。额定的这些数据可能形容它们的具体数据是这样的数据,起因是通过解析数据的元数据就能够答复。 例如用户提供相似数据库的 ACID 为其余数据过程的数据,帮忙用户在继续中要求可能及时获取数据的数据品质。能力,读取过程中的数据能力,正在为用户提供更高的数据导入数据管理,数据湖曾经从外表上变成了经验丰富,当初更多的数据当初呈现了各种谬误。了。用一句就是精确的数据形容数据湖,一个存储老本更便宜的“数据库”。然而,一个残缺的数据湖提供了数据存储和组织能力的数据库,但还须要提供数据存储能力。剖析如下数据能力如何。的外部结构和实现: 怎么在数据湖上进行极速剖析古代数据湖剖析引擎的架构怎么在数据湖上进行极速剖析这一节开始,让咱们开始从数据库中返回,一个用于数据湖的剖析引擎和一个数据库认为的剖析引擎在架构上别无二,通常咱们会分为以下几个局部: Parser:将荟萃解析解析成一个用户输出的语法树的查问语句剖析语句的语法和分析器是否正确,合乎查问定义优化器为查问性能、查问性能查问打算执行引擎:执行物理查问打算,收集并返回查问后果相对而言,优化器和执行引擎是其性能内核模块,咱们通过一个不同的湖面个性剖析手,别离解解这两个模块的不同个性,并别离合成这两个技术的比对,帮忙读者了解一个古代的数据湖剖析引擎的始末。 RBO 与 CBO优化器的工作就是执行的一个,显示查问最低(或者绝对较低)的执行工作。量,优化查问越重要。 RBO 的外围是基于规定剖析引擎的罕用优化策略。在RBO中查问下你的应用规定,只有依照规定去写日程,数据表中的内容如何,生成的执行都如何但在理论的环境中,数据的量级会重大影响查问的性能,而 RBO 是无奈通过这些信息来获取更优的业务执行打算。 RBO 的统计信息和统计信息最优化(C)的优化(C)的优化而生。举个例子,假如咱们当初有三张表 A,B 和 C,在进行 A 退出 B 退出 C 的查问时,如果没有的统计信息咱们是无奈判断不同退出的执行程序上的差别。咱们缩小这张表的统计,然而A表和B发现的数据都是1M行,C表的数据收集到的数据量是先通过10行,而后执行B退出C的能够大两头后果的数据量,这在没有统计信息的状况下相对能够判断。 刷过题的小伙伴都晓得,状态空间的减少,执行打算的状态空间会很大。的搜索算法的不同空间状态重要。CBO的应用动静布局算法得出最优解,并且缩小反复空间的典型水平。当达到肯定水平之后,咱们抉择贪婪或者其余一些启发式的算法来计算子节点最佳。搜寻工夫上搜寻后果和后果算法是在搜寻品质上做衡量的办法。 (常见CBO实现架构) 面向记录与面向块执行执行关系(代数的输出是一个操作员的打算首尾执行)认为执行关系,前操作员的输入是下操作员的传统操作员的输入。和输出是一行一行的数据。 举一个简略的例子,假如咱们有上面的表格和查问: CREATE TABLE t (n int, m int, o int, p int); SELECT o FROM t WHERE m < n + 1;起源:GitHub - jordanlewis/exectoy ...

March 9, 2022 · 2 min · jiezi

关于sql:SQL审核-如何用-SQLE-自动审核-Java-应用

作者:孙健、张强 孙健,爱可生研发工程师,负责 SQLE 相干开发;张强:爱可生研发核心成员,后端研发工程师,目前负责 DMP 产品 Redis 相干业务开发。 本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 一. SQLE 介绍SQLE 是一款由爱可生开源社区发动,面向数据库开发与管理人员,实现了 SQL 的「开发」-「测试」-「上线」等全流程笼罩,资源与权限精细化治理,兼顾简洁与高效,易保护、易扩大的的开源我的项目,旨在为用户提供一套的安全可靠、自主可控的 SQL 品质管控计划。 在二月份公布的 1.2202.0 版本中: 革新了用户零碎,新增用户组和操作权限;减少对工单审核后果进行评分的性能;减少审核工作,反对 MySQL 的库表构造、Oracle 的 TopSQL以及 Java 利用的 SQL 抓取和审核;减少了 Db2 审核插件,反对 Db2 审核工单并上线;新增了 37 条 MySQL 审核规定,如查看 DDL 是否创立了冗余的索引;其余体验优化和 Bug 修复。其余细节信息,能够拜访:https://github.com/actiontech... 。 二.Java 利用审核介绍思考到很多用户在理论生产中曾经部署了大量的、以 Java 为根底的利用和服务,并且某些曾经波及到了极其重要、不可中断的外围业务。从 1.2202.0 版本开始,SQLE 开始反对 Java 利用的 SQL 审核。并且在实现外围性能的根底上,反对 Java 利用零老本接入 。 SQLE 的 Java 审核个性如下: 反对无侵入式的业务集成,用户能够间接以环境变量的形式运行来启动 Java 利用,间接接入 SQLE 而无需批改 Java 业务代码,缩小了用户接入老本;反对利用 SQL 的主动采集和统计,用户能够在 SQLE 上通过语句池页面统览利用内的 SQL 的分类与统计,迅速把握利用内 SQL 的状况;反对手动或主动审核 SQL ,用户能够在审核报告中通晓利用的 SQL 是否合乎预设的审核规定,无论是开发人员还是 DBA 都能实时理解正在运行的业务 SQL 执行情况。三.成果展现当时部署好环境、须要接入的 Java 利用以及对应的数据库,并增加为数据源。为了演示,此处 Java 我的项目为 https://gitee.com/surveyking/...;创立 Java 利用的审核工作; ...

March 9, 2022 · 1 min · jiezi

关于sql:金融数据查询增速三倍服务器成本减半海尔云链的-OLAP-引擎选型之路

重庆海尔云链科技有限公司成立于 2006 年,作为行业当先的科技场景生态平台,以科技为第一生产力,以生产金融场景为着力点,造成了具备对立领取、数据交换、动静 AI 定价、智能作业及云服务等外围能力。 海尔云链科技打造了成熟的针对 B 端、C 端的综合服务体系,造成了对差异化场景和资源的融入与链接能力,以科技赋能持牌金融机构,助力传统机构的数字化转型。云链科技的金融科技、智能风控及智慧经营等三大解决方案,已在医美、通信、车、普惠、教育等多个金融场景中利用。 “ 作者:王沐,海尔云链科技有限公司数字金融部大数据架构资深开发工程师,负责海尔云链大数据架构设计和开发,以及数字化利用的开发和建设 ”业务背景及其历史架构痛点金融信贷业务在传统的金融信贷业务中,业务零碎次要划分为贷前、贷中、贷后三个阶段(客户信息录入、放款、贷款清收),而从数据角度登程次要分为贷前和贷后两个阶段(依照是否放款进行辨别)。 贷前阶段次要是进行客户个人信息相干的数据处理,绝对贷后阶段数据较少,个别较多联合业务零碎、在传统的关系型数据库中解决。贷后的数据量会收缩为贷前的几十倍(例如房贷、车贷,一个客户胜利申请会随之带来几十上百条的账单信息),加上代扣等操作带来的数据量再次收缩,导致传统的关系型数据库在解决贷后数据时累赘极大,每天都须要进行局部数据归档迁徙。 然而,贷后的数据极为重要,客户、单干助贷方、渠道、商户、业务人员、财务部门都须要不同的贷后数据,而且大多都须要实时数据。 查问特点上,这些业务方会定时、不定时来获取各个维度的数据,包含历史数据。这导致基于传统关系型数据库的外围业务零碎累赘极大。 外围诉求基于以上现实情况,咱们开始摸索基于大数据处理,打造一个能对内、对外提供实时、离线计算和查问的贷后处理零碎。这个零碎须要能解决以下各个问题: 提供实时数据以及批量数据写入、更新的能力;能提供大数据量下的数据疾速查问能力;能提供 SQL 或者类 SQL 的语言,便于报表零碎或者业务人员操作;可能有较好的数据容灾正本机制;可能提供较好的并发反对能力。支流解决计划行业内支流解决计划分为如下几种,个别采纳其中一种或者多种组合应用: 数据量绝对较小,应用关系型数据库的只读库或者备库,为贷后数据业务提供撑持。该计划应用没有什么问题,也比拟成熟;毛病很显著,关系型数据库解决数据量级无限。数据量大,应用 ETL 工具将数据写入大数据系统,采纳 Hbase+Phoenix 的计划,基于 Phoenix 对外提供数据撑持。该计划可能解决大量数据,也能通过 ETL 将离线数据对立跑批写入 Hbase;毛病是只能做大宽表,而且数据处理流程绝对简单。数据量大,仍旧应用 ETL 工具将数据写入 ClickHouse。该计划能解决大量数据,也能够做离线数据的对立解决;毛病也是大多做大宽表,而且数据实时性更新能力不强,并发反对也不强。数据量大,仍旧应用 ETL 工具将数据写入 Hive,基于 Impala、Presto 等形式对外提供数据,或者应用 Druid 等。这几个形式的毛病都是无奈实现实时更新且并发能力较弱。历史架构基于上述情况,海尔云链科技第一代金融贷后数据处理系统诞生。受限于历史技术条件、业务数据规模和老本考量,第一代金融贷后数据架构的链路较为简单、数据存在肯定冗余,如下图所示。 具体来说,数据从各个外围业务数据库通过 ETL 平台将实时、离线数据会集到 Hadoop 集群中。数据依据实时性以及数据量被别离写入到 Hbase 与 Hive,联合 Phoenix、Alluxio+Presto 对外对立提供数据。用户通过前端零碎调用配置等多种形式获取数据。 在实时数据方面,因为金融数据要求实时可变动,且针对多个部门渠道有不同的数据要求、数据获取的条件灵便多变,而业务部门冀望查问都能疾速响应,由此建设了大量二级索引。在金融业务中,每天晚上外围业务零碎数据会进行大量账务计算,每月还有一个定期数据入账日。面临这种短时间、超大批量数据进入的工作,大数据集群的 Hbase 会呈现微小的写入提早,同时集群 CPU 拉升、性能大幅降落。 在离线数据方面,因为数据量和业务复杂度的回升,以及客户对 BI 零碎的冀望越来越高,数据平台对离线剖析数据进行了屡次降级。在 Hive+Presto 的根底上再附加 Alluxio 作缓存,间接导致系统硬件老本翻倍,并且加大了运维老本。 新 OLAP 引擎选型进行 OLAP 引擎选型前,首先须要理解大数据金融行业的数据个性: ...

March 8, 2022 · 1 min · jiezi

关于sql:黄东旭-关于基础软件产品价值的思考

好久没写货色了, 正好趁着春节的节后综合症发生写写文章热身一下,记得前几年偶然会写一些对于 TiDB 产品性能解读的文章,TiDB 5.0 发了那么长时间了,也应该写一写了。我其实在多个场合里表白过我对于 5.0 的器重,这个版本可能是对于 TiDB 来说的 MySQL 5.x,相熟 MySQL 生态的敌人必定晓得我在说什么,MySQL 5.x,尤其是 5.5~5.7 这几个重要的版本基本上为 MySQL 的疾速扩张奠定了松软的根底,也造就了一大批 MySQL 的用户和人才。我认为 TiDB 5.x 尤其在 5.2 之后,也看到了进入快车道的趋势,开始展现出生态统治力。对我而言,TiDB 是一个绝佳的样本,在此之前,中国外乡很少有这样从零到一做进去的开源根底软件产品,少数工程师和产品经理都是这些软件的「使用者」,更多的是构建业务零碎,而 TiDB 让咱们第一次得以「设计者」的视角参加其中:每一个性能个性的设置背地的思考,对根底软件产品的价值出现,体验还是很不一样的,借着这篇文章写点感触,另外的这个文章是春节前我在 PingCAP 外部给 Presales 和 PM 培训上的分享整顿而成,不肯定正确,仅供参考。 咱们做的事件,对于用户意味着什么? 要讲好根底软件的产品价值,首先要克服的第一个关卡:学会换位思考。其实 TiDB 每个版本都带着数十个的个性和修复,然而少数时候咱们的 Release note 只是忠诚的反映了「咱们做了什么」: TiDB 4.0 GA 的 Release Note 截图 各位这里请不要了解错我的意思,这种类型的记录是很有必要存在的,然而仅有这个是远远不够的。例如在 TiDB 5.0~5.5 的版本外面,咱们引入了 n 多的新个性:聚簇索引,异步提交事务模型,优化了 SQL 优化器,反对了 CTE,引入了锁视图和继续性能诊断工具,改良了热点调度器,升高了获取 TSO 的提早,引入 Placement Rules SQL…这些名字在 TiDB 的开发者看来是没问题的,然而请留神,更重要的问题是:这些对于用户(客户)意味着什么? 要答复这个问题的思路有两种,我别离讲讲: 通过一个假想的指标场景,而后通过产品去满足这个场景来展示价值。解决现有的计划(包含本人的老版本)那些最宜人的问题来展示价值。对于第一种思路,通常实用于比拟新的个性,尤其是一些过来素来没有的陈腐货色。用一个比拟好了解的例子:如果大家都在开马车的时候,你创造了一个汽车,这时候如果你以汽车解决了马儿要吃草的问题作为价值点显然是比拟荒诞的,更正当的是描述高速通勤的场景带来的便利性作为卖点。这种思路有两个关键点: 首先这个场景最后是产品经理假想的(当然必定也会做过很多访谈和原野考察),所以如何确保这个场景是「高价值」且「具备普适性」的?对于一个胜利的根底软件,这点尤其重要,通常在我的项目晚期能抓到一个这样的点,就相当于胜利了一半,当然这个对产品经理的要求是十分高的,通常须要有很强的 vision 和推动力,这就是为什么很多产品型公司的 CEO 都是晚期的大号产品经理,因为在我的项目的晚期 CEO 须要同时领有这两样。当然更强的犹如乔布斯这种事实扭曲场,无中生有造出 iPod / iPhone 扭转了整个世界,这是何等的气魄和远见(我置信 Jobs 在构思 iPhone 的时候应该能设想到明天的世界)。这个没啥方法,根本就是靠人。你产品的价值是否在这个场景里有最间接的体现。最好的间接通常是直指人心的,是人间接能领会到的「感触」。对于开发者产品来说,我通常会抉择的锚点是「用户体验」,因为好的体验是不言自明的,汽车和马车比照在通勤舒适度和效率的时候,是完胜的;就像 TiDB 和 MySQL 分库分表的计划比弹性扩大能力时候也是一样,体验上也是完胜的。对于这一点倒是有很多办法去参考,有趣味的能够参考我那篇对于用户体验的文章。第一种思路实质上来说是 Storytelling,这种形式的益处在于: ...

March 7, 2022 · 3 min · jiezi

关于sql:慢sql治理经典案例分享

简介:菜鸟供应链金融慢sql治理曾经有一段时间,本人负责的利用继续很长时间没有慢sql告警,现阶段在推动组内其余成员治理利用慢sql。这里把治理过程中的一些实际拿进去分享下。 作者 | 如期起源 | 阿里技术公众号 菜鸟供应链金融慢sql治理曾经有一段时间,本人负责的利用继续很长时间没有慢sql告警,现阶段在推动组内其余成员治理利用慢sql。这里把治理过程中的一些实际拿进去分享下。 一 全表扫描1 案例SELECT count(*) AS tmp_count FROM ( SELECT * FROM `XXX_rules` WHERE 1 = 1 ORDER BY gmt_create DESC ) a2 溯源在分页查问治理的文章里曾经介绍过咱们零碎旧的分页查问逻辑,下面的查问sql显著就是分页查问获取总记录数,通过XXX_rules表的分页查问接口溯源,找到发动调用的页面是咱们小二后盾的一个操作商家准入的页面,页面关上后间接调用分页查问接口,除了分页参数,不传入其余任何查问参数,导致扫描全表。 3 剖析灵魂拷问:为什么要扫描全表?全表数据展现到页面,花里胡哨的数据有用吗? 调研:和常常应用这个页面的经营聊后理解到,关上页面查问出的全表数据对经营是没有用的,他们基本不看这些数据。经营的操作习惯是拿到商家id,在页面查问框中输出商家id,查到商家数据后进行操作。 4 解决方案由此优化计划就很清朗了:关上页面时不间接查问全量数据,等经营输出商家id后,将商家id作为参数进行查问。XXX_rules表中,商家id这一罕用查问条件设置为索引,再联合分页查问优化,全表扫描慢sql得以解决。 优化后的小二后盾页面如下: 关上页面时未查问任何数据,查问条件商家账户为必填项。 优化后的sql为: SELECT count(*) AS tmp_count FROM ( SELECT * FROM `xxx_rules` WHERE 1 = 1 AND `rule_value` = '2928597xxx' ) a执行EXPLAIN失去后果如下: 能够看到命中了索引,扫描行数为3,查问速度明显提高。 5 思考扫描全表治理简略来说就是退出查问条件,命中索引,去除全表扫描查问,尽管有些粗犷,但并不是没有情理。理论业务场景中,很少有要扫描全表获取全副数据的状况,限度调用上游必须传入查问条件,且该查问条件能命中索引,能很大水平上防止慢sql。 另外,再引申下,XXX_rules初始的用意是准入表,记录金融货主维度的准入状况,最多也就几千条数据,然而很多共事将这张表了解为规定表,写入很多业务相干规定,导致这个表收缩到一百多万条数据,表不clean了。这就波及到数据表的设计应用,明确表的应用标准,不乱写入数据,能给前期保护带来很大的便当。 二 索引凌乱1 示例 2 剖析除了工夫、操作人字段,XXX_rules表就rule_name、rule_value、status、product_code四个字段,表的索引对这四个字段做各种排列组合。存在如下问题: ...

March 3, 2022 · 1 min · jiezi