- 博客(33)
- 收藏
- 关注
原创 MYSQL主从同步
当主库读取事件的时候,会在binlog 上加锁,读取完成后,再将锁释放掉。slave节点上的SQL线程会读取relaylog 中的binlog 日志,将其解析成具体的增删改操作,把这些在master节点上进行过的操作重新在slave节点上重做一遍,达到数据还原的效果,这样可以保证master节点和slave节点的数据保持一致了。数据备份其实是冗余的机制,通过冗余的方式可以换取数据库的高可用性,当服务器出现故障、宕机等无可用的情况下,可以迅速进行故障切换,让从库当主库,保证服务正常运行。
2024-12-04 10:56:19
490
原创 Java 对象头、Mark Word、monitor与synchronized关联关系以及synchronized锁优化
否则说明多个线程竞争锁,轻量级锁就要膨胀为重量级锁,锁标志的状态值变为“10”,Mark Word中存储的就是指向重量级锁(互斥量)的指针,后面等待锁的线程也要进入阻塞状态。(1)在代码进入同步块的时候,如果同步对象锁状态为无锁状态(锁标志位为“01”状态,是否为偏向锁为“0”),虚拟机首先将在当前线程的栈帧中建立一个名为锁记录(Lock Record)的空间,用于存储锁对象目前的Mark Word的拷贝,官方称之为 Displaced Mark Word。(4)如果CAS获取偏向锁失败,则表示有竞争。
2024-11-22 10:24:24
1472
1
原创 什么是MESI缓存一致性协议?怎么解决并发的可见性问题?
什么是MESI协议的四种状态?: 该缓存行有效, 数据被修改了,但未同步回内存。即数据只存在于本缓存行中,和内存中的数据不一样。: 该缓存行有效,数据未被修改,和内存中的数据一致,并且数据只存在本缓存行中。:该缓存行有效,数据未被修改,和内存中的数据一致,并且数据同时存在于其他缓存中。:该缓存行数据无效,数据已过时。
2024-11-20 15:10:41
291
原创 线程同步的几种方法?
synchronized 底层实际上通过JVM来实现的,同一时间只能有一个线程去执行synchronized 中的代码块,那么这个操作就是不能被其它线程打断的,所以这里天然就具有原子性了。也就是通过monitorenter指令之后,synchronized内部的共享变量,每次读取数据的时候被强制从主内存读取最新的数据。这样通过这种方式,数据修改之后立即刷新回主内存,其他线程进入synchronized代码块后,使用共享变量的时候强制读取主内存的数据,上一个线程对共享变量的变更操作,它就能立即看到了。
2024-11-20 11:28:46
398
转载 Java中的四种引用类型
强引用是 Java 的默认引用形式,使用时不需要显示定义,是我们平时最常使用到的引用方式。它们的区别是被弱引用关联的对象在垃圾回收时总是会被回收,被软引用关联的对象只有在内存不足时才会被回收。Java提供给了我们四种引用方式,以便我们控制对象的生存周期,引用强度从强到弱分别为:强引用、软引用、弱引用、虚引用。任何通过强引用所使用的对象不管系统资源有多紧张,Java GC都不会主动回收具有强引用的对象。软引用和弱引用的特性基本一致, 主要的区别在于软引用在内存不足时才会被回收。
2024-11-19 16:06:40
62
转载 慢SQL优化思路+经典案例分析
in查询在进行cost代价计算时(代价 = 元组数 * IO平均值),是通过将in包含的数值,一条条去查询获取元组数的,因此这个计算过程会比较的慢,所以MySQL设置了个临界值(eq_range_index_dive_limit),5.6之后超过这个临界值后该列的cost就不参与计算了。就好像看书一样,上次看到哪里了,你就折叠一下或者夹个书签,下次来看的时候,直接就翻到啦。中的数据,放到临时磁盘文件,等到所有满足条件数据都查完排完,再用归并算法把磁盘的临时排好序的小文件,合并成一个有序的大文件。
2024-11-18 15:47:09
91
转载 日常工作中,你是如何优化SQL的?
in 查询会先执行内部查询部分 SELECT customer_id FROM orders,获得 orders 表(大表)中的所有 customer_id,然后在 customers 表(小表)中查找匹配的 id。如果没有的话,可以在自己搞个深分页,或者因为数据量、或者因为没加索引等原因,导致的慢SQL,然后按照这个思路去排查一遍。因此,应考虑在where的条件列,建立索引,尽量避免全表扫描。const:通过一次索引就能找到数据,一般用于主键或唯一索引作为条件,这类扫描效率极高,,速度非常快。
2024-11-18 15:43:25
58
转载 延迟双删,要延迟多久呢?
它们又有个很大的不同:Read/Write-Through是同步更新缓存和数据的,Write-Behind则是只更新缓存,不直接更新数据库,通过批量异步的方式来更新数据库。” 但是,通过一些方案优化处理,是可以保证弱一致性,最终一致性的。:根据业务读取数据的平均耗时,设置一个休眠时间(如1秒),以确保在此期间内所有可能的读请求都已经结束,并且可能因读取旧数据而写入的脏数据已经被缓存。:这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大。
2024-11-18 14:29:04
127
转载 图解分库分表
如果你的系统处于快速发展时期,如果每天的订单流水都新增几十万,并且,订单表的查询效率明变慢时,就需要规划分库分表了。方案,比如订单id在0~4000万的区间,划分为订单库1,id在4000万~8000万的数据,划分到订单库2,将来要扩容时,id在8000万~1.2亿的数据,划分到订单库3。水平分库是指,将表的数据量切分到不同的数据库服务器上,每个服务器具有相同的库和表,只是表中的数据集合不一样。当然,有时候我们也可以按时间范围来划分,如不同年月的订单放到不同的表,它也是一种range的划分策略。
2024-11-18 10:51:55
54
原创 23 种设计模式详解
定义:确保一个类最多只有一个实例,并提供一个全局访问点单例模式可以分为两种:预加载和懒加载定义:定义了一个创建对象的类,由这个类来封装实例化对象的行为。定义:定义了一个创建对象的抽象方法,由子类决定要实例化的类。工厂方法模式将对象的实例化推迟到子类。定义:定义了一个接口用于创建相关或有依赖关系的对象族,而无需明确指定具体类。简单工厂模式:建立一个实例化对象的类,在该类中对多个对象实例化。工厂方法模式:定义了一个创建对象的抽象方法,由子类决定要实例化的类。
2024-11-13 16:57:24
967
转载 图文并茂讲解Mysql事务实现原理
前面说过原子性,隔离性,持久性的目的都是为了要做到一致性,但隔离型跟其他两个有所区别,原子性和持久性是为了要实现数据的可性保障靠,比如要做到宕机后的恢复,以及错误后的回滚。下面我首先讲实现事务功能的三个技术,分别是日志文件(redo log 和 undo log),锁技术以及MVCC,然后再讲事务的实现原理,包括原子性是怎么实现的,隔离型是怎么实现的等等。undo log主要记录的是数据的逻辑变化,为了在发生错误时回滚之前的操作,需要将之前的操作都记录下来,然后在发生错误时才可以回滚。
2024-11-12 14:55:22
68
转载 MVCC 原理
事务,由一个有限的数据库操作序列构成,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。假如 A 转账给 B 100 元,先从 A 的账户里扣除 100 元,再在 B 的账户上加上 100 元。如果扣完 A 的 100 元后,还没来得及给 B 加上,银行系统异常了,最后导致 A 的余额减少了,B 的余额却没有增加。所以就需要事务,将 A 的钱回滚回去,就是这么简单。为什么要有事务呢?就是为了保证数据的最终一致性。MVCC,即。
2024-11-12 10:19:21
76
原创 docker安装及配置RabbitMQ
5672, 5671 (AMQP 0-9-1 without and with TLS 消息队列协议是一个消息协议)15672 (if management plugin is enabled.管理界面 )4369 (epmd) epmd 代表 Erlang 端口映射守护进程。docker update --restart=always 容器ID。15671 management监听端口。设置容器开机自动启动。
2024-10-28 10:26:32
128
原创 suse操作系统安装gaussdb数据库
本数据库安装方式是通过先在虚拟机中安装suse操作系统,再在suse操作系统中安装gaussdb数据库的方式安装,以下是安装步骤:14.
2024-10-10 10:22:32
1789
原创 docker安装oceanbase_mysql
1.远程拉取镜像:latest如下信息则启动数据库成功5.系统租户登录6.创建资源单元7.8.创建租户 使用lower_case_table_names参数区分数据库是否大小写敏感。
2024-10-08 15:14:09
673
原创 MaxCompute数据库客户端
百度网盘链接: https://pan.baidu.com/s/1JfXKuKXqGRrkkpMsfous5A提取码: ycn7。
2024-01-31 10:51:35
434
1
原创 gbaseV95安装
将GBase8a_MPP_Cluster-NoLicense-9.5.3.26.6-centos7-aarch64.tar.bz2传入opt目录下安装包百度网盘提取链接: https://pan.baidu.com/s/1cVfvGODOc3mqBTHX5-Wkrg提取码: fwph。
2024-01-29 17:50:27
449
原创 oracle11g安装
8.创建Oracle安装目录1.获得安装包百度网盘安装包提取链接: https://pan.baidu.com/s/1gAppPUon9CzgImh2IT9IuQ提取码: nnq32.关闭防火墙操作用户:root3.安装依赖包操作用户:root注:中途若有碰到选择的(y/n),直接输入y就行4.验证依赖包操作用户:root正常所有包都会显示已安装,自己注意是否有未安装的包5.创建oracle用户操作用户:root到最后一步会提示设置密码设置密码为oracle,随意自己想设啥设啥。
2024-01-29 16:40:36
709
原创 linux安装tesseract支持tess4j图片识别
usr/local/libarchive/libarchive-3.3.3/build/pkgconfig为安装的libarchive的pkconfig路径。/usr/local/leptonica/lib/pkgconfig为安装的leptonica的pkconfig路径。注意:/usr/local/icu4c-52/lib/pkgconfig为安装的icu的pkconfig路径。链接: https://pan.baidu.com/s/1OoSi23ES1zmWlYMIKeq3MQ。
2024-01-19 17:55:30
829
1
原创 linux安装opencv库
链接: https://pan.baidu.com/s/1Pi6zR29LjD3UFgvR9b4T6w。以上两条也会在: /usr/local/opencv/share/java/opencv4下。在build/lib目录下有: libopencv_java480.so文件。在build/bin目录下有: opencv-480.jar文件。如果没有出现以上内容,则编译出错。
2024-01-19 17:12:22
519
1
原创 oracle sqlldr命令安装
19版本可向下兼容所有oracle版本数据库输入y回车输入y回车执行:sqlldr(在sqlldr命令文件路径下。
2024-01-19 16:56:27
1242
1
原创 linux_arm架构GLIBC升级
链接: https://pan.baidu.com/s/1eNpwJbF5qZVn-_G1x0tG-A。版本4.8.5 低于6.2需要升级,我升级到了11.2.0版本。版本3.82低于4需要升级,我升级到了4.3版本;版本高于3.02无需升级安装;
2024-01-17 16:57:48
1824
原创 Linux_aarch64系统PaddleOCR基于PaddleHub Serving的离线服务部署
适用于:linux操作系统-arm架构环境要求:glibc版本 > 2.26。
2024-01-17 16:45:19
750
原创 linux_x86-64环境PaddleOCR基于PaddleHub Serving的离线服务部署
链接: https://pan.baidu.com/s/1J3tYgO7Kp_--XCcGCnic9w。显示当前有base和paddle_env环境,则conda已加入环境变量。该环境下有我们需要的paddleocr的所有依赖。
2023-11-10 18:27:54
666
4
原创 db2、dm、gbase、greenplumn、postgresql、gaussdb_T、hive、Informix、kingbase、mongodb、mysql、oceanbase、osc数据库驱动
链接: https://pan.baidu.com/s/1HEt7EJz0k1MhikxCZm0OvA。以上数据库驱动百度网盘自取。
2023-11-10 18:07:30
134
1
原创 mysql版本升级
root用户执行命令:rpm -i /home/mysqllib/mysql-community-*.rpm --force --nodeps。alter user 用户名@'%' identified with mysql_native_password by '密码';mysqldump -u 用户名 -p 备份的数据库名> /home/mysqlbak/备份的文件名.sql。create user 用户名@'%' IDENTIFIED BY '密码';执行命令:rm -rf /etc/my.cnf。
2023-11-10 17:35:40
78
1
原创 centos7环境不能联外网问题解决
2.在服务器ping一下这个ip,能ping通就是域名解析有问题。添加完后重新ping www.baidu.com就可以上网啦。1.在本地ping www.baidu.com返回一个ip。解决方案打开/etc/resolv.conf,添加如下两行。如果ping这个ip,ping不通那就是服务器不能上网。
2023-11-10 17:24:07
491
2
原创 PaddleOCR基于PaddleServing的在线服务化部署
使用paddlepaddle需要先安装python环境,可以通过anaconda一键安装python环境 anaconda下载地址:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/?使用PaddleServing做服务化部署时,需要将保存的inference模型转换为serving易于部署的模型。调整 config.yml 中的并发个数获得最大的QPS, 一般检测和识别的并发数为2:1。基于PaddleServing的部署:代码路径为"
2023-11-10 17:21:18
2283
3
原创 PaddleOCR基于PaddleHub Serving的在线服务部署
paddle是2.5.1 gpu,Linux运行时cannot import name 'RNNCell' from 'paddle.fluid.layers',这是因为2.5.0后没有fluid了,这时不用降版本(因为我将版本后出现了另一个错误,这时只需要把/root/anaconda3/envs/paddle_env/lib/python3.8/site-packages/paddlehub/compat/task/text_generation_task.py这个文件。:可视化结果保存路径,默认为。
2023-11-10 15:04:13
1564
5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人