
数据库技术
文章平均质量分 53
主要讲解MySQL主从复制与数据备份、MyCat读写分离与动态数据源切换、分片集群分表分库等。
杨林伟
像火箭科学家一样思考!
展开
-
Mac下使用DBeaver连接GBase数据库
gbase安装教程原创 2023-04-10 12:03:34 · 544 阅读 · 0 评论 -
MyBatisPlus代码生成工具(史上操作最简单版本)
文章目录1. 引言2. 效果演示 Step1:首先配置数据库信息 Step2:运行项目,生成代码功能1: 生成代码到指定的目录功能2: 生成代码到target功能3: 生成zip3. 其它细节1. 引言最近在网上找MyBatisPlus代码生成工具类,找到的都不太满意,所以自己重写并开源到了Github,有兴趣的小伙伴可以下载来参考:地址:https://github.com/ylw-github/MP-Generator里面的代码实现细节不用过多的关注,只需要知道怎么配置和使用就可以了,本文来原创 2020-11-19 17:42:41 · 1090 阅读 · 0 评论 -
数据库系列课程(24)-MongoDB资料
基础知识:链接:https://pan.baidu.com/s/1m8pVGR–t8e8R7hefRSDiA密码:i2bw高级:链接:https://pan.baidu.com/s/1-lGnBvrO0ZonZUBbSA-FXQ密码:dgdh原创 2020-10-19 17:20:18 · 352 阅读 · 0 评论 -
数据库系列课程(23)-MongoDB 索引
1 概述索引支持在MongoDB中高效地执行查询。如果没有索引,MongoDB必须执行全集合扫描,即扫描集合中的每个文档,以选择与查询语句匹配的文档。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。如果查询存在适当的索引,MongoDB可以使用该索引限制必须检查的文档数。索引是特殊的数据结构,它以易于遍历的形式存储集合数据集的一小部分。索引存储特定字段或一组字段的值,按字段值排序。索引项的排序支持有效的相等匹配和基于范围的查询操作原创 2020-09-23 17:58:34 · 780 阅读 · 0 评论 -
数据库系列课程(22)-MongoDB 常用命令
1.引言常用命令小结:选择切换数据库:use articledb 插入数据:db.comment.insert({bson数据}) 查询所有数据:db.comment.find(); 条件查询数据:db.comment.find({条件}) 查询符合条件的第一条记录:db.comment.findOne({条件}) 查询符合条件的前几条记录:db.comment.find({条件}).limit(条数) 查询符合条件的跳过的记录:db.comment.find({条件}).ski原创 2020-08-12 14:51:25 · 621 阅读 · 0 评论 -
数据库系列课程(21)-MongoDB应用场景
业务应用场景传统的关系型数据库(如MySQL),在数据操作的“三高”需求以及应对Web2.0的网站需求面前,显得力不从心。解释:“三高”需求:High performance - 对数据库高并发读写的需求。Huge Storage - 对海量数据的高效率存储和访问的需求。High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求。而MongoDB可应对“三高”需求。具体的应用场景如:1)社交场景,使用 MongoDB原创 2020-08-10 19:06:12 · 775 阅读 · 1 评论 -
数据库系列课程(20)-数据库死锁的原因及解决方案
数据库是一个多用户使用的共享资源,当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并发控制的一个非常重要的技术。在实际应用中经常会遇到的与锁相关的异常情况,当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就会出现死锁,严重影响应用的正常执行。在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上转载 2020-06-29 17:43:37 · 715 阅读 · 0 评论 -
数据库系列课程(19)-乐观锁与悲观锁的优缺点
悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。乐观锁总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现。两种锁的使用场景从上面对原创 2020-06-29 17:28:34 · 1484 阅读 · 0 评论 -
数据库系列课程(18)-MySQL默认隔离级别
数据库默认隔离级别:mysql ——> repeatableoracle,sql server ——> read commitedmysql binlog的格式三种:statement:记录的是修改SQL语句row:记录的是每行实际数据的变更mixed:statement和row模式的混合为什么mysql用的是repeatable而不是read committed:在 5.0之前只有statement一种格式,而主从复制存在了大量的不一致,故选用repeatable原创 2020-06-29 17:12:38 · 4237 阅读 · 0 评论 -
数据库系列课程(17)-索引实现原理(小结)
引言什么是索引?答:是帮助MySQL高效获取数据的数据结构。什么是全表扫描?答:是将整张表扫描一遍,效率非常低。本文言简意赅的总结索引的几种实现原理:hash算法平衡二叉树(AVL树)B树实现B+树实现(MyISAM和InnoDB使用)hash算法原理:根据某一列(如userName)创建索引。优点:查找可以根据key进行访问,效率非常高。缺点:不能进行范围查询(因为无法比较大小)。其它:映射函数叫散列函数,存放记录数组叫散列表。平衡二叉树(AVL树)原理:取一中间值,中原创 2020-06-27 17:24:54 · 551 阅读 · 0 评论 -
数据库系列课程(16)-MyISAM和InnoDB的区别
InnoDBMyISAM⽀持事务处理不⽀持事务,回滚将造成不完全回滚,不具有原⼦性⽀持外键不⽀持外键⽀持⾏锁⽀持全⽂搜索不⽀持FULLTEXT类型的索引(在Mysql5.6已引⼊)不保存表的具体⾏数,扫描表来计算有多少⾏保存表的具体⾏数,不带where时,直接返回保存的⾏数对于AUTO_INCREMENT类型的字段,必须包含只有该字段的索引DELETE 表时,是⼀⾏⼀⾏的删除DELETE 表时,先drop表,然后重建表InnoDB ...原创 2020-06-26 22:27:55 · 394 阅读 · 0 评论 -
数据库系列课程(15)-MyISAM与InnoDB的索引差异
MyISAM的索引MyISAM的索引与行记录是分开存储的,叫做非聚集索引(UnClustered Index)。其主键索引与普通索引没有本质差异:有连续聚集的区域单独存储行记录主键索引的叶子节点,存储主键,与对应行记录的指针普通索引的叶子结点,存储索引列,与对应行记录的指针主键索引与普通索引是两棵独立的索引B+树,通过索引列查找时,先定位到B+树的叶子节点,再通过指针定位到行记录。举个例子,MyISAM:t(id PK, name KEY, sex, flag);表中有四条记录:1,原创 2020-06-26 22:19:33 · 385 阅读 · 0 评论 -
数据库系列课程(14)-脏读、不可重复读、幻读
脏读描述:一个事务读取另一个事务还没有提交的的数据。举例:事务1修改了一行数据,但是没有提交,此时事务2读取被事务1修改的数据,之后事务1因为某些原因rollback了,那么事务2读取到的数据就是脏数据了。解决方法:把数据库隔离级别修改为READ_COMMITTED。不可重复读描述:在同一个事务内,两个相同的查询返回了不同的结果。举例:事务1读取某一数据,事务2读取并修改该数据,事务1为了验证而再次读取改数据,得到不同的结果。解决方法: 把数据库的隔离级别调整到REPEATABLE_READ。原创 2020-06-26 22:07:26 · 469 阅读 · 0 评论 -
数据库系列课程(13)-事务传播机制、隔离级别、通知类型
7种事务传播行为类型说明PROPAGATION_REQUIRED如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。PROPAGATION_SUPPORTS支持当前事务,如果当前没有事务,就以非事务方式执行。PROPAGATION_MANDATORY使用当前的事务,如果当前没有事务,就抛出异常。PROPAGATION_REQUIRES_NEW新建事务,如果当前存在事务,把当前事务挂起。PROPAGATION_NO原创 2020-06-26 21:52:21 · 451 阅读 · 0 评论 -
数据库系列课程(12)-MySQL数据库优化及注意事项
1.MySQL数据库优化方案Mysql的优化,大体可以分为三部分:索引的优化慢查询优化表优化开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。还可以使用腾讯云MySQL数据库监控:腾讯云数据库地址:https://console.cloud.tencent.com/cdb实例监控https://conso...原创 2019-12-25 16:56:24 · 567 阅读 · 0 评论 -
数据库系列课程(11)-MyISAM和InnoDB对B-Tree索引不同的实现方式
MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM主键索引的:InnoDB也使用B+Tree作为索引结构,但具体实现方式却与MyISAM截然不同.MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个...原创 2019-12-25 16:38:13 · 535 阅读 · 0 评论 -
数据库系列课程(10)-MySQL索引实现原理
1. 引言MySQL官方对索引的定义为:索引(Index)是帮助 MySQL 高效获取数据的数据结构。白话文:索引就像书的目录一样可以非常快速的定位到书的页码。如果向mysql发出一条sql语句请求,查询的字段没有创建索引的话,可能会导致全表扫描,这样的话查询效率非常低。那么MySQL中索引采用的是那些数据结构?或者说索引实现的原理。下面来举例讲解。2. 索引实现的原理2.1 方式一:...原创 2019-12-25 16:33:10 · 542 阅读 · 0 评论 -
数据库系列课程(09)-Sharding-Jdbc日志分析
Sharding-JDBC中的路由结果是通过分片字段和分片方法来确定的。如果查询条件中有 id 字段的情况还好,查询将会落到某个具体的分片。如果查询没有分片的字段,会向所有的db或者是表都会查询一遍,让后封装结果级给客户端。Sharding-Jdbc和MyCat查询原理大致相同:示例代码:public interface OrderRepository extends CrudRe...原创 2019-12-25 15:21:27 · 1349 阅读 · 0 评论 -
数据库系列课程(08)-SpringBoot整合Sharding-Jdbc
1. 引言先来理解几个概念:「LogicTable」:数据分片的逻辑表,对于水平拆分的数据库(表),同一类表的总称。例如订单信息表拆分为2张表,分别是t_order_0、t_order_1,他们的逻辑表名为t_order。「ActualTable」:在分片的数据库中真实存在的物理表。即上个示例中的t_order_0、t_order_1。「DataNode」:数据分片的最小单元。由数据源名...原创 2019-12-25 14:24:20 · 563 阅读 · 0 评论 -
数据库系列课程(07)-Sharding-Jdbc简介
1. Sharding-Jdbc介绍Sharding-Jdbc在3.0后改名为Shardingsphere,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。Sharding-Sphere(...原创 2019-12-24 16:23:37 · 1016 阅读 · 0 评论 -
数据库系列课程(06)-MyCat分片按省操作数据库例子
1.引言MyCat中的路由结果是通过分片字段和分片方法来确定的,如果查询条件中有 id 字段的情况还好,查询将会落到某个具体的分片。如果查询没有分片的字段,会向所有的db都会查询一遍,让后封装结果级给客户端。那么实际情况中,在Mycat中分片是如何实现的呢?下面来举个例子。需求:数据库中主要存放“省”的信息,如广东省要放到广东省数据库,浙江省要放到浙江省数据。。。每个省都有自己的数据库...原创 2019-12-23 15:51:39 · 540 阅读 · 0 评论 -
数据库系列课程(05)-MyCat分库分表策略
1.MyCat分库分表数据库分表分库原则遵循 垂直拆分与水平拆分。1.1 垂直拆分垂直拆分就是根据不同的业务,分为不同的数据库,比如会员数据库、订单数据库、支付数据库等,垂直拆分在大型电商系统中用的非常常见。优点:拆分后业务清晰,拆分规则明确,系统之间整合或扩展容易。缺点:部分业务表无法join,只能通过接口方式解决,提高了系统复杂度。存在分布式事务问题。1.2 水平拆分...原创 2019-12-23 11:11:34 · 841 阅读 · 0 评论 -
数据库系列课程(04)-SpringBoot整合MySQL读写分离
1.引言代码已上传到Github,有兴趣的同学可以下载来看看:https://github.com/ylw-github/SpringBoot-MyCat-Demo在前面几个章节,我们了解到了MySQL数据库的主从复制、使用MyCat实现读写分离:《数据库系列课程(01)-MySQL主从复制与数据备份》《数据库系列课程(02)-MyCat读写分离》《数据库系列课程(03)-Linu...原创 2019-12-20 17:35:33 · 594 阅读 · 0 评论 -
数据库系列课程(03)-Linux环境MyCat的安装与配置
本文来讲解下如何在Linux下安装MyCat:1.上传Mycat-server-1.6.5-release-20180122220033-linux.tar2.解压安装包tar -zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz 3.配置schema.xmlcd /usr/local/mycat/conf/vi s...原创 2019-12-20 17:00:08 · 533 阅读 · 0 评论 -
数据库系列课程(02)-MyCat读写分离
1.MyCat简介MyCAT是一款由阿里Cobar演变而来的用于支持数据库,读写分离、分表分库的分布式中间件。MyCAT支持Oracle、MSSQL、MYSQL、PG、DB2关系型数据库,同时也支持MongoDB等非关系型数据库。MyCAT原理:MyCat主要是通过对SQL的拦截,然后经过一定规则的分片解析、路由分析、读写分离分析、缓存分析等,然后将SQL发给后端真实的数据块,并将返回的结果做...原创 2019-12-20 16:27:54 · 454 阅读 · 0 评论 -
数据库系列课程(01)-MySQL主从复制与数据备份
1.MySQL数据库MySQL作为世界上使用最为广泛的数据库之一,免费是其原因之一。但不可忽略的是它本身的功能的确很强大。随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求。此时数据库集群就很好的解决了这个问题了。采用MySQL分布式集群,能够搭建一个高并发、负载均衡的集群服务器。在此之前我们必须要保证每台MySQL服务器里的数据同步。数据同步我们可以通过MyS...原创 2019-12-20 15:58:21 · 660 阅读 · 0 评论