暂无个人介绍
之前读《LSM-based Storage Techniques: A Survey》做的分享,感觉应该还是有点用的,发出来
本文源自阅读了 MongoDB 于 VLDB 19 上发表的 [Tunable Consistency in MongoDB](http://www.vldb.org/pvldb/vol12/p2071-schultz.pdf) 论文之后,在内部所做的分享(分享 PPT 见文末)。现在把分享的内容整理成此文,并且补充了部分在之前的分享中略过的细节,以及在分享中没有提及的 MongoDB Causa
本文源自阅读了 MongoDB 于 VLDB 19 上发表的 [Tunable Consistency in MongoDB](http://www.vldb.org/pvldb/vol12/p2071-schultz.pdf) 论文之后,在内部所做的分享(分享 PPT 见文末)。现在把分享的内容整理成此文,并且补充了部分在之前的分享中略过的细节,以及在分享中没有提及的 MongoDB Causa
在 4.2 及之前的版本中,oplogTruncateAfterPoint 只用于备库,用来保证 oplog batch 应用的原子性,最终目的是确保主备数据的一致性,但是在 4.4 中主库也会维护 oplogTruncateAfterPoint ,本文就来分析一下 4.4 为什么要这么做,以及带来的影响。
对 Oplog Stones 的实现和初始化流程进行了详细的分析,简单分析了 Oplog 回收的逻辑。并对 oplog stones 的启动加载流程进行了优化,对比有数量级提升。
MongoDB 在 3.0 支持新的 WiredTiger 引擎后经过几年的快速奔跑,终于在 4.4 稍作歇息,开始在细节上进行打磨,4.4 发布的新特性很多,下面笔者就针对一些用户关注度比较高的 Feature 进行重点介绍。
分享一下 MongoDB 官方 DBA 认证的一些准备工作和考试注意事项
MongoDB 底层使用了 WiredTiger 存储引擎,WT 使用的块分配策略会产生磁盘碎片,通过理解collStats 和 dbStats 命令中的各种 size,最后我们看下真正的磁盘碎片率怎么计算,是否需要做 compact。
Redis Stream Redis最新的大版本5.0已经RC1了,其中最重要的Feature莫过于Redis Stream了,关于Redis Stream的基本使用介绍和设计理念可以看我之前的一篇文章(Redis Stream简介)。
# 会议议程 [Day 0](https://www.atatech.org/articles/106079)是Training Day,之后的两天就都是正式的会议session了,下面图是Day 1 session day的所有议程。早上会有一个breakfast,之后就是keynotes,主要是redislabs的新特性发布,毕竟是会议举办方嘛,然后是邀请的大客户出来站台,后面会议记录会详细
## 1. 背景 阿里云Redis线上在某些任务流中使用`redis-port`来进行实例之间的数据同步。`redis-port`是一个MIT协议的开源软件,主要原理是从源实例读取RDB快照文件、解析、然后在目标实例上应用灌数据的写命令。为了限制每个进程的最大内存使用,我们使用cgroup来做隔离,最近线上出现redis-port在同步数据时`OOM`的情况,最高内存使用达到了`10G`以上
## 背景 Redis Stream是一个作者已经谋划多年的feature,本质是一个消息队列,但是和kafka、RocketMq等消息中间件相比也有其独特之处。Redis Stream本来是计划放在4.0这个大版本中发布(原计划4.2),但是由于确实是个比较重磅的feature,对内核的改动也比较大,目前已经提升到Redis 5.0发布,根据作者Twitter的消息,不出意外,18年上半年
Redis Stream是5.0即将要发布的一个重磅feature,本文对其做一个简单介绍。
Redis作为目前最流行的键值对存储数据库,有着丰富的数据结构支持,在民生、金融、游戏、直播等诸多领域都有广泛的应用,大大提升了开发者的开发效率。今天我们主要介绍Redis在游戏开发中的几个典型应用场景:用户数据缓存、持久化功能的消息队列、乐观锁功能。
## 背景 Redis的代码质量一直被业内人士称赞,在极高的业务压力下也能有很好的稳定性。但是极端情况下,Redis也是有可能会Crash的。有时候因为种种原因,系统配置问题,磁盘空间写满了,进程权限不够等等,我们可能不会运气那么好,有一个`core`文件可以拿去调试。这个时候,Redis提供了几种异常崩溃情况下的`Crash Report`,很多时候我们基于Crash Report,再加上
本篇文章主要讲下在Redis 3.0中对于近似LRU算法的优化
Redis作为目前最流行的KV内存数据库,也实现了自己的`LRU`(`Latest Recently Used`)算法,在内存写满的时候,依据其进行数据的淘汰。但是,`Redis`为了节省内存使用,和通常的LRU算法实现不太一样,Redis使用了采样的方法来模拟一个`近似LRU`算法。
## 背景 最近有用户报使用PHP客户端`predis`访问阿里云`Redis`(原`KVStore`)时,会出现`connection refused`错误,用户怀疑是因为后端连接数超了,导致连接被拒绝,但是监控看连接数并没有超过阈值,进而怀疑是后端redis的连接数限制逻辑有问题,经过排查发现连接数限制逻辑并没有问题,下面说下具体的排查过程。 ## 排查过程 通常通过`socke
这个情况有多种可能,有可能是因为需要重建索引,所以花的时间比较久,在 4.0 以后也有可能是因为要加载大量的 oplog 导致重启时间比较久,这种情况建议还是通过工单反馈阿里云服务同学,会有后端服务同学尽快处理。
mongodb 本身是支持多线程并发执行请求的,而且使用 WiredTiger 引擎支持文档级粒度的锁,你说的那个报错感觉更像是业务层的报错,具体你可以发下日志看下。
有具体的例子可以看下吗,这个通常不会发生,看下是不是 sort key 写的有问题,或者没有配置正确的 collation(本地方字符集)。
你说的这个 heros 下的 lock 值得是数据库或者 Collection 的加锁情况吗,这个你可以用 mongo shell 执行一下 db.currentOp()命令来看下当前正在执行的命令,以及加锁的情况。
导数据的场景下通常会对数据库产生比较大的压力,不是一个正常的业务压力,你可以看下是不是 WiredTiger 的 Cache 配置的太大,导致机器 OOM 了,也可以在导数据时稍微控制一下导入数据的速度。
给你个例子,
sharding:
autoSplit: true
chunkSize: 64
configDB: xxmgset-197026888/111.81.164.123:9666
建议还是直接使用 MongoDB 官方发布的二进制包,具体看这个链接,讲的清晰明了:https://docs.mongodb.com/manual/installation/
欠费后实例会被锁定,隔离期不会扣费,但是欠费太久,比如一个月,实例会被自动销毁。
MongoDB 有一系列的多语言的官方 Driver支持,其中就包括 python,看这里:https://docs.mongodb.com/ecosystem/drivers/ 。
mongodb 不仅支持事务,而且有很强大的事务能力支持,比如 4.0 及之前的多文档事务,4.2 的分布式事务支持(阿里云 MongoDB 独家),具体给个文档你看下:https://docs.mongodb.com/manual/core/transactions/ 。对应的 java api 也会有支持。
Redis 的有开源的多线程版本,而且数量不少,这里分享一个 KeyDB:https://github.com/JohnSully/KeyDB 。
4.x 版本里面的混合持久化,也只是说在 aof rewrite 的时候生成 rdb format 的 aof,然后在 rdb preamble 后面继续追加 aof 格式 命令,所以归根结底,rdb 还是 rdb,aof 还是 aof,二者没有关联,用混合格式的主要原因是 rdb 支持压缩,空间更小,且生成速度比 aof 格式快。
这个需要逐步分析排查,首先你可以看下 Redis 进程的 CPU 是不是跑满的,如果是那问题出在 Redis 上面,可以通过一些命令,比如 monitor 看下是什么在消耗 cpu,还可以看下 slow log,如果不是,需要看下主机的情况,比如主机是不是网卡跑满了,redis 是不是开启了 aof,主机 io load 太高,等等原因,逐步去缩小问题范围。
Redis 的 GEO 功能,相比于 MongoDB 还是比较弱的,如果是简单的使用场景,比如就计算一下附近的人这种类似需求,而且对 qps 要求高,且数据量不大,可以考虑先使用 Redis。
redis 中的 hash 底层是无序存储的,中间会有 rehash 或者新的数据插入,所以 hkeys 和 hvals 如果是各自单独执行,返回结果大概率不是一一对应,如果要一一对应,请用 hgetall。
这个需要改变访问入口,完全无损的迁移基本上是做不到的,比较好的办法是使用 redis-shake 进行持续的数据同步,在业务低峰期对单机实例进行停写,然后业务切换访问入口到新的集群实例。
这个使用阿里云团队开源的 Redis-shake 可以做到,从云下迁移到云上,或者从自建迁移到阿里云集群,redis-shake 的使用可以看下 github:https://github.com/alibaba/RedisShake
首先使用 redis-cli --bigkeys 分析一下是不是有大 key,然后也可以用 info memory 命令看下是不是碎片率太高了,如果是这样可以考虑在业务低峰期,做个主备切换,滚动重启一下 Redis。
原生的复制协议只能按实例(进程)维度去复制,这个直接 slaveof 是不行的,但是现在有一些开源的工具,比如 redis-port 可以按 db 去 sync,具体可以去 github 上看下。
这个功能Redis 一直是没有的,本质原因是这个和 keys 命令一样,需要遍历整个数据空间,开销非常大,如果真想按 pattern 删除 key,可以考虑写个脚本按 pattern scan,然后删除 key。