
wiredtiger
baijiwei
做好产品, 写好代码
展开
-
Wiredtiger 存储引擎概述
存储引擎在任何的数据库里面都是非常重要的模块, 它主要负责数据的写入, 读取以及管理。Mongodb 从3.2之后, 采用Wiredtiger 作为默认的存储引擎,其主要的特性如下:...原创 2018-07-15 13:37:33 · 5830 阅读 · 0 评论 -
WiredTiger 的数据缓存机制
大多数的存储引擎都有自带的缓存机制, wiredtiger也不例外。 存储引擎的缓存机制都是基于数据库数据的总量要远远大于内存的容量, 在数据库的使用过程中, 不可能将全部的数据放在内存中, 总是需要将当前用到的数据从磁盘读入内存, 当内存容量不足的时候, 将内存中不是热点的数据写回盘, 腾出一定的内存空间来保存新的数据。 因此, 对于存储引擎的缓存机制, 最核心的地方就是, 使用适当的策略, ...原创 2018-07-22 16:29:50 · 1905 阅读 · 0 评论 -
存储引擎分类
当前市面上能见到的数据库有340多种, 每一种数据库会有一个或者多个数据引擎, 通过对这些存储引擎的分类, 能够帮助我们了解一些共性的东西。 为什么我们需要不同类型的存储引擎? 因为我们希望能够读写的性能能够最优, 不同的操作引擎, 对于一个写操作或者读操作, 需要的操作是不同的; 相同的操作应用于不同的介质速度也是不同的。 如下是从网上的得到Jeff Dean 的不同介质的访问时间:...原创 2018-09-01 17:34:31 · 447 阅读 · 0 评论 -
WiredTiger的journal日志实现
journal日志是实现WiredTiger持久化的关键, 所有的插入、更新操作, 都会在journal里面写入一条日志, 并且在服务器意外退出的时候, 通过checkpoint和该checkpoint之后的日志, 能够迅速的回复服务器的状态。在Wiredtiger里面, 通过log来表示journal相关的实现, 接下来, 我们看下是如何实现的。WT_CONNECTION_IMPL中log相...原创 2019-05-02 17:44:39 · 1765 阅读 · 0 评论 -
WiredTiger hazard指针
在WiredTiger里面, 采用Hazard pointers来管理一个内存页是否可以被Evict, 本文分析下其实现过程。Hazard pointersHazard pointers是在多线程环境下实现资源无锁访问的一种方法, 它采用内存换时间的方法:...原创 2019-04-30 19:17:53 · 778 阅读 · 0 评论 -
Mongodb 源码分析:整体架构
工作中主要负责Mongodb数据库, 一直在学习Mongodb的源码, 很希望能够搞清楚Mongodb内部的具体实现。 从Mongodb中文社区和其他人的博客里面学到了很多, 因此, 开了这个博客希望把自己学到的一些分享给大家。任何源码的分析都是从整体架构来开始的, Mongodb的整体架构跟其他的关系型的数据库很类似, 都是有一些关键的模块组成, 如: 存储引擎, 查询引擎等, 但是Mongod原创 2017-09-23 13:35:30 · 12720 阅读 · 2 评论 -
MongoDB的事务实现
WiredTiger对事务的支持, 是MongoDB支持事务的基础, 这里介绍一下WT下事务的实现过程。transaction 相关的数据结构__wt_txn_global在WT_CONNECTION中, 有一个全局的事务相关的上下文结构体__wt_txn_global, 用来记录事务实现的全局信息。 在open connection的时候调用__wt_txn_global_init来构建和...原创 2019-05-12 11:13:30 · 5451 阅读 · 0 评论 -
MongoDB的并行锁机制
zzz原创 2019-05-12 14:27:02 · 4651 阅读 · 0 评论 -
MongoDB中并发控制(MVCC)
每当有新的数据写入, 首先是写入内存的缓存, 以及WAL log, 每隔一定的时间60秒或者WAL log文件达到一定的大小, 比如2G, 进行一次checkpoint, 结合checkpoint与WAL log可以做到在意外出现故障的时候, 快速的回复内存状态。cursorCacheevictreconcileblock managerWAL log...原创 2019-06-09 15:51:37 · 3979 阅读 · 0 评论