時間戳
本主題解釋時間戳的概念,並介紹 Milvus 向量資料庫中四個主要的時間戳相關參數。
概述
Milvus 是一個向量資料庫,可以搜尋和查詢從非結構化資料轉換過來的向量。當進行資料處理語言 (DML) 作業時,包括資料插入和刪除,Milvus 會為作業所涉及的實體指定時間戳。因此,Milvus 中的所有實體都有時間戳屬性。而在同一 DML 操作中的實體批次共享相同的時間戳值。
時間戳參數
在 Milvus 中進行向量相似性搜尋或查詢時,會涉及數個與時間戳相關的參數。
Guarantee_timestamp
Service_timestamp
Graceful_time
Travel_timestamp
Guarantee_timestamp
Guarantee_timestamp
是一種時間戳,用來確保在進行向量相似性搜尋或查詢時,在 之前由 DML 作業更新的所有資料都是可見的。例如,如果您在下午 3 點插入一批資料,在下午 5 點插入另一批資料,而在向量相似性搜尋時, 的值設定為下午 6 點。這表示分別在下午 3 點和下午 5 點插入的兩批資料應參與搜尋。Guarantee_timestamp
Guarantee_timestamp
如果沒有設定Guarantee_timestamp
,Milvus 會自動以提出搜尋請求的時間點。因此,搜尋是在資料檢視上進行,所有資料更新都是在搜尋之前透過 DML 作業進行。
為了省去您在 Milvus 內理解TSO的麻煩,作為用戶,您不需要直接配置Guarantee_timestamp
參數。您只需要選擇一致性等級,Milvus 會自動為您處理Guarantee_timestamp
參數。每個一致性等級對應某個Guarantee_timestamp
值。
Guarantee_Timestamp.
範例
如上圖所示,Guarantee_timestamp
的值設定為2021-08-26T18:15:00
(為簡單起見,此範例中的時間戳以實體時間表示)。當您進行搜尋或查詢時,2021-08-26T18:15:00 之前的所有資料都會被搜尋或查詢。
Service_timestamp
Service_timestamp
是由 Milvus 中的查詢節點自動產生和管理的時間戳類型。它用於指示查詢節點執行哪些 DML 作業。
查詢節點管理的資料可分為兩種類型:
歷史資料 (或也稱為批次資料)
增量資料(或稱為串流資料)。
在 Milvus 中,您需要在進行搜尋或查詢之前載入資料。因此,在進行搜尋或查詢請求之前,集合中的批次資料會由查詢節點載入。但是,流式資料是即時插入 Milvus 或從 Milvus 刪除的,這需要查詢節點保持 DML 作業和搜尋或查詢請求的時間線。因此,查詢節點使用Service_timestamp
來保持這樣的時間線。Service_timestamp
可以被視為某些資料可見的時間點,因為查詢節點可以確保Service_timestamp
之前的所有 DML 作業都已完成。
當有搜尋或查詢請求傳入時,查詢節點會比較Service_timestamp
和Guarantee_timestamp
的值。主要有兩種情況。
服務_時間戳.
情況 1:Service_timestamp
>=Guarantee_timestamp
如圖 1 所示,Guarantee_timestamp
的值設定為2021-08-26T18:15:00
。當Service_timestamp
的值長大為2021-08-26T18:15:01
時,表示查詢節點執行並完成此時點之前的所有 DML 作業,包括Guarantee_timestamp
所指示時間之前的 DML 作業。因此,搜尋或查詢請求可以立即執行。
情況 2:Service_timestamp
<Guarantee_timestamp
如圖 2 所示,Guarantee_timestamp
的值設定為2021-08-26T18:15:00
,而Service_timestamp
的目前值只有2021-08-26T18:14:55
。這表示只有在2021-08-26T18:14:55
之前的 DML 作業才會被執行並完成,剩下在這個時間點之後但在Guarantee_timestamp
之前的部分 DML 作業尚未完成。如果在這個時間點執行搜尋或查詢,有些所需的資料是不可見的,還無法取得,嚴重影響搜尋或查詢結果的準確性。因此,查詢節點需要推遲搜尋或查詢請求,直到guarantee_timestamp
之前的 DML 作業完成為止 (也就是當Service_timestamp
>=Guarantee_timestamp
)。
Graceful_time
技術上來說,Graceful_time
並不是時間戳記,而是一個時間段(例如 100 毫秒)。不過,Graceful_time
值得一提,因為它與Guarantee_timestamp
和Service_timestamp
有密切關係。Graceful_time
是 Milvus 設定檔中一個可設定的參數。它用來指出在某些資料變得可見之前可以容忍的時間。簡而言之,在Graceful_time
期間未完成的 DML 作業是可以容忍的。
當有輸入的搜尋或查詢請求時,可能有兩種情況。
Graceful_Time.
情況 1:Service_timestamp
+Graceful_time
>=Guarantee_timestamp
如圖 1 所示,Guarantee_timestamp
的值設定為2021-08-26T18:15:01
,Graceful_time
設定為2s
。Service_timestamp
2021-08-26T18:15:00
雖然Service_timestamp
的值仍小於Guarantee_timestamp
的值,且2021-08-26T18:15:01
之前的 DML 作業尚未全部完成,但如Graceful_time
的值所示,可容忍 2 秒的資料隱藏時間。因此,傳入的搜尋或查詢請求可立即執行。
情況 2:Service_timestamp
+Graceful_time
<Guarantee_timestamp
如圖 2 所示,Guarantee_timestamp
的值設定為2021-08-26T18:15:01
,Graceful_time
設定為2s
。Service_timestamp
目前的值只有2021-08-26T18:14:54
。這表示預期的 DML 作業尚未完成,即使有 2 秒的優化時間,資料隱藏仍然是無法忍受的。因此,查詢節點需要擱置搜尋或查詢請求,直到某些 DML 請求完成為止 (即當Service_timestamp
+Graceful_time
>=Guarantee_timestamp
)。