A map that guides what and how contributors can contribute

September 17, 2021 ยท View on GitHub

Table of Contents

TiDB is an open-source distributed HTAP database compatible with the MySQL protocol

Contribution tutorial:

ModuleDescriptionCode DirectoryRequired SkillsLearning MaterialsSource Reading
ParserA Yacc generated parser that is highly compatible with MySQL syntax.parserGolang, Yacc
  • Bison manual
  • Compilers: Principles, Techniques, and Tools
  • TiDB SQL Parser Implementation(CN)
    DDLThis module is used to realize that when different TiDBs in a cluster transition to the new schema, all TiDBs can access and update all data online.ddlGolang
  • Online, Asynchronous Schema Change in F1
  • Deep analysis of Google F1's schema change algorithm(CN)
  • TiDB DDL architecture
  • TiDB DDL Implementation(CN)
    MySQL Protocolserver
    TransactionA transaction symbolizes a unit of work performed within TiDB. The transaction module in TiDB plays the role of coordinator of distributed transactions.
  • session
  • kv
  • tikv/client-go
  • Golang, ACID, 2PC, Percolator transaction model
  • A Critique of ANSI SQL Isolation Levels
  • The Art of Database Transaction Processing: Transaction Management and Concurrency Control (Database Technology Series)(Chinese Edition)
  • Two-phase commit protocol
  • Large-scale Incremental Processing Using Distributed Transactions and Notifications
  • Two phase committer(CN)
    PlannerplannerGolang
    Executor
  • executor
  • expression
  • chunk
  • tikv/client-go
  • Golang, Relational Algebra, Parallel ProgrammingCMU: Advanced DB System - Query Execution
  • Introduction to Chunk and Execution Framework(CN)
  • TiDB Hash Join(CN)
  • Index Lookup Join(CN)
  • Hash Aggregation(CN)
  • TiKV, distributed transactional key-value database

    Contribution tutorial:

    ModuleDescriptionCode DirectoryRequired SkillsLearning MaterialsSource ReadingWhat I can Contribute
    UtilUtilities like thread-pool, logger, encoding and decoding, etc.
  • Utilities
  • Pipeline batch system
  • Rust
  • Rust book
  • Practical networked applications in Rust
  • Protocol buffers
  • gRPC concepts
  • Service layer(CN)
    NetworkNetwork layerServerRust, Protobuf, gRPCDitto
    Raw KV API
  • API entrance
  • Storage struct
  • RustDitto
    Transaction KV API
  • API entrance
  • Transaction
  • GC worker
  • Pessimistic transaction
  • Rust, 2PC, Percolator transaction model
  • Two Phase Commit
  • Percolator paper
  • Storage Layer(CN)
  • Distributed transaction(CN)
  • MVCC read(CN)
  • Multi-raftRaftstoreRust, Raft
  • Raft paper
  • Raft implementation in etcd
  • Raftstore overview(CN)
  • Engine
  • Engine traits
  • Engine rocks
  • Rust, RocksDBEngine abstraction
    Coprocessor
  • TiDB query aggr
  • TiDB query codegen
  • TiDB query common
  • TiDB query executors
  • TiDB query expr
  • TiDB query datatype
  • Rust
  • Coprocessor Overview(CN)
  • Coprocessor Executor(CN)
  • Coprocessor Issues
    BackupBackup

    PD Placement driver for TiKV

    ModuleDescriptionCode DirectoryRequired SkillsLearning MaterialsWhat I can Contribute
    APIHTTP interfaces for interacting with PD serverAPIGolang
  • Golang http lib
  • Golang Mux
  • OpenAPI Specification
    TSOCentralized timestamp allocationTSOGolang, etcd
  • Lamport timestamps
  • etcd clientv3
  • Optimize the performance
    CoreBasic facilitiesCoreGolangPD best practice(CN)Improve hotspot recognition; adaptive Scheduling; scheduling according to region histogram
    StatisticsStatistics which the scheduling relies onStatisticsGolangDittoDitto
    SchedulerControllers of schedulingSchedulersGolangDittoDitto
    ScheduleComponents related to scheduling like selector, filter, etc.ScheduleGolangDittoDitto

    TiKV Clients

    ModuleRequired SkillsLearning MaterialsWhat I can Contribute
    Rust ClientRust, TiKV concepts, Transaction model
  • TiKV documentation
  • Rust book
  • Practical networked applications in Rust
  • Percolator paper
  • Issues
    Go ClientGolang, TiKV concepts, Transaction modelDittoIssues
    Java ClientJava, TiKV concepts, Transaction modelDittoIssues
    Python ClientPython, TiKV concepts, Transaction modelDittoIssues

    Libraries depended by TiKV

    ModuleDescriptionCode DirectoryRequired SkillsLearning MaterialsSource ReadingWhat I can Contribute
    grpc-rsThe gRPC library for Rust built on C Core library and futuresgrpc c bindings, grpc rust wrapperC++, Rust
  • grpc introduction
  • Rust bindgen
  • Rust async book
  • gRPC server Initialization(CN)
  • grpc-rs Implementation(CN)
  • Load balance; reflection; custom metadata; migrate to async/await
    fail-rsA fail point implementation for Rust.RustFreeBSD's failpointsIntroduction for fail-rs(CN)
    raft-rsRaft distributed consensus algorithm implemented in RustRust, Raft
  • Raft paper
  • Raft implementation in etcd
  • rust-prometheusPrometheus instrumentation library for Rust applicationsRust
  • Prometheus doc
  • Prometheus Go client
  • rust-prometheus basic
  • rust-prometheus advance
  • rust-rocksdbRust wrapper for RocksDBRust, C++, RocksDB
  • Rust ffi
  • Rust bindgen
  • RocksDB wiki
  • Migrate bindgen to C++
    TitanA RocksDB plugin for key-value separationC++, LSM-tree, RocksDB
  • Titan storage design and implementation
  • WiscKey: Separating Keys from Values in SSD-conscious Storage
  • Ecosystem Tools: DM Data Migration Platform

    ModuleDescriptionCode DirectoryRequired SkillsLearning MaterialsWhat I can ContributeContributing Tutorials
    DM-masterThe component for managing and scheduling the operation of data replication taskdm-masterGolang, etcd, gRPC, ProtobufDM overview, source code reading: DM(CN)Issues
    DM-workerThe component for executing specific data replication tasksdm-workerGolang, etcd, gRPC, ProtobufDittoDitto
    dmctlA command line tool used to control the DM clusterdm-ctlGolang, gRPC, ProtobufDittoDitto
    Dump unitThe processing unit for exporting SQL data from MySQLmydumperGolang, MySQLDittoDitto
    Import/Load unitThe processing unit for importing SQL data into TiDBloaderGolang, MySQLDittoDitto
    Relay unitThe processing unit for dumping binlog data from MySQLrelayGolang, MySQLDittoDitto
    Binlog replication/sync unitThe processing unit for replicating binlog data into TiDBsyncerGolang, MySQLDittoDitto
    Checker unitThe processing unit for checking restrictions of the replicationcheckerGolang, MySQLDittoDitto
    DM-portalA web-based application for managing data migration task configurationportalGolang, MySQL, FrontendDittoDitto
    DM-ansibleThe ansible playbook for DMdm-ansibleDM, AnsibleDittoDitto
    DM-tracerA DM-specific tracer frameworkdm-tracerGolang, gRPC, ProtobufDittoDitto

    Ecosystem Tools - Binlog : A tool used to collect and merge tidb's binlog for real-time data backup and synchronization

    ModuleDescriptionCode DirectoryRequired SkillsLearning MaterialsWhat I can ContributeContributing Tutorials
    Pump ClientSend Binlog to the appropriate Pump on TiDBpump_client, binloginfoGolang, gRPC, etcdTiDB Binlog overview, TiDB source code reading: Binlog(CN)Help Wanted Issues
    PumpReceive and store Binlogs, sorted by commitTSpumpGolang, LevelDB, etcd, gRPCDittoDitto
    DrainerPull Binlog from Pump, do merge and sort, and then sync to downstreamdrainerGolang, Mysql, Kafka, gRPCDittoDitto

    Ecosystem Tools - Lightning: A high-speed data import tool for TiDB

    ModuleDescriptionCode DirectoryRequired SkillsLearning MaterialsWhat I can ContributeContributing Tutorials
    Web Interfaceweb
    CSV and SQL Parsermydump
    Delivery backend (output as SQL or as KV pairs)backend
    Checkpointscheckpoints
    Configurationconfig
    Logginglog
    Metricsmetric
    Workers (concurrency control)worker
    Restore Driverrestore
    Utilitiescommon
    Importerimport

    Ecosystem Tools - BR: A command-line tool for distributed backup and restoration of the TiDB cluster data

    ModuleDescriptionCode DirectoryRequired SkillsLearning MaterialsWhat I can ContributeContributing Tutorials
    BackupBackup data in cluster which has 3 mode: backup full cluster, backup specified DB and backup specified Tablebr/backup, tikv/backupgRPC, golang, rustbackup-principle
    RestoreRestore data to new cluster after backup, relatively can restore full cluster, restore specified DB and restore specified Table.br/restore, tikv/sst_importergRPC, golang, rustrestoration-principle

    TiDB on K8S/Docker : Creates and manages TiDB clusters running in Kubernetes

    ModuleDescriptionCode DirectoryRequired SkillsLearning MaterialsWhat I can ContributeContributing Tutorials
    TiDB OperatorTiDB Operator manages TiDB clusters on Kubernetes and automates tasks related to operating a TiDB cluster. It makes TiDB a truly cloud-native database.tidb-operatorGolang, Kubernetes, TiDBhow to use tidb-operator, Kubernetes Concepts, Kubernetes client-go SDK, Kubernetes Operator Pattern, TiDB Architecture, Helm, TerraformHelp Wanted IssuesContributing Guide
    Advanced StatefulSetThis is an Advanced StatefulSet CRD implementation based on official StatefulSet in Kubernetes. In addition to the official StatefulSet, it can scale the set in an arbitrary way.advanced-statefulsetGolang, KubernetesKubernetes Concepts, Kubernetes StatefulSet, Kubernetes StatefulSet Implementations, PingCAP StatefulSet Implementations
    TiDB Docker ComposeDocker compose files for TiDB. With it, you can quickly deploy a TiDB testing cluster with a single command.tidb-docker-composeDocker, Docker Composehow to start tidb with tidb-docker-compose, docker get started, docker compose

    Deployment Tools - tidb-ansible: A TiDB cluster deployment tool based on Ansible playbook.

    ModuleDescriptionCode DirectoryRequired SkillsLearning MaterialsWhat I can ContributeContributing Tutorials
    tidb ansibleTiDB deployment operation and maintenance toolsAnsible, Python, Jinja2, ShellHow to deploy TiDB cluster through tidb-ansible, Ansible docs(en) and docs(cn)

    Chaos-Mesh: A Chaos Engineering Platform for Kubernetes

    ModuleDescriptionCode DirectoryRequired SkillsLearning MaterialsWhat I can ContributeContributing Tutorials
    chaos-meshgo, kubenetes

    Documentation

    ProjectRequired SkillsLearning MaterialsWhat I can ContributeContributing Tutorials
    Documentation(EN)Sharp eyes, Good English writing, Technical writing or communication, Translation from English to Chinese, Knowledge about TiDBCommit Message and Pull Request Style, Code Comment StyleFix typos or format (punctuation, space, indentation, code block, etc.); Fix or update inappropriate or outdated descriptions; Add missing content (sentence, paragraph, or a new document); Translate docs changes from English to Chinese; Submit, reply to, and resolve issues; (Advanced) Review Pull Requestsdocs readme, docs contribution guide
    Documentation(CN)Sharp eyes, Good English writing, Technical writing or communication, Translation from English to Chinese, Knowledge about TiDBChinese documentation style guide and template, Commit Message and Pull Request Style, Code Comment StyleIbid, except for translating document changes from Chinese to Englishdocs-cn readme, docs-cn contribution guide

    TiDB User Group(CN)

    Required SkillsLearning MaterialsWhat I can ContributeContributing Tutorials
    Anyone of ansible, linux, DM, Binlog, lightning, pd, tidb, tikv, grafana, prometheus. Any experience in using RDBMS like MySQL or other RDBMS.TiDB DBA coursesHelp other TiDB users by answering questions in AskTUG; Publish practice articles of using TiDB or other databases; Giving presentations at TUG activities to share experience with TiDB; Involving in the organization/management of TUG (TiDB User Group) to expand the user base of TiDBJoin TUG

    PingCAP University(CN)

    Required SkillsLearning MaterialsWhat I can ContributeContributing Tutorials
    TiDB DBA Course Design; TiDB Contributor Course Design; Sharing notes on TiDB; Become an administrator of the Wechat (online) group of learning; Joining the group to make subtitles for the video courses or translate them; Helping answer questions on TiDB; Notes, subtitles, translation, FAQJoin PU

    TiDB Developer Group

    ChannelDescription
    TiDB Internals ForumThis is the hub for discussing everything related to the implementation and design of TiDB, TiKV and other TiDB ecosystem projects.
    TiDB Slack ChannelThe official Slack channel of the TiDB community.
    TiKV Slack ChannelThe official Slack channel of the TiKV community.
    Documentation Slack ChannelThe official Slack channel of the TiDB Documentation community.