Aerospike-Architecture系列之大數據類型
Large Data Types(大數據類型)
大數據類型的bin可以存儲大量的對象集合。對象的類型可以是Integer/String/Map/List。Aerospike的單個記錄可以包含許多這樣的bin,這樣的bin允許在單獨的記錄中包含大量的數據,其限制基於存儲能力,記錄沒有最大值限制。
Aerospike LDT使用的存儲類型,我們叫做子記錄( sub-records)。子記錄與Aerospike常規記錄很相似,不同之處在於他們與父記錄連接。記錄與父記錄共享分區ID和內部記錄鎖,所以在遷移時與父記錄一起移動,與父記錄一起通過一樣的隔離機制保護。
LDT中的對象並不與其關聯的記錄連續存儲,而是分成子記錄(sub-records)(尺寸大約2kb到200kb,由寫入塊的大小來決定)。子記錄被一起連接和索引,通過用戶定義函數(UDFs)進行數據庫內部管理。使用子記錄意味著訪問LDT中的某一對象只影響幾個子記錄而不是整個記錄。
Large Ordered List(大型有序列表)
大型有序列表類型(llist) 管理大規模排序的列表。有序列表中的對象可以是原始類型(例如,integer, string, blob)或者是復雜數據類型(比如,map, list)
圖 5a 大型有序列表操作
物理上,大型由序列表由B+樹實現。樹的節點和葉就是子記錄(sub-records)。B+樹的根駐留在父記錄。
圖 5b 大型有序列表物理層
B+樹結構沒有深度限制,因此大型有序列表中存儲的對象數目也沒有限制。
LLIST控制結構中包含所有關於大型有序列表的元數據信息。例如,包括以下信息: