三種解決方案
這個問題提出的時候,Milvus 的最新版本是 2.2.8,我們做個角色互換,在當時站在這個用戶的角度,留在我們面前的選擇有這么幾個:
-
為每個租戶創建一個 collection
-
為每個租戶創建一個 partition
-
創建一個租戶名稱的標量字段
接下來,我們依次分析下這三種方案的可行性:
-
方案 1:為每個租戶創建一個 collection。
這是我們最自然想到的方式,非常直觀,使用也最簡單,但是它有一個致命缺點,Milvus 的一個集群里面最多只能創建 65536 個集合。之所以有這個限制,是因為 Milvus 里的集合是和消息系統(Pulsar/Kafka)的 topic 綁定的,Pulsar/Kafka 的 topic 有數量上限,集合數量過多之后,topic 的復用率也會很高,會導致嚴重的讀放大問題。因為我們有 10K - 20K 個租戶,所以每個租戶一個集合的方式走不通了。
不過好消息是,社區里面已經在籌劃引入一些更輕量的消息系統(NATS),集合數量有望在未來達到更高的水平。假如集合數量的問題能夠解決,能達到像 MySQL 那樣上億的表數目上限