- 博客(75)
- 收藏
- 关注
原创 以StarRocks为例讲解MPP架构和列式存储
MPP 即大规模并行处理。你可以把它想象成一个分工极其明确、协作效率极高的“工厂流水线”。传统数据库(如 MySQL):像一个老师傅,所有工作(接单、切菜、炒菜、装盘)都自己一个人完成。虽然也能做,但订单一多就忙不过来,成为瓶颈。MPP 数据库:像一条现代化的流水线,有无数个工人(节点)同时工作。每个工人只负责处理一道工序,大家齐心协力,同时处理海量任务。它与传统的行式存储相对应。行式存储:像把一行的所有数据(用户ID、姓名、年龄、地址…)紧紧挨着存在一起。类似于“记事本”,一行一行地记录。适用场景。
2025-09-04 16:02:09
1240
原创 SQL执行过程及原理详解
SQL执行过程及优化摘要 SQL执行顺序与书写顺序存在显著差异:数据库先处理FROM和JOIN确定数据源,再进行WHERE过滤、GROUP BY分组,最后才是SELECT选择列和ORDER BY排序。理解这一机制能避免常见错误并优化性能。 核心执行步骤包括:解析器检查语法→分析器验证语义→优化器选择执行计划→执行器获取结果。使用EXPLAIN分析执行计划可识别性能瓶颈,重点关注type(访问类型)、rows(预估扫描行数)等关键指标。 优化技巧包括:尽早过滤数据、小表驱动大表、合理使用索引、避免不必要排序。
2025-09-01 18:04:16
780
原创 深入 MySQL SELECT 查询
本文深入探讨了MySQL中的复杂SELECT查询操作,包括多表连接(内连接、左连接、右连接)、子查询(WHERE/FROM/SELECT子句中的子查询)、聚合与分组(GROUP BY/HAVING/WITH ROLLUP)以及高级查询技巧(CTE和窗口函数)。文章通过示例数据展示了如何从多个关联表中检索数据,计算统计信息,并进行复杂的数据分析。特别介绍了公用表表达式(CTE)和窗口函数的使用,这些功能使复杂查询更易读且高效。最后通过一个综合示例演示了如何找出消费最高的用户及其订单详情。
2025-08-30 16:07:54
901
原创 CTE 的主要优势_以MySQL为例
摘要: CTE(公用表表达式)在SQL查询中具有显著优势:1)提升可读性,通过命名逻辑块替代嵌套子查询;2)避免代码重复,支持一次定义多次引用;3)支持递归查询,处理树形结构数据;4)替代临时视图,无需永久存储;5)简化复杂查询调试,支持分步构建;6)优化性能,尤其在多次引用场景;7)支持链式多CTE组合。适用于报表生成、数据清洗、层次查询等场景,需注意适度使用和性能平衡,MySQL 8.0+版本完整支持。
2025-08-30 16:05:19
297
原创 SQL优化_以MySQL为例
MySQL SQL优化是一个持续的过程,需要结合查询分析、索引优化、数据库设计调整和服务器配置优化。使用EXPLAIN分析查询执行计划创建合适的索引,避免索引失效重写低效的查询语句优化数据库 schema 设计调整服务器配置参数持续监控和优化性能测量→优化→验证。永远基于实际性能数据做优化决策,而不是假设。
2025-08-30 16:04:03
574
原创 MySQL窗口函数
MySQL窗口函数提供了强大的数据分析能力,允许你在不减少行数的情况下执行复杂计算。掌握窗口函数可以大大简化许多常见的分析查询,如排名、移动平均、累计求和等。通过合理使用PARTITION BY、ORDER BY和窗口框架,你可以创建高效且功能强大的数据分析查询。
2025-08-30 16:03:04
484
原创 Shell入门
整理了一个包含多种Shell语法元素的Shell脚本示例,并附有详细的注释。这个脚本展示了变量、条件判断、循环、函数、数组、字符串操作、文件操作等常见的Shell编程技巧,适合初学者学习和参考。
2025-02-26 09:49:02
226
原创 3NF讲解
1NF:每个单元格包含单一数据。2NF:消除部分依赖,确保每个非主属性完全依赖于主键。3NF:消除传递依赖,确保每个非主属性只依赖于主键,不通过其他非主属性。3NF的核心目的是减少数据冗余和避免数据不一致性,同时也能提升数据库的维护性。
2025-02-06 23:26:23
406
原创 SpringBoot+MyBatis+lombok进行数据库操作的小案例
记录一下个人整理的一个SpringBoot+MyBatis+lombok进行数据库增删改查的小案例,可以用于理解学习
2024-11-27 13:20:03
1013
原创 Flink简介及小案例
Flink 的操作主要包括集群的搭建与配置,以及通过 API 编写数据处理任务。安装和启动相对简单,而任务的实现可以根据需求组合不同的算子来实现复杂的处理逻辑。如果你有具体的任务需求或想了解某些细节,我可以为你提供更详细的帮助。
2024-10-15 10:21:46
729
原创 数据仓库建模和建表的联系与区别
建表是数据仓库开发的物理实现阶段,具体涉及将设计的模型转换为实际的数据库表结构。这一阶段的目标是创建存储数据的物理表结构。数据仓库建模是数据仓库设计的前期阶段,专注于从业务需求角度设计数据的逻辑结构,确保支持多维度分析和查询。而建表是数据仓库开发的后期阶段,将数据模型转换为实际的数据库表,以便存储和访问数据。两者密切相关,建模决定了如何组织数据,而建表则是实现这些设计并确保它们在实际环境中高效运行的步骤。
2024-10-12 14:03:27
921
原创 雪花模型(Snowflake Schema):详解与案例
雪花模型是一种通过规范化减少数据冗余的建模方法,适用于对存储空间和数据一致性有较高要求的场景。在雪花模型中,维度表被进一步拆分成多个子表,虽然减少了数据冗余,但也增加了查询的复杂度和性能成本。在本文的案例中,我们展示了如何将客户维度、产品维度等拆分为多个子表,最终构建出一个雪花模型的数据仓库。这种模型能够有效减少冗余,确保数据一致性,但查询时需要连接多个表,因此在设计和使用时需要权衡查询性能与数据规范化之间的关系。少了数据冗余,但也增加了查询的复杂度和性能成本。
2024-10-12 13:52:12
2385
原创 星型模型(Star Schema):详解与案例
星型模型是一种简单、易于理解且查询性能高的维度建模方法,广泛应用于各种业务分析场景。通过将业务数据划分为事实表和维度表,星型模型能够有效地支持复杂的分析需求,并提供快速的查询响应能力。*:分析生产线效率、供应链管理等。星型模型是一种简单、易于理解且查询性能高的维度建模方法,广泛应用于各种业务分析场景。通过将业务数据划分为事实表和维度表,星型模型能够有效地支持复杂的分析需求,并提供快速的查询响应能力。
2024-10-12 13:51:02
4191
原创 数据仓库中的维度建模:深入理解与案例分析
维度建模是数据仓库设计中最常用的一种方法,旨在简化数据访问、提高查询效率,特别适用于需要对数据进行多维分析的场景。本文将深入探讨维度建模的核心概念、设计步骤以及如何将其应用于实际案例中。
2024-10-12 13:15:49
1809
原创 数据仓库分层理论
数据仓库的分层理论是数据仓库建设和设计的基础之一,目的是将不同类型、不同处理阶段的数据分层存放和管理,以提高数据处理的效率和灵活性,同时增强数据的可维护性和可扩展性。在数据仓库中,分层帮助我们理清从原始数据到最终业务数据的整个处理流程。
2024-10-11 17:18:02
1294
原创 关系型数据库索引操作
在MySQL、SQL Server、Oracle中,建立、修改、删除索引的操作有很多相似之处,但由于每个数据库系统的语法和特性不同,具体操作有一些差异。以下是三种数据库中关于索引操作的分类总结。
2024-10-09 14:24:47
1174
原创 关系型数据库索引总结-作用,类型,适用场景,缺点
索引是关系型数据库中非常重要的性能优化工具,它通过加速数据检索、排序和连接等操作,显著提升查询性能。但在设计索引时需要权衡利弊,避免过度使用索引导致性能下降。
2024-10-09 14:21:16
571
原创 关系型数据库日期处理函数讲解
在 MySQL、Oracle 和 SQL Server 中,日期处理函数是很常用的功能,用于处理和操作日期时间数据。但三个数据库中的相关语句又有差别,因此整理了一下个人开发中常用的有关日期时间的函数或解决思路,仅供参考!
2024-10-08 16:19:02
1056
原创 JDBC连接池&JDBCTemplate
当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。概念:其实就是一个容器(集合),存放数据库连接的容器。:数据库连接池实现技术,由阿里巴巴提供的。一般我们不去实现它,有数据库厂商来实现。
2022-11-04 10:41:58
238
原创 1. Win 10 :在此处打开命令窗口
1.在此处打开CMD命令行窗口在当前目录下打开命令窗口步骤:- `alt+d`定位到资源管理器地址栏。 - 输入`cmd`后回车截图讲解①:②:③:2.在此处打开Windows Powershell在需要操作的文件夹下按住Shift+鼠标右键,选择:在此处打开Powershell窗口,即可;选择:在此处打开Powershell窗口,即可;...
2022-01-12 16:44:08
3262
原创 3.模块化
1.模块的基本使用,模块的基础使用步骤创建模块(按照以前的讲解方式创建模块,创建包,创建类,定义方法)为了体现模块的使用,创建两个模块:myOne和myTwo在模块的src目录下新建一个名为module-info.java的描述性文件,该文件专门定义模块名,访问权限,模块依赖等信息描述性文件中使用模块导出和模块依赖来进行配置并使用。模块中所有未导出的包都是模块私有的,他们是不能在模块之外被访问的在myOne这个模块下的描述性文件中配置模块导出模块导处格式:exports
2021-12-28 14:40:40
130
原创 2.Java-反射
1.反射概述Java反射机制:是指在运行时去获取一个类的变量和方法信息。然后通过获取到的信息来创建对象,调用方法的一种机制。由于这种动态性,可以极大的增加程序的灵活性,程序不用在编译期就完成确定,在运行期任然可以扩展。2.获取Class类的对象想通过反射去使用一个类,首先需要获取到该类的字节码文件对象,也就是类型为Class类型的对象三种获取Class类型的对象使用类的class()属性来获取该类对应的Class对象。举例:Student.class将会返回Student调用对象的getCl
2021-12-24 10:46:17
453
原创 1.类加载器
1. 类加载当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过类的加载,类的连接,类的初始化这三个步骤来对类进行初始化。如果不出意外,JVM将会连续完成这三个步骤,所有有时也把这三个步骤统称为类加载活类初始化。类的加载就是指将class文件读入内存,并为之创建一个java.lang.Class任何类被使用时,系统都会为之创建一个java.lang.Class对象类的连接验证阶段:用于检验被加载的类是否有正确的内部结构,并和其他类协调一致。准备阶段:负责为类的类变量分配
2021-12-22 09:27:28
127
原创 5.Stream流
1.Stream流1.体验Stream流需求:按照下面的要求完成集合的创建和遍历创建一个集合,存储多个字符串元素把集合中所有以“张”开头的元素存储到一个新的集合把“张”开头的集合中的长度为3的元素存储到一个新的集合遍历上一步得到的集合代码:package Study05;import java.util.ArrayList;/*需求:按照下面的要求完成集合的创建和遍历- 创建一个集合,存储多个字符串元素- 把集合中所有以“张”开头的元素存储到一个新的集合- 把“张”开头的
2021-12-21 14:45:37
445
原创 4.函数式接口
1. 函数式接口概述函数式接口:有且仅有一个抽象方法的接口Java中的函数式编程体现的就是Lambda表达式,所以函数式接口就是可以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利的进行推导。如何检测一个接口是不是函数式接口:@FunctionalInterface放在接口定义的上方:如果接口是函数式接口,编译通过;如果不是,编译失败注意:自己定义函数式接口时@FunctionalInterface是可选的,就算不写这个注解,只要保证满足函
2021-12-20 15:48:57
377
原创 3.方法引用
1.体验方法引用在Lambda中所指定的操作方案,已经有地方存在相同的方案时,可以通过方法引用来使用已经存在的方案。代码:接口package Study01;public interface Printable { void printString(String s);}测试类package Study01;/*需求- 定义一个接口(Printable):里面定义一个抽象方法:void printString(String s);- 定义一个测试类(Printab
2021-12-13 16:30:50
150
原创 2.接口新特性
1.接口组成更新概述接口的组成常量public static final抽象方法public abstract默认方法(Java 8)静态方法(Java 8)私有方法(Java 9)2.接口中的默认方法接口中默认方法的定义格式:格式:public default 返回值类型 方法名(参数列表){ }范例:public default void show3(){ }接口中默认方法的注意事项默认方法不是抽象方法,所以不强制重写。但是可以被
2021-12-09 14:26:45
411
原创 1.Lambda表达式
1.体验Lambda表达式函数式编程思想概述函数式思想则尽量忽略面向对象的复杂语法:“强调做什么,而不是以什么形式去做”Lambda表达式就是函数式思想的体现。体验Lambda表达式需求:启动一个线程,在控制台输出一句话:多线程程序启动了方式一:定义一个类MyRunnable实现Runnable接口,重写run()方法创建MyRunnable类的对象创建Thread类的对象,把MyRunnable的对象作为构造参数传递启动线程方式二:匿名内部类的方式改进方式三:
2021-12-08 15:37:05
305
原创 2-4网络编程-TCP通信练习
1.练习1:客户端:发送数据,接收服务器反馈服务器:接收数据,给出反馈代码:客户端package Study12;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;/*客户端:发送数据,接收服务器反馈*/public class ClientDemo { public static void main(St
2021-12-07 16:15:09
1455
原创 2-3网络编程-TCP通信
1.TCP客户端发送数据TCP通信原理TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象,从而在通信的两端形成网络虚拟链路,一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信。Java对基于TCP协议的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信。Java为客户端提供了Socket类,为服务器端提供了ServerSocket类TCP发送数据发送数据的步骤创建客户端的Socket对象(
2021-12-07 16:14:28
163
原创 2-2网络编程-UDP通信
1.UDP发送数据UDP通信原理UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接收对象;因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念。Java提供了DatagramSocket类作为基于UDP协议的SocketUDP发送数据发送数据的步骤创建发送端的Socket对象(DatagramSocket)DatagramSocket()创建数据,并把数据打包DatagramPacket(byt
2021-12-07 09:19:55
332
原创 2-1网络编程概述
1.网络编程概述计算机网络:是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。网络编程在网络通信协议下,实现网络互连的不同计算机上运行的程序间可以进行数据交换。2.网络编程三要素IP地址要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定要接收数据的计算机和识别发送的计算机,而IP地址就是这个标识号。也就是设备的标识。端口
2021-12-07 09:18:34
610
原创 1.多线程
1.线程和进程进程进程:是正在运行的程序是系统进行资源分配和调用的独立单位每一个进程都有它自己的内存空间和系统资源线程线程:是进程中的单个顺序控制流,是一条执行路径单线程:一个进程如果只有一条执行路径,则称为单线程程序多线程:一个进程如果有多条执行路径,则称为多线程程序2.多线程的实现方式方式1:继承Thread类定义一个类MyThread继承Thread类在MyThread类中重写run()方法创建MyThread类的对象启动线程两个小问题为
2021-12-03 15:55:42
146
原创 8.Properties类
1.Properties1.Propertiesg概述:是一个Map体系的集合类Properties可以保存到流中或从流中加载2.练习:Properties作为Map集合使用package Study09;import java.util.Properties;import java.util.Set;/*Properties作为Map集合使用*/public class PropertiesDemo { public static void main(String[] a
2021-12-01 11:04:03
3306
原创 7.对象序列化流
1.概述对象序列化:就是将对象保存到磁盘中,或者在网络中传输对象这种机制就是使用一个字节序列表示一个对象,该字节序列包含:对象的类型,对象的数据和对象中存储的属性等信息字节序列写到文件之后,相当于文件中持久保存了一个对象的信息反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化。要实现序列化和反序列化就要使用对象序列化流和对象反序列化流:对象序列化流:ObjectOutputStream对象反序列化流:ObjectInputStream2. 对象序列化流对象序列化流:Ob
2021-11-30 15:27:06
388
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人