leveldb线程模型和并发控制
leveldb前台可并发读,但只能串行写。
leveldb memtable通过无锁skiplist结构 支持读写并发
leveldb的后台线程只有一个,只处理compaction这一个任务, leveldb的minor compaction和major compaction是一起处理的
leveldb前台可并发读,但只能串行写。
leveldb memtable通过无锁skiplist结构 支持读写并发
leveldb的后台线程只有一个,只处理compaction这一个任务, leveldb的minor compaction和major compaction是一起处理的
redis 通过网络服务接收远程命令,进行处理,将执行结果返回。
redis的rdb和aof 都是经典的数据持久化/备份手段,rdb关注数据库的数据, aof关注数据库的操作。
redis 是最值得学习的开源项目,
本文阐释redis数据结构,redis 数据结构设计的一大特点是节省内存。原因是redis作为内存数据库需要节省内存使用(连续内存的数组能减少内存碎片)。这对架构设计同样有借鉴意义,通过节省元数据内存使用来把更多元数据/索引放在内存上,可以大大提高处理的吞吐和延迟。
分布式存储底座包括分布式文件系统和分布式一致性KV存储。对外满足的条件 1. 提供数据可靠性,底座之上不需要担心数据损坏 2. 提供数据可用性,节点崩溃不影响数据读写 3. 集群级接口,多机节点可访问
写完了代码第一件事是编译,编译失败只能根据编译器通知修改代码;编译通过了第二件事是跑UT,UT不过需要进行调试。调试包括debug和release包的调试,线上进程的运行问题有时候也需要调试,调试的主要方式是调试工具和日志(包括print大法)。为了发现问题,有时候还需要添加报警日志。
提高代码的健壮性,编译器、静态检查和格式化工具、调试、单元测试、日志等是开发必不可少的
缓存存放的是临时数据,相比主存,缓存往往速度更快,容量更小。
缓存往往是多级的,由内而外,cpu cache -> 内存 -> ssd -> hdd(单机) -> 服务器/多节点/oss/nas等
只要有缓存就会有一致性问题