
数据库
文章平均质量分 74
chuixue24
这个作者很懒,什么都没留下…
展开
-
mysql,Postgresql,oracle区别
mysql:索引组织表,读快写慢,适用于读多写少Postgresql:堆组织表,读慢写快,适用于读少写多oracle:索引组织表和堆组织表都支持。原创 2024-04-18 15:33:10 · 710 阅读 · 0 评论 -
基于PostgreSQL的时序数据库TimescaleDB的基本用法和概念
TimescaleDB是一个在PostgreSQL之上构建的时序数据库,它利用了关系型数据库的成熟性和灵活性,并针对时序数据进行了优化。TimescaleDB通过使用分区表(hypertable)和连续聚集表(continuous aggregate)来处理时序数据,使得数据的存储和查询更加高效。转载 2024-04-18 14:14:17 · 5991 阅读 · 0 评论 -
InfluxDB 的存储机制解析
尽管InfluxDB自发布以来历时三年多,其存储引擎的技术架构已经做过几次重大的改动, 以下将简要介绍一下InfluxDB的存储引擎演进的过程。以上就是对InfluxDB的存储机制的粗浅解析,由于目前所见的只有单机版的InfluxDB,所以尚不知道集群版的InfluxDB在存储方面有哪些不同。但是,即便是这单机版的存储机制,也对我们设计时序数据库有着重要的参考意义。转载 2024-04-18 12:00:03 · 714 阅读 · 0 评论 -
一文读懂OLAP
OLAP(On-line Analytical Processing,联机分析处理)是一种用于分析和查询大规模数据集的计算机处理技术。OLAP技术主要用于多维数据分析和数据挖掘,通过提供多维数据模型和多维查询功能,帮助用户从不同角度和层次上对数据进行分析和查询,侧重分析决策。BI模块数据可视化组件。为用户提供拖拽式的数据分析操作页面,以及各种报表、图表的展示。本质上它就类似一个客户端,通过配置连接到各种OLAP引擎上(可以直白的理解为各种DB)来完成数据的分析和查询。转载 2024-02-06 09:28:54 · 265 阅读 · 0 评论 -
五分钟搞懂MySQL索引下推
索引下推(Index Condition Pushdown,简称ICP),是MySQL5.6版本的新特性,它能减少回表查询次数,提高查询效率。转载 2023-04-19 16:55:35 · 430 阅读 · 0 评论 -
怎么分库分表
横跨多个数据库导致无法使用本地事务,数据强一致性就别想了,只能引入更为复杂的分布式事务,勉强实现数据的最终一致性,可用性直线下降。同一个用户的订单散落在不同的表,用户想查询自己的订单,根本无法做到分页查询。想要实现用户订单分页查询,可以采用按照用户ID分片,(user_id % 128),这样同一个用户的订单只会存储在一张表中,咋分页展示都行。建议先分表,如果分表能解决问题,就不需要分库了,毕竟需要单独服务器资源,成本更高。嗯...,今天的面试就先到这吧,有后续面试会通知你,我送你下去。转载 2023-04-19 10:45:01 · 187 阅读 · 0 评论 -
oracle表空间大小的限制和DB_BLOCK_SIZE的概念
之前接触的项目表空间最大也不超过10G,所以导入数据库时一直使用导入本地的oracle数据库文件的方法,即根据dmp文件大小设置一个数据文件,设定表空间最大值。--创建表空间,数据文件为'F:\app\zang\oradata\orcl\charge_zang.dbf',初始大小50M,递增10M,最大递增到2Gcreate tablespace charge_zang datafile 'F:\app\zang\oradata\orcl\charge_zang.dbf' size 50M转载 2021-12-29 14:50:10 · 6894 阅读 · 0 评论 -
Oracle正则判断是否有数字
数据库中(Oracle)存储了采集到的api信息,其中的url中存在PathVariable形式的数据:例如:/api/query/1243590/api/query2/898989/2323那么,可以写如下sql过滤出这样的数据select * from api_info where regexp_like(url,'(/[0-9]+)+$');select regexp_replace(url,'(/[0-9]+)+$','')from api_info;...原创 2021-10-29 09:11:11 · 789 阅读 · 0 评论 -
mysql原理5:MVCC机制
MVCC多版本并发控制机制 Mysql在可重复读隔离级别下如何保证事务较高的隔离性同样的sql查询语句在一个事务 里多次执行查询结果相同,就算其它事务对数据有修改也不会影响当前事务sql语句的查询结果。 这个隔离性就是靠MVCC(Multi-Version Concurrency Control)机制来保证的,对一行数据的读和写两个操作默认 是不会通过加锁互斥来保证隔离性,避免了频繁加锁互斥,而在串行化隔离级别为了保证较高的隔离性是通过将所有操 作加锁互斥来实现的。 Mysql在读已提交和可原创 2021-10-03 13:05:09 · 144 阅读 · 0 评论 -
mysql原理4:一条sql如何执行
MySQL的内部组件结构 大体来说,MySQL 可以分为 Server 层和存储引擎层两部分。 Server层 主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数 (如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。 Store层存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、Memory 等多个存储引擎。现在 最.原创 2021-10-02 11:14:31 · 189 阅读 · 0 评论 -
查看mysql数据库容量大小
第一种情况:查询所有数据库的总大小,方法如下:mysql> use information_schema;mysql> select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data from TABLES;+-----------+| data |+-----------+| 3052.76MB |+-----------+1 row in set (0.02 sec)统计一下所有库数...转载 2021-09-23 14:08:42 · 14248 阅读 · 0 评论 -
mysql原理三:mysql引擎InnoDB内存和磁盘架构
mysql的InnoDB引擎的内存和磁盘架构如下图所示:内存区域中,有缓存池Buffer Pool,其结构如下图所示:free链表为空闲链表,保存了buffer pool中的空闲的内存空间,一个控制块对应于一个空白块,大小为一个也的大小,默认为16kb。...原创 2021-09-15 13:34:54 · 390 阅读 · 0 评论 -
mysql原理二:联合索引
联合索引属于辅助索引。假如有下图的数据,其中a列是主键:如果要创建一个联合索引(b,c,d),那么索引结构类似下图:注意,上图中,叶子节点也存了全部数据,这个结构图示以b,c,d为联合索引建立的,所谓联合索引就是将b,c,d的值连起来以后做排序。需要注意的是,上图中的结构并不是真正的mysql中的结构图,而是类似,在上边的描述中,也用了加粗标红的类似两个字来标注。这里说类似,是因为真正的辅助索引叶子节点不会存全部数据,如果存全部数据,首先占用空间很大,而且数据更新时,辅助索引树也需要..原创 2021-09-13 14:57:30 · 330 阅读 · 0 评论 -
mysql原理一:innodb存储基本单位页结构及B+tree
页结果如下:其中的页目录是为了提高查找用户数据区域的效率。页中存在指针指向上一页和下一页。页目录(页目录的查找是用二分查找算法)和用户数据区域的数据都是有序的。每个也大小默认为16kb。当页很多时,比如下图所示指向select * from t1 where id= 6000;需要遍历页链表,效率很慢,再加上页是从硬盘读出来的,那效率就更慢了。为了提高效率,像位用户数据区加页目录这种方式,为所有页加一个索引页(大小也是16kb),其中所存数据为每一页的最小id。那么,这样的机构就是...原创 2021-09-13 14:15:37 · 395 阅读 · 0 评论 -
Oracle 利用系统表 user_segments 查询表的存储空间
在 Oracle 中可以利用系统表 user_segments 查询表的存储空间占用大小。select segment_name as table_name, -- 表名 segment_type, -- 表类型 bytes, -- 实际大小 round(bytes/1024/1024, 2) -- 以M为单位 from user_segments where segment_name = 'table_name';...原创 2021-09-09 10:11:25 · 2536 阅读 · 0 评论 -
Oracle RAC环境下vip/public/private IP的区别
在Oracle RAC环境下,每个节点都会有多个IP地址,分别为Public/Private/Vip,这三个IP到底有啥区别呢?分别用在那些场合呢?来看看老外的回答。1. private IP address is used only for internal clustering processing (Cache Fusion)私有IP用于心跳同步,这个对于用户层面,可以直接忽略,简单理解,这个Ip用来保证两台服务器同步数据用的私网IP。2. VIP is used by database app转载 2021-09-07 14:13:19 · 2508 阅读 · 0 评论 -
数据库集群方案及Oracle RAC架构分析
应对业务量的不断增加场景通常有两个大方向,一种是纵向扩展,也就是增加单台服务器的CPU计算能力、内存容量和磁盘承载能力等;另外一种是横向扩展,也就是通过增加服务器的数量来增加处理能力。前者存在业务中断和扩展上限等诸多的问题,特别是互联网业务的迅猛发展,单台服务器几乎无法满足业务负载要求,因此目前比较流行的方式横向扩展的方式。1.数据库集群数据库的横向扩展是通过数据库集群实现的。数据库集群也有两种主要形式,一种是主备(主从)架构,也就是只有一台服务器上的数据库可以访问,另一个(多个)服务器上数据库不.转载 2021-09-07 14:05:24 · 2426 阅读 · 0 评论 -
mysql系列(四)异步复制、全同步复制与半同步复制
这里虽然说的是Mysql数据库,但对应其他数据库,原理没有什么差异。只是在具体实现和配置上不同。一、异步复制(Asynchronous replication)1、逻辑上MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从库上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。2、技术上主库将事务 Binlog 事件写入到 Binlog转载 2021-03-24 13:08:43 · 407 阅读 · 0 评论 -
MySQL联接查询算法(NLJ、BNL、BKA、HashJoin)
一、联接过程介绍为了后面一些测试案例,我们事先创建了两张表,表数据如下: 1 2 3 4 CREATE TABLE t1 (m1 int, n1 char(1)); CREATE TABLE t2 (m2 int, n2 char(1)); INSERT INTO t1 VALUES(1, 'a'), (2, 'b'), (3, 'c'); INSERT INTO t2 VALUES(2, 'b'), (3, 'c'), (转载 2021-03-19 18:44:20 · 1535 阅读 · 0 评论 -
mysql相关:索引,分库分表技术
原创 2021-03-19 18:17:37 · 165 阅读 · 0 评论 -
DriverManager与桥接(Bridge)模式
结构型—桥接(Bridge)模式1、意图: 将抽象部分(抽象接口)与它的实现部分(代码实现)分离,使它们都可以独立地变化。 理解:抽象部分是对外展现的接口(api),而实现部分是针对抽象接口提供的不同版本的功能实现,使两者独立变化指两者可以在各自的维度上自由变化,而不会产生太大的影响。如可以在api中添加新的接口,而不影响具体实现部分;可以在实现部分针对特定接口添加新的实现方式,而不影响抽象接口定义。 桥接模式将类的继承关系转变为类的聚合关系(见下图)。对于抽象接口及其实现,Java中转载 2021-01-22 00:03:37 · 471 阅读 · 0 评论 -
深入学习MySQL事务:ACID特性的实现原理
事务是MySQL等关系型数据库区别于NoSQL的重要方面,是保证数据一致性的重要手段。本文将首先介绍MySQL事务相关的基础概念,然后介绍事务的ACID特性,并分析其实现原理。MySQL博大精深,文章疏漏之处在所难免,欢迎批评指正。一、基础概念事务(Transaction)是访问和更新数据库的程序执行单元;事务中可能包含一个或多个sql语句,这些语句要么都执行,要么都不执行。作为一个关系型数据库,MySQL支持事务,本文介绍基于MySQL5.6。首先回顾一下MySQL事务的基础知识。1.转载 2021-01-20 22:23:45 · 159 阅读 · 1 评论 -
Spring数据库连接与Threadlocal
目录关键类:数据库连接放入Threadlocal:从ThreadLocal取数据库连接:关键类:TransactionSynchronizationManager数据库连接放入Threadlocal:TransactionInterceptor.invoke(MethodInvocation invocation)---》TransactionStatus org.springframework.transaction.support.AbstractPlatformTra.原创 2021-01-04 18:29:06 · 1036 阅读 · 0 评论 -
Mysql中的MVCC
Mysql到底是怎么实现MVCC的?这个问题无数人都在问,但google中并无答案,本文尝试从Mysql源码中寻找答案。 在Mysql中MVCC是在Innodb存储引擎中得到支持的,Innodb为每行记录都实现了三个隐藏字段:6字节的事务ID(DB_TRX_ID) 7字节的回滚指针(DB_ROLL_PTR) 隐藏的ID6字节的事物ID用来标识该行所述的事务,7字节的回滚指针需要了解下Innodb的事务模型。1. Innodb的事务相关概念为了支持事务,Innbodb引...转载 2021-01-04 10:07:59 · 220 阅读 · 0 评论 -
Oracle的树状查询
Oracle的树状查询语句很简单SELECT 。。。START WITH condition CONNECT BY condition;Oracle使用树状结构的目的是:1.用二维表的形式记录树状结构2.查询二维表来构造树状结构,一般都是根据一个对象向上查询查出它所有的祖先,根据一个对象向下查询查出它所有的子孙树状结构的特点就是一个子只有一个父,一个父可以有多个子。那只要每一个对象知道了他的父对象,就可以手动的构造出树状结构。也就是说,有多少个对象在二维表中就需要多少行,每一个对象都有一个指出转载 2020-12-30 11:45:49 · 3627 阅读 · 0 评论 -
MySQL日志系统:redo log、binlog、undo log 区别与作用
日志系统主要有redo log(重做日志)和binlog(归档日志)。redo log是InnoDB存储引擎层的日志,binlog是MySQL Server层记录的日志, 两者都是记录了某些操作的日志(不是所有)自然有些重复(但两者记录的格式不同)。图来自极客时间的mysql实践,该图是描述的是MySQL的逻辑架构。redo log日志模块redo log是InnoDB存储引擎层的日志,又称重做日志文件,用于记录事务操作的变化,记录的是数据修改之后的值,不管事务是否提交都会记录下来。在实例和转载 2020-12-18 17:11:15 · 115 阅读 · 2 评论 -
springboot动态数据源
1.配置pom.xml<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.2</version> </dependency> <dependency> <groupId>com.baomi原创 2020-12-03 16:24:34 · 256 阅读 · 0 评论 -
Oracle查几个月前,几天前
查一个月前:select add_months(sysdate,-1) from dual查两天前select sysdate-2 from dual删除一个月前的数据:delete from MQ_RECORD where createtime <add_months(sysdate,-1)原创 2020-11-05 15:47:25 · 1320 阅读 · 0 评论 -
sql连接查询语句中on、where筛选的区别总结
前言相信对于每位程序员来说,sql查询这个东西, 要说它简单, 可以很简单, 通常情况下只需使用增删查改配合编程语言的逻辑表达能力,就能实现所有功能。 但是增删查改并不能代表sql语句的所有, 完整的sql功能会另人望而生畏。 就拿比普通增删查改稍微复杂一个层次的连接查询来说, 盲目使用, 也会出现意料之外的危险结果,导致程序出现莫名其妙的BUG。在连接查询语法中,另人迷惑首当其冲的就要属on筛选和where筛选的区别了, 在我们编写查询的时候, 筛选条件的放置不管是在on后面还是where后面,转载 2020-10-12 10:35:26 · 750 阅读 · 0 评论 -
查看mysql库中所有表的大小和记录数
SELECT TABLE_NAME,DATA_LENGTH,INDEX_LENGTH,(DATA_LENGTH+INDEX_LENGTH) as length,TABLE_ROWS,concat(round((DATA_LENGTH+INDEX_LENGTH)/1024/1024,3), 'MB') as total_size FROM information_schema.TABLES WHER...原创 2020-04-07 10:50:34 · 256 阅读 · 0 评论 -
logstash同步oracle数据到elasticSearch
配置文件如下:input {jdbc {jdbc_driver_library => "../lib/orcl-lib/ojdbc6-11.2.0.3.jar"jdbc_driver_class => "Java::oracle.jdbc.driver.OracleDriver"jdbc_connection_string => "jdbc:oracle:t...原创 2020-03-16 16:05:35 · 1659 阅读 · 0 评论 -
数据库连接池对比
1.性能方面 hikari>druid>tomcat-jdbc>dbcp>c3p0 。hikari的高性能得益于最大限度的避免锁竞争。2.druid功能最为全面,sql拦截等功能,统计数据较为全面,具有良好的扩展性。3....原创 2019-10-31 13:49:26 · 274 阅读 · 0 评论 -
InnoDB---可重复读隔离级别的底层实现原理
可重复读的实现 Repeatable Read(可重复读):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录(读已经提交的,其实是读早于本事务开始且已经提交的),但是不能看到其他事务对已有记录的更新(即晚于本事务开始的),并且,该事务不要求与其他事务是“可串行化”的。 这句话的核心,是“但是不能看到其他事务对已有记录的更新”,那么RR隔离级别是怎么保证这一点的呢?...转载 2019-01-18 11:01:07 · 1305 阅读 · 1 评论 -
不可重复读与幻读的区别
当然, 从总的结果来看, 似乎两者都表现为两次读取的结果不一致.但如果你从控制的角度来看, 两者的区别就比较大对于前者, 只需要锁住满足条件的记录对于后者, 要锁住满足条件及其相近的记录-----------------------------------------------------------我这么理解是否可以?避免不可重复读需要锁行就行避免幻影读则...转载 2019-01-18 10:55:19 · 133 阅读 · 0 评论 -
MySQL 性能优化之 延迟关联(deferred join)
在高性能MySQL一书中,有这样的例子 select c1 from pro where c2='M' order by c3 limit 100000, 10; 如何使它速度更快? 1:对c2+c3做多列二次索引。2:利用延迟关联(deferred join)技术,通过覆盖索引(上面1建立的索引)来得到所需要的主键,然后再根据这些主键关联原表获得需要的行,...转载 2019-01-17 16:56:14 · 3435 阅读 · 1 评论 -
mysql高效索引之覆盖索引
概念如果索引包含所有满足查询需要的数据的索引成为覆盖索引(Covering Index),也就是平时所说的不需要回表操作判断标准使用explain,可以通过输出的extra列来判断,对于一个索引覆盖查询,显示为using index,MySQL查询优化器在执行查询前会决定是否有索引覆盖查询 注意1、覆盖索引也并不适用于任意的索引类型,索引必须存储列的值2、Hash 和f...转载 2019-01-17 16:25:00 · 172 阅读 · 0 评论 -
mysql的 update from select (同一个mysql实例下跨库连接)
mysql 跨库连接查询,分同一个实例下和不同实例,同一实例下的不同库,可以直接写,不同实例暂时无法像oracle那样建立dblink后直接写语句。 UPDATE ri_assistance_apply AS a INNER JOIN `sipop-account`.ri_account_user AS b ON a.user_id=b.user_idJOIN `sipop-acc...原创 2018-11-23 11:29:44 · 2167 阅读 · 0 评论 -
BTree和B+Tree详解
B+树索引是B+树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B+树中的B代表平衡(balance),而不是二叉(binary),因为B+树是从最早的平衡二叉树演化而来的。在讲B+树之前必须先了解二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree),B+树即由这些树逐步优化而来。二叉查找树二叉树具有以下性质:左子树的键值小于根的键值,右子树的键值大于根的键...转载 2018-04-21 11:36:13 · 6345 阅读 · 1 评论 -
MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)
测试缘由 一个开发同事做了一个框架,里面主键是uuid,我跟他建议说mysql不要用uuid用自增主键,自增主键效率高,他说不一定高,我说innodb的索引特性导致了自增id做主键是效率最好的,为了拿实际的案例来说服他,所以准备做一个详细的测试。 作为互联网公司,一定有用户表,而且用户表UC_USER基本会有百万记录,所以在这个表基础上准测试数据来进行测试。 测试过程是目前我...转载 2018-04-20 18:27:12 · 236 阅读 · 0 评论 -
数据库为什么要用B+树结构-
B+树在数据库中的应用{为什么使用B+树?言简意赅,就是因为:1.文件很大,不可能全部存储在内存中,故要存储到磁盘上2.索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数(为什么使用B-/+Tree,还跟磁盘存取原理有关。)3.局部性原理与磁盘预读,预读的长度一般为页(page)的整倍数,(在许多操作系统中,页得大小通常为4k)4.数据库系统巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个...转载 2018-04-20 18:12:18 · 501 阅读 · 0 评论