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 关注者

Apache-2.0

21MB
441K SLoC

tikv_logo

网站 | 文档 | 社区聊天

Build Status Coverage Status CII Best Practices

TiKV 是一个开源的、分布式的、事务型的键值数据库。与传统的 NoSQL 系统不同,TiKV 不仅提供经典的键值 API,还提供符合 ACID 规范的事务 API。TiKV 使用 Rust 编写并由 Raft 驱动,最初由 PingCAP 创建,旨在补充 TiDB,这是一个兼容 MySQL 协议的分布式 HTAP 数据库。

TiKV 的设计灵感来源于一些伟大的 Google 分布式系统,如 BigTable、Spanner 和 Percolator,以及近年来学术界的最新成就,如 Raft 一致性算法。

如果您想为 TiKV 做贡献或想从源代码构建它,请参阅 CONTRIBUTING.md

cncf_logo cncf_logo

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 软件堆栈

The TiKV software stack

  • 放置驱动器:PD 是 TiKV 的集群管理器,它定期检查复制约束,以自动平衡负载和数据。
  • 存储:每个存储中都有一个 RocksDB,它将数据存储到本地磁盘。
  • 区域:区域是键值数据移动的基本单元。每个区域都复制到多个节点。这些多个副本形成一个 Raft 组。
  • 节点:集群中的物理节点。在每个节点中,有一个或多个存储。在每个存储中,有许多区域。

当节点启动时,节点的元数据、存储和区域的元数据被记录到 PD。每个区域和存储的状态定期报告给 PD。

快速入门

使用 TiUP 部署 playground

尝试 TiKV 与 TiDB 的最快方法是使用 TiUP,这是 TiDB 的组件管理器。

您可以在此页面找到一步一步的教程。

使用二进制文件部署 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
  1. 启动 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
  1. 启动 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
  1. 安装 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 行为准则。以下是摘录内容

为了培养一个开放和欢迎的环境,我们作为贡献者和维护者承诺,确保每个人(无论年龄、体型、残疾、种族、性别特征、性别认同和表达、经验水平、教育程度、社会经济地位、国籍、个人外观、种族、宗教或性取向和倾向)都能在参与我们的项目和社区时有一个不受骚扰的经历。

社交媒体

Slack

加入 TiKV 社区Slack - 注册并加入您感兴趣的 TiKV 主题频道。

许可证

TiKV 采用 Apache 2.0 许可证。有关详细信息,请参阅LICENSE 文件。

致谢

  • 感谢 etcd 提供了一些出色的开源工具。
  • 感谢 RocksDB 提供了强大的存储引擎。
  • 感谢 rust-clippy。我们非常喜欢这个伟大的项目。

依赖关系

~76MB
~1.5M SLoC