CloudNativeEra
  • Introduction
  • 名词解释
  • Computer Science
    • Computer Organization
      • CPU
      • 二进制、电路、加法器、乘法器
      • 编译、链接、装载
      • 存储器
      • IO
    • Operating System
      • 操作系统基础知识
      • 系统初始化
      • 进程管理
      • Everything about Memory
      • 文件系统
      • 并行编程
      • Linux
        • CPU
        • IO 多路复用
        • DMA IO and Linux Zero Copy
    • Computer Network
      • 网络相关命令
      • 评估系统的网络性能
      • 网络抓包
      • Linux 最多支撑的 TCP 连接
      • 网络虚拟化
      • DHCP 工作原理
    • Data Structure and Algorithm
      • 题目列表
      • Summarize
        • 方法总结
        • 二分思想
        • 树的演化
        • 算法思想总结
      • Data Structure
        • Data Struct - Array
        • Tree
        • Heap
        • Hash
        • 字符串
      • Algorithm
        • Sorting Algorithm
        • 查找
        • 贪心算法
        • 动态规划
        • 位运算
      • Practice Topics
        • Data Struct in SDK
        • Topic - Tree
        • Topic - Graph
        • Topic - 滑动窗口
        • 剑指 Offer 题解
    • 并发编程
      • 并发模式
      • 并发模型
  • 系统设计
    • 软件设计
      • 软件架构
      • 编程范式
      • 系统设计题
      • 设计原则
      • 计算机程序的构造和解释 SICP
    • 领域驱动设计
      • 应用:在线请假考勤管理
      • 应用: library
    • 微服务与云原生
      • Designing and deploying microservices
      • 容器技术
      • Docker
      • Etcd
      • Kubernetes
        • Kubernetes - Mapping External Services
      • Istio
      • 监控
    • 分布式系统
      • 分布式理论
      • 分布式事务
    • 后端存储设计
      • 缓存设计
      • 数据库架构设计
    • CI/CD
    • 设计最佳实践
    • 测试
    • 安全
    • 综合
      • 开发实践
      • 分布式锁
      • 分布式计数服务
      • 弹幕系统设计
      • 消息队列设计
      • 分布式ID生成算法
      • 限流设计
      • 网关设计
      • 通用的幂等设计
      • 分布式任务调度
        • Timer
        • ScheduledExecutorService
        • Spring Task
        • Quartz
      • 交易系统
      • 权限设计
  • 编程语言
    • 编程语言
    • C & C++
    • Java
      • JVM
        • JVM Bytecode
      • Java 核心技术
      • Java 8 新特性
      • Java 集合框架
      • Java NIO
      • 并发编程
        • 线程生命周期与线程中断
        • 三个线程交替打印
        • 两个线程交替打印奇偶
        • 优雅终止线程
        • 等待通知机制
        • 万能钥匙:管程
        • 限流器
        • 无锁方案 CAS
    • Java 源码阅读
      • Unsafe
      • 异步计算 Future
      • Java Queue
      • CoalescingRingBuffer 分析
      • Java Collections
        • PriorityQueue 分析
        • HashMap 分析
        • TreeMap
    • Golang
    • Python
  • 框架/组件/类库
    • Guava
      • Guava Cache
      • Guava EventBus
    • RxJava
    • Apache MINA
    • Netty
      • 网络 IO 模型
      • Netty 生产问题
    • Apache Tomcat
    • MyBatis
    • 限流框架
    • Spring Framework
      • Spring Core
      • Spring 事务管理
    • Spring Boot
    • Spring Cloud
      • Feign & OpenFeign
      • Ribbon
      • Eurake
      • Spring Cloud Config
    • FixJ
    • Metrics
    • Vert.x
  • 中间件
    • Redis
      • Redis 基础
        • Redis 数据结构设计与实现
        • Redis 高性能网络模型
      • Redis checklist
      • 应用案例 - Redis 数据结构
      • 应用案例 - Redis 缓存应用
      • 应用案例 - Redis 集群
      • Redis 客户端
      • Redis 生产案例
        • [译] 在 Redis 中存储数亿个简单键值对
    • MySQL
      • MySQL 基础
      • MySQL Index
      • MySQL Transaction
      • MySQL 优化
      • MySQL 内核
      • MySQL Command
      • MySQL Checklist
      • MySQL Analysis Tool
      • 实现 MySQL
    • State Machine
    • 数据库连接池
    • MQ
      • 高性能内存队列 Disruptor
      • Kafka
      • Pulsar
      • RocketMQ
        • Broker 的设计与实现
      • NSQ
  • 实际案例
    • 线上 Case
      • Request Aborted
      • MySQL - Specified key was too long
      • Java 应用 CPU 100% 排查优化
      • 频繁 GC 导致的 Java 服务不响应
      • 导出优化
  • 大数据
    • 流计算
    • Flink
  • 其他
    • 工具
    • 读书
      • 设计数据密集型应用
      • 实现领域驱动设计
      • 精通比特币
      • 提问的智慧
    • 论文
    • 工程博客
    • 阅读源码
    • 面试
      • 如何在最短的时间里对对方有个全面的了解
    • 分享
    • 软技能
    • Todo
  • Blog
    • #算法
      • 查找
      • 位运算
      • 树
    • #架构
      • 1- 通信
    • Design & Dev & Opt
      • High Performance Data structure Design
  • Tiny Project
    • A Simple WeChat-like Instant Messaging Platform
由 GitBook 提供支持
在本页
  • 如何阅读论文
  • Paper list

这有帮助吗?

  1. 其他

论文

经典论文汇总,跟踪阅读进度

上一页提问的智慧下一页工程博客

最后更新于5年前

这有帮助吗?

在计算机领域有非常多的好论文可以阅读,能学习到很多东西。

如何阅读论文

Paper list

  • 一篇总结性文章,涵盖了大数据领域的几乎所有关键技术。

KVS Papers

  • Bitcask

Bitcask 是一个日志型结构的 Hash 表实现,可以快速访问 Key/Value 数据,可以根据 Bitcask 论文中的设计思路来实现一个 Key/Value 存储引擎。

Bitcask 的设计初衷是为了在 Riak 分布式数据库中使用的,作为一个插件集成到 Riak;Bitcask 被设计成为一个单机版的存储引擎,可以方便的和其他系统做集成。Riak 可以支持很多 Backend Storage Engine, 如 Bitcask/leveldb etc.

同时,Bitcask设计初衷意在解决小文件存储的效率低下问题,而小文件存储效率低下的原因除了文件随机IO较多外,还容易由于数量的暴涨而导致元数据(dentry/inode)开销的增大,直接影响读写效率。为了解决该问题,文件被以日志方式追加至大文件中,大大减少文件系统元数据开销。同时Bitcask管理自身文件索引:维护文件key至在磁盘文件位置及文件内偏移

虽然 BigTable 不是一个单纯的 KVS,但是它实现了一个类似于 LevelDB 的存储引擎,阐述了 SSTable 的设计,非常值得借鉴,也是搞懂 SSTable 的入门文章。

Leveldb 实现的关键点是: 1. MemTable,来支持高效的随机写入 2. WAL,预写日志来解决突发问题,比如突然断电、服务进程异常退出等,容易做崩溃恢复 3. MemTable + SSTable index + Bloom Filters + SSTable File,来支持高效的随机读取 4. Merge + Compression,来达到空间收缩 5. Sorted String Table,来支持区间查找,可以前向和后向遍历 6. 操作接口简单易用

LSM Tree 论文是 96 年一帮人写的,很长,读起来有点费劲。

Log-Structured Merge Tree, 一般理解上应该是一种算法设计思想,描述了如何解决大数据下的快速随机读写访问;首先设计之初就考虑借助磁盘顺序读写的高性能(相比于磁盘的随机读写,几个数量及上的差距,不管是SSD还是普通磁盘),利用这个优势;然后解决快速读写的问题,高效写入借助内存表memTable, 将最近写入的热数据放在内存中,只写内存,为了应对突发状况使用 WAL,内存表是有序的,一般可以使用 SkipList 实现,然后通过两次 Compacation 将内存中的数据 flush 到磁盘中,形成一个个的 SSTable 文件,Compacation 的操作是在满足特定条件后触发在后台默默完成的;最后就是高效读操作,每个 SSTable 文件都会有一个常驻内存的索引,使用索引来快速定位数据,当然为了应对性能下降,引入了布隆过滤器,可以提升一定的读性能。这就是 LSM 的基本思想。

原理相对来讲比较简单,但是要实现一个这样的存储引擎并非容易的事情。目前使用 LSM Tree 的设计思想实现的数据存储有: Bigtable, HBase, LevelDB, MongoDB, SQLite4, Tarantool, RocksDB, WiredTiger, Apache Cassandra, and InfluxDB

  • RocksDB

RocksDB 是一个基于 LevelDB 开发的内嵌数据库引擎,可以快速读写访问。

  1. CockroachDB

  2. Cassandra

File System

Bitcask 的强项看

Bitcask 的弱点看, 另外 Bitcask 还不支持范围查询,也是一个弱点

是Bitcask的一些具体实现上的配置和考量,非常值得看;包括:Bitcask 的路径配置,打开超时处理,同步策略,

日志型 Key/Value Store 的存储引擎比较重要的是合并策略,Riak 中可以设置的 Bitcask 的合并策略看:, , , ,

调优Bitcask,

基于 Bitcask 设计的实现有: ,

Leveldb 是一个由 Google 推出的 kvs 存储引擎,它提供了一个按 key 排序的 kvs,并且支持任意的字节数组的 key 和 value。Leveldb 要解决 PB 级数据大小的快速随机访问:。

这个总结非常好,

论文太难,入门开,英文版的出处在

然后就是 ,

郑老师写了几篇文章对 LSM Tree 做了分析: 1. 2. 3.

里有丰富的资源。

Go 语言实现

膜拜一下

Very great!

How to Read an Academic Article
Should I read paper
Advice on reading academic papers
How to read and understand a scientific paper: a guide for non-scientists
The Refreshingly Rewarding Realm of Research Papers
Best Paper Awards in Computer Science (since 1996)
Facebook 的论文
Distributed Systems Reading Group
125 open source Big Data architecture papers for data professionals.
中文版
分布式存储必读 Paper
大数据存储
Papers we love
The morning paper
usenix best papers
arxiv.org
这里
这里
这里
Merging settings
Merge Policy
Merge triggers
Merge thresholds
Log needs merge
Tuning Bitcask
Bitcask 实现细节
Riak KV
Riak 的 Bitcask backend
Douban beansDB
Google Big Table
Leveldb
怎么解决这个问题
存储引擎技术架构与内幕
LSM Tree
这个
这里
wiki
Leveled Compaction in Apache Cassandra
LSM-tree存储引擎的优化研究成果总结(1)
LSM-tree存储引擎的优化研究成果总结(2) -- 关于索引空间的优化
LSM-tree存储引擎的优化研究成果总结(3) -- 架构的优化
Wiki
RocksDB Github
RocksDB's wiki
获得PCC性能大赛背后的RocksDB引擎:5分钟全面了解其原理
Github
https://www.cockroachlabs.com
设计
中文社区
http://www.cockroachchina.cn/?p=1242
Data Structures and Algorithms for Big Databases
Data Structures and Algorithms for Big Databases 摘要
Amazon Dynamo: Highly Available Key-value Store
A Survey Paper on NoSQL Databases: Key-Value Data Stores and Document Stores
fs_The Google File System