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

目录

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;  同时满足一定的条件时,再写入到磁盘中;进而提升写入效率;

相关推荐

  1. 现在多种数据库模型对比

    2023-12-12 17:20:03       57 阅读
  2. ChatGPTQT串口数据Demo

    2023-12-12 17:20:03       42 阅读
  3. c++ 对比试验

    2023-12-12 17:20:03       36 阅读
  4. SparkMySQL数据库

    2023-12-12 17:20:03       56 阅读
  5. node.js中fs模块语法讲解

    2023-12-12 17:20:03       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-12 17:20:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-12 17:20:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-12 17:20:03       82 阅读
  4. Python语言-面向对象

    2023-12-12 17:20:03       91 阅读

热门阅读

  1. 机器学习中Fine-tuning应用实例

    2023-12-12 17:20:03       47 阅读
  2. Vue3: Suspense异步加载组件

    2023-12-12 17:20:03       60 阅读
  3. flutter 底部弹窗和中间弹窗

    2023-12-12 17:20:03       60 阅读
  4. 如何使用Bison、Flex完成一个语法解析程序

    2023-12-12 17:20:03       66 阅读
  5. Linux安全学习路标

    2023-12-12 17:20:03       58 阅读
  6. Cryptopp是什么

    2023-12-12 17:20:03       60 阅读
  7. 将List<Map<String,Object>>转为List<Object>

    2023-12-12 17:20:03       63 阅读
  8. 策略模式实现

    2023-12-12 17:20:03       50 阅读