add reading list
Signed-off-by: Connor1996 <zbk602423539@gmail.com>
16
README.md
@ -1,11 +1,11 @@
|
||||
# The TinyKV Course
|
||||
|
||||
This is a series of projects on a key-value storage system built with the Raft consensus algorithm. These projects are inspired by the famous [MIT 6.824](http://nil.csail.mit.edu/6.824/2018/index.html) course, but aim to be closer to industry implementations. The whole course is pruned from [TiKV](https://github.com/tikv/tikv) and re-written in Go. After completing this course, you will have the knowledge to implement a basic key-value storage fault-tolerance service with distributed transaction support and a better understanding of TiKV implementation.
|
||||
This is a series of projects on a key-value storage system built with the Raft consensus algorithm. These projects are inspired by the famous [MIT 6.824](http://nil.csail.mit.edu/6.824/2018/index.html) course, but aim to be closer to industry implementations. The whole course is pruned from [TiKV](https://github.com/tikv/tikv) and re-written in Go. After completing this course, you will have the knowledge to implement a horizontal scalable, high available, key-value storage service with distributed transaction support and a better understanding of TiKV implementation.
|
||||
|
||||
The whole project is a skeleton code for a kv server and a scheduler server at initial, and you need to finish the core logic step by step:
|
||||
|
||||
- Project1: build a standalone key-value server
|
||||
- Project2: build a fault tolerant key-value server with Raft
|
||||
- Project2: build a high available key-value server with Raft
|
||||
- Project3: support multi Raft group and balance scheduling on top of Project2
|
||||
- Project4: support distributed transaction on top of Project3
|
||||
|
||||
@ -13,7 +13,9 @@ The whole project is a skeleton code for a kv server and a scheduler server at i
|
||||
|
||||
## Course
|
||||
|
||||
Before starting, you’d better read the overview design of TiKV and PD to get a general impression on what you will build:
|
||||
Here is a [reading list](doc/reading_list.md) for the knowledge of distributed storage system. Though not all of them are highly related with this course, it can help you construct the knowledge system in this field.
|
||||
|
||||
Also, you’d better read the overview design of TiKV and PD to get a general impression on what you will build:
|
||||
|
||||
- TiKV
|
||||
- <https://pingcap.com/blog-cn/tidb-internal-1/> (Chinese Version)
|
||||
@ -50,10 +52,10 @@ The whole project is organized into the following directories:
|
||||
|
||||
Please follow the course material to learn the background knowledge and finish code step by step.
|
||||
|
||||
- [Project1 - StandaloneKV](courses/project1-StandaloneKV.md)
|
||||
- [Project2 - RaftKV](courses/project2-RaftKV.md)
|
||||
- [Project3 - MultiRaftKV](courses/project3-MultiRaftKV.md)
|
||||
- [Project4 - Transaction](courses/project4-Transaction.md)
|
||||
- [Project1 - StandaloneKV](doc/project1-StandaloneKV.md)
|
||||
- [Project2 - RaftKV](doc/project2-RaftKV.md)
|
||||
- [Project3 - MultiRaftKV](doc/project3-MultiRaftKV.md)
|
||||
- [Project4 - Transaction](doc/project4-Transaction.md)
|
||||
|
||||
## Deploy a cluster
|
||||
|
||||
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 186 KiB After Width: | Height: | Size: 186 KiB |
Before Width: | Height: | Size: 175 KiB After Width: | Height: | Size: 175 KiB |
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 103 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
121
doc/reading_list.md
Normal file
@ -0,0 +1,121 @@
|
||||
- Storage Engine
|
||||
- Disk I/O
|
||||
- Flavors of I/O
|
||||
- <https://medium.com/databasss/on-disk-io-part-1-flavours-of-io-8e1ace1de017>
|
||||
- <https://medium.com/databasss/on-disk-io-part-2-more-flavours-of-io-c945db3edb13?>
|
||||
- Amplification and RUM
|
||||
- <http://smalldatum.blogspot.com/2015/11/read-write-space-amplification-pick-2_23.html>
|
||||
- <http://daslab.seas.harvard.edu/rum-conjecture/>
|
||||
- <http://smalldatum.blogspot.com/2019/05/crum-conject>
|
||||
ure-read-write-space-and.html
|
||||
- B-Tree (Optional)
|
||||
- Reading Materials
|
||||
- Database Internals: 2. B-Tree Basics
|
||||
- Database Internals: 3. File Formats
|
||||
- Database Internals: 4. Implementing B-Trees
|
||||
- Reference
|
||||
- <https://www.cs.usfca.edu/~galles/visualization/Algorith>
|
||||
ms.html
|
||||
- <https://github.com/etcd-io/bbolt>
|
||||
- LSM-Tree
|
||||
- Reading Materials
|
||||
- Database Internals: 7. Log-Structured Storage
|
||||
- Reference
|
||||
- <https://github.com/google/leveldb>
|
||||
- <https://github.com/facebook/rocksdb>
|
||||
- <https://github.com/syndtr/goleveldb>
|
||||
- B-Tree vs LSM-tree
|
||||
- <https://tikv.org/docs/deep-dive/key-value-engine/b-tree-vs-lsm/>
|
||||
- LSM-Tree Evolution
|
||||
- Wisckey
|
||||
- <https://www.usenix.org/system/files/conference/fast16/fast16-papers-lu.pdf>
|
||||
- HashKV (Optional)
|
||||
- <https://www.usenix.org/system/files/conference/atc18/atc18-chan.pdf>
|
||||
- Monkey (Optional)
|
||||
- <https://stratos.seas.harvard.edu/files/stratos/files/monkeykeyvaluestore.pdf>
|
||||
- Reference
|
||||
- <https://github.com/dgraph-io/badger>
|
||||
- <https://github.com/tikv/titan>
|
||||
- Serializing & RPC
|
||||
- Protocol Buffer
|
||||
- Reading Materials
|
||||
- <https://developers.google.com/protocol-buffers/docs/overview>
|
||||
- Reference
|
||||
- <https://github.com/dgraph-io/badger>
|
||||
- <https://github.com/protocolbuffers/protobuf>
|
||||
- gRPC
|
||||
- Reading Materials
|
||||
- <https://www.grpc.io/docs/quickstart/go/>
|
||||
- Reference
|
||||
- <https://github.com/grpc/grpc-go>
|
||||
- Data Partitioning
|
||||
- Range vs Hash
|
||||
- <https://tikv.org/docs/deep-dive/scalability/data-sharding/>
|
||||
- Partitioning of DynamoDB (Optional)
|
||||
- <https://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf>
|
||||
- <https://dzone.com/articles/partitioning-behavior-of-dynamodb>
|
||||
- Partitioning of TiKV
|
||||
- <https://pingcap.com/blog/2017-07-11-tidbinternal1/>
|
||||
- Replication & Consistency
|
||||
- Reading Materials
|
||||
- Database Internals: 11. Replication and Consistency
|
||||
- CAP vs PACELE
|
||||
- <http://www.cs.umd.edu/~abadi/papers/abadi-pacelc.pdf>
|
||||
- Clock and Time
|
||||
- <https://dzone.com/articles/tick-or-tock-keeping-time-and-order-in-distributed-1>
|
||||
- Consistency
|
||||
- <https://arxiv.org/pdf/1902.03305.pdf>
|
||||
- Consensus
|
||||
- Quorum
|
||||
- <https://en.wikipedia.org/wiki/Quorum_(distributed_computing)>
|
||||
- Paxos (Optional)
|
||||
- Reading Materials
|
||||
- Database Internals: 14. Consensus @ Paxos
|
||||
- Reference
|
||||
- <https://lamport.azurewebsites.net/pubs/paxos-simple.pdf>
|
||||
- Raft
|
||||
- Reading Materials
|
||||
- Database Internals: 14. Consensus @ Raft
|
||||
- Reference
|
||||
- <https://raft.github.io/>
|
||||
- <https://pdos.csail.mit.edu/6.824/labs/lab-raft.html>
|
||||
- Scale & Balance
|
||||
- Multi-Raft
|
||||
- <https://tikv.org/docs/deep-dive/scalability/multi-raft/>
|
||||
- Split & Merge
|
||||
- <https://pingcap.com/blog/2017-07-20-tidbinternal3/>
|
||||
- Balance
|
||||
- <https://pingcap.com/blog/2017-07-20-tidbinternal3/>
|
||||
- Distributed Transactions
|
||||
- Reading Materials
|
||||
- Database Internals: 5. Transaction Processing and Recovery
|
||||
- Database Internals: 13. Distributed Transactions
|
||||
- ACID
|
||||
- <https://en.wikipedia.org/wiki/ACID>
|
||||
- Isolation (Optional)
|
||||
- <https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr-95-51.pdf>
|
||||
- <https://www.jianshu.com/p/3673e612cce2> (Chinese)
|
||||
- Spanner (Optional)
|
||||
- <https://storage.googleapis.com/pub-tools-public-publication-data/pdf/45855.pdf>
|
||||
- <https://www.jianshu.com/p/f307bd2023f5> (Chinese)
|
||||
- Percolator
|
||||
- <https://tikv.org/docs/deep-dive/distributed-transaction/percolator/>
|
||||
- <https://tikv.org/docs/deep-dive/distributed-transaction/optimized-percolator/>
|
||||
- Coprocessor (Optional)
|
||||
- <https://blogs.apache.org/hbase/entry/coprocessor_introduction>
|
||||
- <https://zhuanlan.zhihu.com/p/89518391> (Chinese)
|
||||
- Benchmark & Testing
|
||||
- sysbench (Optional)
|
||||
- <https://github.com/akopytov/sysbench>
|
||||
- <https://www.percona.com/blog/2019/04/25/creating-custom-sysbench-scripts/>
|
||||
- <https://www.jianshu.com/p/30933e0bebe7> (Chinese)
|
||||
- go-tpc (Optional)
|
||||
- <https://github.com/pingcap/go-tpc>
|
||||
- go-ycsb
|
||||
- <https://github.com/pingcap/go-ycsb>
|
||||
- <https://medium.com/@siddontang/use-go-ycsb-to-benchmarkdifferent-databases-8850f6edb3a7>
|
||||
- <https://www.jianshu.com/p/73d22befe47d> (Chinese)
|
||||
- Chaos
|
||||
- <https://principlesofchaos.org/>
|
||||
- <https://pingcap.com/blog/chaos-practice-in-tidb/>
|
||||
- <https://medium.com/@siddontang/use-chaos-to-test-the-distributed-system-linearizability-4e0e778dfc7d>
|