Day 8 - 资料储存

在Key-value的结构底下,一张表的储存讯息可以分为三种。分别是row、index、表的元信息。
每一张表会对应到一个唯一的TableID,型态是整数。表内的每一笔row也会有一个唯一的RowID,型态也是整数。但是当table的Primary key为整数类型,RowID就会用pk的值替代。
会用以下的格式呈现

Key:   tablePrefix{TableID}_recordPrefixSep{RowID}
Value: [col1, col2, col3, col4]

引用pingcap官网

Prefix的定义如下图
https://ithelp.ithome.com.tw/upload/images/20210903/20113220dnEQzOwhyS.png

引用github.com/pingcap/tidb

举例来说,有一张表格tidb_test,有Primary key与一组unique index和一组non-unique index。
https://ithelp.ithome.com.tw/upload/images/20210903/20113220coOpyfIeOO.png
https://ithelp.ithome.com.tw/upload/images/20210903/20113220qomU0ypT4c.png

依照上面的规则,假设tableID为666,RowID因为pk为int类型所以会以id的值代表,映射结果为。
Key: t666_r1 Value: [john,30,30000]
Key: t666_r2 Value: [Jamie,40,30000]
如果是idx_1,假设indexID为1,则结果为
Key: t666_i1_John Value: [1]
如果是idx_2,假设indexID为2,则结果为
Key: t666_i2_30_1 Value: null

此外当两个request同时间去异动同一个key对应的value,key值後面会补上版本号
如Key: t666_r1_Version2,t666_r1_Version1。

元信息储存各个Database和table的定义与属性,Key前面会以m_开头。另外对於所有表的结构会用/tidb/ddl/global_schema_version当作key,版本号为value,每操作一次value就+1,储存在PD server,会持续监控版本是否有异动。有关Schema的异动TiDB是实作Google F1的Online Schema变更算法,同一时间只允许一个node做异动,以避免DDL操作时发生锁表情况。


<<:  加上random与time模组,限制次数与时间的管理(2)

>>:  为什麽会跑来这里写这题目

Day8 单纯贝氏分类器 (Naive Bayes Classifier)

什麽是单纯贝氏分类器? 讲人话就是在有些特徵之间相互独立且不影响的前提下,利用贝式定理算出个别特徵与...

Day28 火堆实作 - 模组参数

昨天我们提到把模组都连起来,接着我们就可以调整模组上的参数了, 首先看到 " Mappin...

如何兼顾 产品开发 与 品质维护

软件开发中,最怕遇到的就是前面有新功能的开发在赶,後面有线上的 bug 在等着处理,呈现蜡烛两头烧的...

【PHP Telegram Bot】Day20 - sendMessage:发送和转换 Markdown 讯息

今天先来点轻松的,先来看看各种 sendMessage 的功能,最後来转换使用者发送的 Markd...