29 个稳定版本
8.2.0 | 2024年7月11日 |
---|---|
8.0.0 | 2024年3月29日 |
7.6.0 | 2024年1月25日 |
7.5.2 | 2024年6月13日 |
6.5.1 | 2023年3月10日 |
#287 在 数据库接口 中
14,779 星 & 307 关注者
21MB
441K SLoC

网站 | 文档 | 社区聊天
TiKV 是一个开源的、分布式的、事务型的键值数据库。与传统的 NoSQL 系统不同,TiKV 不仅提供经典的键值 API,还提供符合 ACID 规范的事务 API。TiKV 使用 Rust 编写并由 Raft 驱动,最初由 PingCAP 创建,旨在补充 TiDB,这是一个兼容 MySQL 协议的分布式 HTAP 数据库。
TiKV 的设计灵感来源于一些伟大的 Google 分布式系统,如 BigTable、Spanner 和 Percolator,以及近年来学术界的最新成就,如 Raft 一致性算法。
如果您想为 TiKV 做贡献或想从源代码构建它,请参阅 CONTRIBUTING.md。
TiKV 是云原生计算基金会(CNCF)的一个毕业项目。如果您是一家希望帮助塑造容器化、动态调度和微服务导向技术演变的组织,考虑加入 CNCF。有关参与人员和 TiKV 作用的详细信息,请参阅 CNCF 的公告。
通过在 Rust 中实现 Raft 一致性算法并将一致性状态存储在 RocksDB 中,TiKV 保证数据一致性。引入放置驱动器(PD)以实现自动分片,从而实现数据迁移。事务模型类似于 Google 的 Percolator,并有一些性能改进。TiKV 还提供快照隔离(SI)、带锁的快照隔离(SQL:SELECT ... FOR UPDATE
)以及分布式事务中的外部一致读和写。
TiKV 具有以下关键特性
-
地理复制
TiKV 使用 Raft 和放置驱动器来支持地理复制。
-
水平扩展性
通过 PD 和精心设计的 Raft 组,TiKV 在水平扩展性方面表现出色,可以轻松扩展到 100+ TB 的数据。
-
一致分布式事务
与 Google 的 Spanner 类似,TiKV 支持外部一致性的分布式事务。
-
协处理器支持
类似于 HBase,TiKV 实现了一个协处理器框架以支持分布式计算。
-
与 TiDB 合作
由于内部优化,TiKV 和 TiDB 可以协同工作,成为一个具有高水平扩展性、外部一致性事务、支持 RDBMS 和 NoSQL 设计模式的强大数据库解决方案。
治理
请参阅治理。
文档
有关 TiKV 的部署、配置和维护说明,请参阅我们网站上的 TiKV 文档这里。有关 TiKV 背后的概念和设计的更多详细信息,请参阅深入 TiKV。
注意
我们已经将文档从TiKV 的维基页面迁移到了官方网站。原始维基页面已停用。如果您对文档有任何建议或问题,请在这里提供反馈。
TiKV 采用者
您可以看到 TiKV 采用者的列表。
TiKV 软件堆栈
- 放置驱动器:PD 是 TiKV 的集群管理器,它定期检查复制约束,以自动平衡负载和数据。
- 存储:每个存储中都有一个 RocksDB,它将数据存储到本地磁盘。
- 区域:区域是键值数据移动的基本单元。每个区域都复制到多个节点。这些多个副本形成一个 Raft 组。
- 节点:集群中的物理节点。在每个节点中,有一个或多个存储。在每个存储中,有许多区域。
当节点启动时,节点的元数据、存储和区域的元数据被记录到 PD。每个区域和存储的状态定期报告给 PD。
快速入门
使用 TiUP 部署 playground
尝试 TiKV 与 TiDB 的最快方法是使用 TiUP,这是 TiDB 的组件管理器。
您可以在此页面找到一步一步的教程。
使用二进制文件部署 playground
TiKV 能够与 PD 独立运行,这是所需的最小部署。
- 下载并解压二进制文件。
$ 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
- 启动 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
- 启动 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
- 安装 TiKV 客户端(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'
使用 TiUP 部署集群
您可以查看 @c4pt0r 提供的类似生产环境的集群部署手册这里。
从源码构建
请参阅CONTRIBUTING.md。
客户端驱动
如果您想尝试 Go 客户端,请参阅Go 客户端。
安全
安全审计
由 Cure53 执行了第三方安全审计。请参阅完整报告这里。
报告安全漏洞
要报告安全漏洞,请向 TiKV-security 组发送电子邮件TiKV-security。
有关 TiKV 项目的流程和政策,请参阅安全。
沟通
TiKV 社区内的沟通遵守TiKV 行为准则。以下是摘录内容
为了培养一个开放和欢迎的环境,我们作为贡献者和维护者承诺,确保每个人(无论年龄、体型、残疾、种族、性别特征、性别认同和表达、经验水平、教育程度、社会经济地位、国籍、个人外观、种族、宗教或性取向和倾向)都能在参与我们的项目和社区时有一个不受骚扰的经历。
社交媒体
- 博客
- 在Stack Overflow上提问或帮助回答问题
Slack
加入 TiKV 社区Slack - 注册并加入您感兴趣的 TiKV 主题频道。
许可证
TiKV 采用 Apache 2.0 许可证。有关详细信息,请参阅LICENSE 文件。
致谢
- 感谢 etcd 提供了一些出色的开源工具。
- 感谢 RocksDB 提供了强大的存储引擎。
- 感谢 rust-clippy。我们非常喜欢这个伟大的项目。
依赖关系
~76MB
~1.5M SLoC