跳到內容

圓表和優化的主鍵

一些用例要求在有限的時間內存儲數據。時間序列就是這樣一種用例,其中使用時間戳來對數據進行鍵控。可以以高頻率從傳感器收集測量值,進行鍵控並存儲,以後再使用該鍵進行檢索,然後進行分析。由於數量大,某些數據可能需要在以後的時間清除。這是圓表和RDM優化的主鍵蓬勃發展的地方。

 

考慮到此用例,優化了RDM 15.0的循環表和重新設計的主鍵。當數據存儲在循環表中時,假定通常按關鍵順序接收並插入數據¹。當循環表“已滿”時,最舊的數據將自動從數據庫中清除。與未訂購的刀片相比,這種操作方式可以提高效率一個數量級²。就CPU時間和I / O量而言,可能都是這種情況。效率提高的原因是,當所有插入的主鍵值都增加而所有刪除的主鍵值都最小時,內部數據結構將非常有效。

 

寫時復制

RDM中另一個有助於提高循環表效率的設計決策是RDM確實 寫時復制 無需使用事務日誌。這有兩個方面的好處。首先,沒有事務日誌,數據僅寫入一次。³ 其次,通過寫時復制,可以非常有效地實現數據快照,無需鎖就可以訪問數據,並且仍具有先前寫入數據的一致視圖。

 

快照

此後不久,即可將添加到循環表並已提交的數據用於快照。與在較晚時間使用數據的應用程序相比,執行此操作的應用程序將觀察到更高的性能。這是由於緩存。如果沒有有效的快照實現,則由於必須依靠鎖而導致性能下降,因此在插入後不久可能無法使用數據。

 

吸塵

最後,在其中清除最舊數據的循環表通常不會在復製過程中被複製 吸塵 因為在清理實際的打包文件時已經清除了數據。

 

使用主鍵而不是行ID

早期版本的RDM始終使用Row-ID來定位行數據。使用RDM 15.0,我們對此進行了更改。在定義主鍵的情況下,將使用主鍵值代替行ID。這還有其他一些好處。首先,對於外部引用,由於主鍵用於引用,因此我們不再需要查找外部行來查找相應的主鍵。其次,由於主鍵用於對其進行任何引用,因此可以在不包含主鍵的情況下對行進行編碼。

 

數據庫聯合

RDM具有打開多個數據庫以在一個視圖中讀取的能力(數據庫聯合)。優化的主鍵(我們使用主鍵而不是Row-ID來定位行數據)使聯合在查找主鍵排序的日期時更加有效。將來自不同數據庫的具有相同Row-ID的行放在一起的情況下,按Row-ID順序檢索數據通常是沒有意義的,因為來自不同數據庫的Row-ID可能不相關。

 

最後的話

所有這些因素都為涉及圓表的許多用例帶來了出色的性能。準備開始了嗎?下載 Raima數據庫管理器在這裡。

 

Sverre Hvammen Johansen和Daigoro Toyama

¹或接近關鍵訂單
²如果每個主鍵值的數據量很大,或者交易一次只能插入一行或幾行,則此陳述就不太正確
³假設沒有發生吸塵