tikv/tikv

GitHub: tikv/tikv

TiKV 是一个由 Rust 编写、基于 Raft 协议的分布式事务型 KV 数据库,为大规模数据存储提供 ACID 事务保证和水平扩展能力。

Stars: 16564 | Forks: 2248

tikv_logo ## [官网](https://tikv.org) | [文档](https://tikv.org/docs/latest/concepts/overview/) | [社区交流](https://slack.tidb.io/invite?team=tikv-wg&channel=general) [![Build Status](https://ci.pingcap.net/buildStatus/icon?job=tikv_ghpr_build_master)](https://ci.pingcap.net/blue/organizations/jenkins/tikv_ghpr_build_master/activity) [![Coverage Status](https://codecov.io/gh/tikv/tikv/branch/master/graph/badge.svg)](https://codecov.io/gh/tikv/tikv) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/2574/badge)](https://bestpractices.coreinfrastructure.org/projects/2574) TiKV 是一个开源的、分布式的、支持事务的 Key-Value 数据库。与其他传统的 NoSQL 系统不同,TiKV 不仅提供经典的 Key-Value API,还提供符合 ACID 的事务 API。TiKV 由 Rust 编写并由 Raft 驱动,最初由 [PingCAP](https://en.pingcap.com) 创建,旨在 complement [TiDB](https://github.com/pingcap/tidb) —— 一个兼容 MySQL 协议的分布式 HTAP 数据库。 TiKV 的设计("Ti" 代表钛)灵感来自于 Google 的一些优秀分布式系统,如 BigTable、Spanner 和 Percolator,以及近年来学术界的一些最新成果,如 Raft 共识算法。 ![cncf_logo](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/545a12d20e135153.png) ![cncf_logo](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/6ff1062e22135155.png) TiKV 是 [云原生计算基金会](https://cncf.io/) (CNCF) 的毕业项目。如果您是一个希望帮助塑造容器化、动态调度和面向微服务技术演进的组织,请考虑加入 CNCF。关于参与者和 TiKV 所扮演角色的详细信息,请阅读 CNCF 的 [公告](https://www.cncf.io/announcements/2020/09/02/cloud-native-computing-foundation-announces-tikv-graduation/)。 凭借 Rust 实现的 Raft 共识算法以及存储在 RocksDB 中的共识状态,TiKV 保证了数据一致性。[Placement Driver (PD)](https://github.com/pingcap/pd/) 的引入是为了实现自动 Sharding,支持自动数据迁移。事务模型类似于 Google 的 Percolator,并进行了一些性能改进。TiKV 还提供了快照隔离 (SI)、带锁的快照隔离 (SQL: `SELECT ... FOR UPDATE`),以及分布式事务中的外部一致性读写。 TiKV 具有以下主要特性: - **异地复制** TiKV 使用 [Raft](http://raft.github.io/) 和 Placement Driver 支持异地复制。 - **水平扩展** 凭借 PD 和精心设计的 Raft 组,TiKV 在水平扩展性方面表现出色,可以轻松扩展到 100+ TB 的数据。 - **一致的分布式事务** 与 Google 的 Spanner 类似,TiKV 支持外部一致的分布式事务。 - **协处理器支持** 与 HBase 类似,TiKV 实现了协处理器框架以支持分布式计算。 - **与 [TiDB](https://github.com/pingcap/tidb) 协作** 得益于内部优化,TiKV 和 TiDB 可以协同工作,成为一个极具吸引力的数据库解决方案,具备高水平的扩展性、外部一致的事务、对 RDBMS 的支持以及 NoSQL 设计模式。 ## 治理 参见 [治理](https://github.com/tikv/community/blob/master/GOVERNANCE.md)。 ## 文档 有关 TiKV 的部署、配置和维护的说明,请参阅我们 [网站](https://tikv.org/docs/4.0/tasks/introduction/) 上的 TiKV 文档。有关 TiKV 背后的概念和设计的更多详细信息,请参阅 [Deep Dive TiKV](https://tikv.org/deep-dive/introduction/)。 ## TiKV 用户 您可以查看 [TiKV 用户](https://tikv.org/adopters/) 列表。 ## TiKV 软件栈 ![The TiKV software stack](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/3030a4ef2c135156.png) - **Placement Driver:** PD 是 TiKV 的集群管理器,它会定期检查复制约束以自动平衡负载和数据。 - **Store:** 每个 Store 内部都有一个 RocksDB,它将数据存储在本地磁盘上。 - **Region:** Region 是 Key-Value 数据移动的基本单位。每个 Region 被复制到多个节点。这些多个副本形成一个 Raft 组。 - **Node:** 集群中的一个物理节点。在每个节点内部,有一个或多个 Store。在每个 Store 内部,有许多 Region。 当节点启动时,节点、Store 和 Region 的元数据会被记录到 PD 中。每个 Region 和 Store 的状态会定期上报给 PD。 ## 快速开始 ### 使用 TiUP 部署 Playground 通过 TiDB 组件管理器 TiUP 尝试 TiKV 和 TiDB 是最快捷的方式。 您可以查看 [此页面](https://docs.pingcap.com/tidb/stable/quick-start-with-tidb#deploy-a-local-test-environment-using-tiup-playground) 获取分步教程。 ### 使用二进制文件部署 Playground TiKV 可以与 PD 分开运行,这是所需的最小部署。 1. 下载并解压二进制文件。 ``` $ export TIKV_VERSION=v7.5.0 $ export GOOS=darwin # only {darwin, linux} are supported $ export GOARCH=amd64 # only {amd64, arm64} are supported $ curl -O https://tiup-mirrors.pingcap.com/tikv-$TIKV_VERSION-$GOOS-$GOARCH.tar.gz $ curl -O https://tiup-mirrors.pingcap.com/pd-$TIKV_VERSION-$GOOS-$GOARCH.tar.gz $ tar -xzf tikv-$TIKV_VERSION-$GOOS-$GOARCH.tar.gz $ tar -xzf pd-$TIKV_VERSION-$GOOS-$GOARCH.tar.gz ``` 2. 启动 PD 实例。 ``` $ ./pd-server --name=pd --data-dir=/tmp/pd/data --client-urls="http://127.0.0.1:2379" --peer-urls="http://127.0.0.1:2380" --initial-cluster="pd=http://127.0.0.1:2380" --log-file=/tmp/pd/log/pd.log ``` 3. 启动 TiKV 实例。 ``` $ ./tikv-server --pd-endpoints="127.0.0.1:2379" --addr="127.0.0.1:20160" --data-dir=/tmp/tikv/data --log-file=/tmp/tikv/log/tikv.log ``` 4. 安装 TiKV Client(Python) 并验证部署,需要 Python 3.5+。 ``` $ pip3 install -i https://test.pypi.org/simple/ tikv-client ``` ``` from tikv_client import RawClient client = RawClient.connect(["127.0.0.1:2379"]) client.put(b'foo', b'bar') print(client.get(b'foo')) # b'bar' client.put(b'foo', b'baz') print(client.get(b'foo')) # b'baz' ``` ### 使用 Docker Compose 部署集群 运行完整的 TiKV 集群(3 个 PD + 3 个 TiKV 节点)用于开发和测试的最简单方法是使用 Docker Compose。该设置使用 Docker Hub 上预构建的 TiKV 和 PD nightly 镜像,因此无需构建。 1. 启动集群: ``` $ docker-compose up -d # 在 macOS 上,使用:docker compose up -d ``` 2. 检查集群状态: ``` $ docker-compose ps # 在 macOS 上,使用:docker compose ps ``` 3. 访问集群: - PD endpoints: `127.0.0.1:23791`, `127.0.0.1:23792`, `127.0.0.1:23793` - TiKV status: `http://localhost:20181/status`, `http://localhost:20182/status`, `http://localhost:20183/status` 更多详细信息,请参见 [docker-compose.README.md](./docker-compose.README.md)。 ### 使用 TiUP 部署集群 您可以查看 @c4pt0r 提供的类似生产环境集群部署的 [手册](./doc/deploy.md)。 ### 从源码构建 参见 [CONTRIBUTING.md](./CONTRIBUTING.md)。 ## 客户端驱动 - [Go](https://github.com/tikv/client-go)(最稳定且使用最广泛) - [Java](https://github.com/tikv/client-java) - [Rust](https://github.com/tikv/client-rust) - [C](https://github.com/tikv/client-c) 如果您想尝试 Go 客户端,请参见 [Go Client](https://tikv.org/docs/4.0/reference/clients/go/)。 ## 安全 ### 安全审计 第三方安全审计由 Cure53 执行。请在此处查看 [完整报告](./security/Security-Audit.pdf)。 ### 报告安全漏洞 要报告安全漏洞,请发送电子邮件至 [TiKV-security](mailto:tikv-security@lists.cncf.io) 组。 关于 TiKV 项目遵循的流程和策略,请参见 [安全](SECURITY.md)。 ## 交流 TiKV 社区内的交流遵守 [TiKV 行为准则](./CODE_OF_CONDUCT.md)。以下是一段摘录: ### 社交媒体 - [Twitter](https://twitter.com/tikvproject) - [博客](https://tikv.org/blog/) - [Reddit](https://www.reddit.com/r/TiKV) - 在 [Stack Overflow](https://stackoverflow.com/questions/tagged/tikv) 上提问或帮助回答问题 ### Slack 加入 [Slack](https://slack.tidb.io/invite?team=tikv-wg&channel=general) 上的 TiKV 社区 - 注册并加入您感兴趣的 TiKV 主题频道。 ## 许可证 TiKV 采用 Apache 2.0 许可证。有关详细信息,请参见 [LICENSE](./LICENSE) 文件。 ## 致谢 - 感谢 [etcd](https://github.com/coreos/etcd) 提供了一些优秀的开源工具。 - 感谢 [RocksDB](https://github.com/facebook/rocksdb) 提供的强大存储引擎。 - 感谢 [rust-clippy](https://github.com/rust-lang/rust-clippy)。我们热爱这个伟大的项目。
标签:ACID事务, BigTable, CNCF, DNS解析, HTAP, KV数据库, Percolator, PingCAP, Python工具, Raft一致性算法, Rust编程语言, TiDB, TiKV, web渗透, 便携式工具, 分布式事务, 分布式数据库, 可视化界面, 大数据, 存储引擎, 开源项目, 目录扫描, 自定义请求头, 谷歌Spanner, 通知系统, 键值存储