milvus元数据在etcd的存储解析
数据以key-value形式存在。
大致包含如下一些种类:
- database
- collection
- field
- partition
- index
- segment-index
- resource_group
- session
database
创建一个数据库会产生2个key,但value是相同的。
key规则:
-
前缀/root-coord/database/db-info/{dbID}
-
前缀/snapshots/root-coord/database/db-info/{dbID}_ts{时间戳}
默认数据库名为default,dbID为1。
ID和时间戳都是一串数字,由physicalTime+logicalTime组成。
创建一个名为testdb01的数据库,产生的2个key如下:
shell
by-dev/meta/root-coord/database/db-info/444381061892856434
by-dev/meta/snapshots/root-coord/database/db-info/444381061892856434_ts444383983389376515
444381061892856434为dbid。这个ID可以进行tso解析。
value结构如下:
![](https://file.jishuzhan.net/article/1790018573360435202/4b3ca2fefecc89f93d3ea74f45e14981.webp)
![](https://file.jishuzhan.net/article/1790018573360435202/db876f095991b4fe660d1bd6e0ff57b8.webp)
将此结构体使用protobuf序列化后存入到etcd,因此etcd存储的是二进制数据。
collection
创建一个collection会产生2个key,但value是相同的。
key规则:
-
前缀/root-coord/database/collection-info/{dbID}/{collectionID}
-
前缀/snapshots/root-coord/database/collection-info/{dbID}/{collectionID}_ts{时间戳}
可以反映出collection属于哪个DB。
在testdb01下创建一个名为testcol01的collection,产生如下2个key:
-
by-dev/meta/root-coord/database/collection-info/444381061892856434/444384207423931210
-
by-dev/meta/snapshots/root-coord/database/collection-info/444381061892856434/444384207423931210_ts444384251124908036
value结构如下:
![](https://file.jishuzhan.net/article/1790018573360435202/c07eae2a6ef75fd7d0c493be8f279410.webp)
![](https://file.jishuzhan.net/article/1790018573360435202/9f9fd7619ba43d33b824f8be1d35153a.webp)
将此结构体序列化后存入到etcd,因此etcd存储的是二进制数据。
field
创建collection的时候会创建field,一个field会产生2个key,但value是相同的。
key规则:
-
前缀/root-coord/fields/{collectionID}/{fieldID}
-
前缀/snapshots/root-coord/fields/{collectionID}/{fieldID}_ts{时间戳}
可以反映field属于哪个collection。虽然并未反应出属于哪个db,但是collectionID是唯一的,也可以通过collectionID判断出属于那个db。这样不同的db下面有相同名称的collection就可以区别了。
一个field就是一个字段。
创建一个名为testcol01的collection,包含2个field(hid和embedding)产生的key如下:
hid字段:
-
by-dev/meta/root-coord/fields/444384207423938951/100
-
by-dev/meta/snapshots/root-coord/fields/444384207423938951/100_ts444384154740064260
embedding字段:
-
by-dev/meta/root-coord/fields/444384207423938951/101
-
by-dev/meta/snapshots/root-coord/fields/444384207423938951/101_ts444384154740064260
value结构如下:
![](https://file.jishuzhan.net/article/1790018573360435202/eeac197e7f3df99d2a1a2d7d1bfe344a.webp)
![](https://file.jishuzhan.net/article/1790018573360435202/939652bc313e4d079a1fcba7541a9cd9.webp)
![](https://file.jishuzhan.net/article/1790018573360435202/0d198f2e7813766909815d086ab1ee4b.webp)
将此结构体序列化后存入到etcd,因此etcd存储的是二进制数据。
partition
创建一个分区会产生2个key,但value是相同的。
key规则:
-
前缀/root-coord/partitions/{collectionID}/{partitionID}
-
前缀/snapshots/root-coord/partitions/{collectionID}/{partitionID}_ts{时间戳}
可以反映partition属于哪个collection。
一个collection可以包含多个partition。
默认partition名为:_default。
可配置(milvus.yml):common.defaultPartitionName
在名为testcol01的collection下包含1个partition,产生如下2个key:
-
by-dev/meta/root-coord/partitions/444384963133177989/444384963133177990
-
by-dev/meta/snapshots/root-coord/partitions/444384963133177989/444384963133177990_ts444384154740064260
value结构如下:
![](https://file.jishuzhan.net/article/1790018573360435202/90d331ece6537bfacf212657ba338ff3.webp)
![](https://file.jishuzhan.net/article/1790018573360435202/99fba02fdd8a2d4bef3317d277485892.webp)
将此结构体序列化后存入到etcd,因此etcd存储的是二进制数据。
index
创建index会产生2个类型的key。一个是index,一个是segment-index。
key规则:
- 前缀/field-index/{collectionID}/{IndexID}
可以反映index属于哪个collection。Index的value可以反映索引建立在哪个field。
不能反映属于哪个partition、哪个segment。
创建一个名为idx_embedding的索引,产生1个类型的key如下:
- by-dev/meta/field-index/444384207423931210/444425876914135276
value结构如下:
![](https://file.jishuzhan.net/article/1790018573360435202/7e624b0907263f965ca0877318c682ec.webp)
![](https://file.jishuzhan.net/article/1790018573360435202/c20d5646b0fc6d408f547fbc40c024de.webp)
![](https://file.jishuzhan.net/article/1790018573360435202/de1ee89a4fec75bec694e3b247e90105.webp)
![](https://file.jishuzhan.net/article/1790018573360435202/1f7ad43da18a10ea7d8b5fb28eca0f7e.webp)
![](https://file.jishuzhan.net/article/1790018573360435202/0bb63146a07c9379b004af902a90f9f8.webp)
![](https://file.jishuzhan.net/article/1790018573360435202/677dbba23247c74e55d03c9b030ad2bb.webp)
将此结构体序列化后存入到etcd,因此etcd存储的是二进制数据。
segment-index
创建index会产生2个类型的key。一个是index,一个是segment-index。
key规则:
- 前缀/segment-index/{collectionID}/{partitionID}/{segmentID}/{buildID}
创建一个名为idx_embedding的索引,产生1个类型的key如下:
- by-dev/meta/segment-index/444517122896489678/444517122896489679/444517122896489694/444521062292259541
value结构如下:
![](https://file.jishuzhan.net/article/1790018573360435202/2ae9708ced7f5d475dce34d33acf140e.webp)
![](https://file.jishuzhan.net/article/1790018573360435202/4874501fe63414bdaca9b1a3a2da2854.webp)
将此结构体序列化后存入到etcd,因此etcd存储的是二进制数据。
resource_group
资源组可以用来进行查询节点的物理隔离。
在多collection环境中,为每个资源组分配适当数量的查询节点,应用到collection中
key规则:
- 前缀/queryCoord-ResourceGroup/{rgName}
创建一个名为rg的资源组,产生如下1个key:
- by-dev/meta/queryCoord-ResourceGroup/rg
value结构如下:
![](https://file.jishuzhan.net/article/1790018573360435202/c932485bcbb7797a833d4280595a8c1c.webp)
![](https://file.jishuzhan.net/article/1790018573360435202/99ce479d27c6370896e92070c1145853.webp)
将此结构体序列化后存入到etcd,因此etcd存储的是二进制数据。