现在多种数据库的读写模型对比

2023-12-13 04:25:35

目录

mongDB

read

write

ES

read

write

MySql

write

总结


mongDB

3.0 版本后的WiredTiger存储引擎

read

1. 应用通过driver 发起Buffer I/O读操作,由操作系统将磁盘数据页加载到文件系统的页缓存区

2. 引擎层读取页缓冲区的数据,进行解压后放到内部缓存区

3. 在内存中完成匹配查询,将结果返合给应用

tip:? MongoDB默认的内部缓存大小达到了机器内存的一半; 由wireTigerCacheSize参数指定

write

1.?应用通过driver 发起写入操作

2.数据库从内部缓存获取当前记录所在的页快,如果不存在则会从磁盘中加载

3.WiredTiger 开始写事物,修改数据写入页快的更新表,

4. 同时写Journal 日志(ReDo Log),默认100ms 写入磁盘;用于弥补CheckPoint的不足

5. 数据库默认每隔60s 执行CheckPoint ,将内存中数据写入到磁盘中

ES

read

1. clinet 发动请求到 coordinate node

2.?coordinate node 请发转到 shard 对应的主节点或者备份节点

3. 每个shard 节点将自己的搜索结果返合给coordinate node ,由协调节点进行数据的合并、排序、分页等操作产出最终的结果

write

?a.Lucene 中,单个倒排索引?文件被称为 Segment。Segment 是?自包含的,不不可变更更的。 多个 Segments 汇总在?一起,称为 Lucene 的 Index,其对应的就是 ES 中的 Shard

?b.乐观锁,删除用.del标记,然后过滤;

?c.写index buffer(闪存)+ 写Transaction Log (磁盘)

?d.Refresh : index buffer 1秒一次写入 segment ,可以被搜索到;估进称为进实时搜索?

?e. merage

MySql

write

mySql 分server层和存储层,这里的存储层默认指nnoDB; 先写存储层,在写server层binlog

1. InnoDB将要更新的数据所在的整页数据更到到缓存(Buffer pool 一半为机器内侧60%)中

2. InnoDB写入undo 日志便于回滚

3. InnoDB更新Buffer pool 内存中的数据,开放查询

4. InnoDB写redo log buffer

5. InnoDB commit 提交时?redo 日志写入磁盘

6.? Server层写binlog文件

7. commit 标识写入redo 日志与binlog 保持一致

8. buffer pool 中的数据写入磁盘

总结:

总结MySql, ElasticSearch,MongoDB三种现代数据的写操作,不难发现,实现机制大同小异: 先写buffer +?Transaction Log;? 同时满足一定的条件时,再写入到磁盘中;进而提升写入效率;

文章来源:https://blog.csdn.net/caicongyang/article/details/134922056
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。