tikv的操作

tikv的操作

kvproto-master\proto\raft_cmdpb.proto

message Request {
    optional CmdType        cmd_type    = 1;
    optional GetRequest     get         = 2;
    optional PutRequest     put         = 4;
    optional DeleteRequest  delete      = 5;
    optional SnapRequest    snap        = 6;
}


message RaftCmdRequest {
    optional RaftRequestHeader header     = 1;
    // We can't enclose normal requests and administrator request
    // at same time. 
    repeated Request requests             = 2; 
    optional AdminRequest admin_request   = 3; 
    optional StatusRequest status_request = 4;
}


https://github.com/pingcap/tikv/blob/master/src/raftstore/store/peer.rs#L519


propose触发写raft log

apply_raft_cmd写rocksdb

handle_raft_entry_normal把raft log中传入来,然后调用process_raft_cmd,apply_raft_cmd 写db

handle_raft_commit_entries提交db,把raft log提交上去

propose_normal写put get del raftlog函数peer.rs self.raft_group.propose 最终调用raft.rs 的中append_entry写入

### TiKV中的MVCC实现与应用 #### 1. 多版本并发控制(MVCC)概述 多版本并发控制(Multi-Version Concurrency Control,简称 MVCC)是一种用于提升数据库并发性能的技术。其核心思想是在执行更新或删除操作时不直接修改原始数据,而是通过创建新版本来保存变更后的状态[^1]。这种方式使得读操作无需等待写操作完成即可访问旧版本的数据,从而显著减少因锁机制带来的阻塞。 #### 2. TiKV 中的 MVCC 实现细节 TiKV 是一个分布式的键值存储系统,在其实现中也引入了 MVCC 来支持高效的事务管理以及高并发场景下的读写分离需求。以下是具体实现的关键点: - **版本化数据结构** 在 TiKV 中,每条记录都会被赋予多个时间戳标记的不同版本。这些版本按照时间顺序排列,允许用户根据特定的时间点查询对应的历史数据[^3]。 - **两阶段提交协议 (Two-phase Commit)** TiKV 使用两阶段提交协议确保分布式环境下的事务一致性。此过程分为预写入 (`Prewrite`) 和提交 (`Commit`) 阶段: - 在 `Prewrite` 阶段,客户端会向涉及的所有 Region 发送请求,将待修改的内容及其对应的锁信息存入 Default Column Family (CF) 和 Lock CF 中[^2]。 - 进入 `Commit` 阶段后,则进一步确认全局唯一的时间戳作为最终提交标志,并广播至各参与方以同步状态变化。 - **快照隔离级别支持** 借助于内部维护的一套完整的 MVCC 数据模型,TiKV 能够轻松提供一致性的快照视图给上层调用者。这意味着即便面对频繁变动的基础表项集合,应用程序依旧能够稳定获取某一固定时刻的整体镜像副本[^4]。 #### 3. 技术优势分析 采用上述方法论之后,带来了如下几个方面的改进效果: - 极大地降低了传统锁定策略可能引发的竞争压力; - 提供更灵活的时间旅行能力以便追溯过往发生过的事件轨迹; - 更好地适配现代大规模集群架构下复杂的业务逻辑诉求。 ```python # 示例代码展示如何利用 Python SDK 对 TiKV 执行简单增删改查命令 from tikv_client import TransactionClient client = TransactionClient.connect(["127.0.0.1:2379"]) txn = client.begin() key = b"my_key" value = b"my_value" # 插入一条新的 key-value 记录 txn.put(key, value) # 获取指定 key 下最新版次关联的 value 值 result = txn.get(key) print(result.decode()) # 删除目标 entry 同时保留历史痕迹可供后续审计用途 txn.delete(key) txn.commit() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值