数据库
韩运畅
这个作者很懒,什么都没留下…
展开
-
数据引擎/聚集索引
存储引擎对比MYISAM索引与数据分开存储,所有索引级别相同,对应的都是指向真正数据的指针,适合读多写少的场景。不支持事务,锁的最小粒度为表锁,不太适合高并发读写。不支持崩溃后的安全恢复。INNODB一个聚集索引外加多个非聚集索引。支持事务,锁的粒度最小为行锁。支持外键。支持崩溃后的安全恢复。MEMORY该存储引擎将数据存储在内存中,适合追求更快的响应速度,适合数据规模小并且不担心数据丢失的场景。聚集索引与非聚集索引聚集索引是指B+树的叶节点存储了整行的数据,非聚集索引是指B+树的叶原创 2020-12-14 00:21:21 · 168 阅读 · 0 评论 -
消息队列发布订阅模型设计及其原因
模型最开始是这样的:后来为了可以处理消费者消费能力与生产者生产能力不匹配的问题。问题1:生产者生产能力低于消费者消费能力。 最简单的想法增大生产者生产能力或者减小消费者消费能力。前者不可取,因为消息能生产出来的多少取决于系 统,取决于业务。而对于上面的模型,P:C=1:1,消费者减无可减,所以也不可取。所以这个问题无解。仔细想 下,其实一个消费者而已也没有浪费太多性能。问题2:消费者消费能力跟不上生产者生产能力 这就引起了下面的设原创 2020-12-12 13:45:23 · 285 阅读 · 0 评论 -
Dubbo 连接模型及其原因
Dubbo的四个角色,服务提供者,服务消费者,注册中心,监控中心。Provider Consumer Registry之间两两连接而且都是长连接,Consumer Provider与Monitor之间的连接是短连接。为什么是这样的连接模型?答:Consumer Provider之间为什么是长连接的?Consumer Provider之间的连接是 单一 长连接。为什么这么设计呢?首先我们需要明白,两个进程之间可以建立多个连接,因为一个进程可以绑定多个端口。那么,两进程之间通信,单一连接与多连接有.原创 2020-12-10 21:14:58 · 268 阅读 · 0 评论 -
dubbo结合zk实现服务变更自动发现
主要依靠zookeeper的watch机制, watch+/dubbo/sericeName消费者会向zk注册一个watcher监听某一结点,两个要素,节点路径名和回调方法。zk会和provider保持心跳,如果provider失联,对应的node会被删除,或者新的provider上线会请求zk,在某一serviceName下建立一个新的节点。于是/dubbo/serviceName发生变动,触发watch机制,消费者端刷新provider信息...原创 2020-12-08 17:18:49 · 652 阅读 · 3 评论 -
C++中的引用和指针
char a=’a‘;char* b=&a;//指针char& c=a;//引用C++中的引用声明时必须要赋值,而且其指向的地址不可更改。如果引用了一个对象的化,引用.相当于指针->.需要注意的是,通过汇编代码我们发现,一个字符类型的引用,无论是全局变量还是栈中的引用类型参数,其都有内存而且都是8字节,而那个字符是1字节。所以引用本身也是用指针实现的,只不过它不可更改存放的地址。另外引用没有二级或更高的引用。关于何时使用指针类型的参数何时使用引用类型的参数?感觉区别不大,原创 2020-12-01 22:04:23 · 84 阅读 · 0 评论 -
mysql之索引数据结构
数据结构的选择:数据库文件是存储在磁盘上,因此内存上的比较次数不再是操作的瓶颈,根据指针从磁盘IO读取数据的次数才是,磁盘与内存交互的单位一次是一页(4K)。红黑树:极端情况下,数据量大的时候,红黑树也很深(失衡时)hash:将所以列hash映射为存储地址,不支持查范围,地址重合什么是B+树:B树:实现方法:初始化度的大小(C)与负载因子(Y)当一个节点中元素的个数大于>...原创 2020-02-16 11:55:53 · 142 阅读 · 0 评论 -
mysql的mvcc(多版本控制)
多版本控制通过记录多版本的数据从而避免了读等待提高了性能。mysql会为每行记录增加三个字段,第一个字段记录了该行的create version和delete version。当创建一行时,create version存入该事务的id,当删除一行时delete version存入该事务的id,更新相当于先删除再创建。事务id是递增的。第二个字段指向撤销日志以便于回滚。回滚段中的撤消日志分为插入...原创 2020-04-03 11:42:54 · 165 阅读 · 0 评论 -
一致的非锁定读
select语句是不加锁的,除非显式地指定了for update或者for share。读已提交:同一个事务中每次读最新的版本可重复读:同一事务中每次读取都和第一次读取建立的快照一致。利用了mvcc实现的mysql讲解一致的非锁定读的官方文档...原创 2020-04-03 11:41:07 · 72 阅读 · 0 评论 -
mysql实现乐观锁与悲观锁
乐观锁:认为当前竞争度不高的情况使用,类似于java中的cas操作,一般是在表的字段中设置版本号,代码中先获取记录及对应的版本号,然后执行逻辑操作,最后循环进行,update … version=version_+1 and… where version=verson_ …直到成功。 悲观锁:认为当前竞争度高的情况使用,一般是,一锁二查(2.5 逻辑操作)三更新。可以用select… f...原创 2020-04-03 11:37:52 · 110 阅读 · 0 评论 -
mysql的事务嵌套
mysql默认不支持事务嵌套,对于begin…begin…commit,第一个事务会在第二个begin开启前隐式的提交。所以begin…begin…rollback后并不能再对最外面的事务进行操作了。但是mysql提供了savepoint可以实现事务嵌套的逻辑。如何使用savepoint实现事务嵌套...原创 2020-04-03 11:36:24 · 359 阅读 · 0 评论 -
mysql事务的自动提交与手动提交
set autocommit=0,手动提交需要执行commit才能将前面的语句作为一个事务提交,否则就永远是不提交的状态 set autocommit=1,自动提交手动指定一个事务的begin与commit不开启事务,默认每句命令作为一个事务自动提交...原创 2020-04-03 11:34:21 · 1588 阅读 · 0 评论 -
mysql各语句对应的锁
三种锁: record locks:只锁查出来的记录项如果是索引,直接锁索引然后再去锁对应的主键如果不是索引,去锁主键如果没有主键,锁全表 gap locks:是对索引记录之间的间隙上锁,不包括记录本身,间隙锁的目的是为了防止在间隙之间插入新的记录,间隙锁可以重叠。 next-key locks:相当于record locks + gap locks,锁住查询范围。提交后读:s...原创 2020-04-03 11:29:39 · 113 阅读 · 0 评论