Aerospike學習筆記之基礎知識
Aerospike基礎知識
介紹
Aerospike是一個分散式,可擴充套件的NoSQL資料庫。該架構有三個主要目標:
-
為Web級應用程式建立靈活,可擴充套件的平臺。
-
提供傳統資料庫所期望的穩健性和可靠性(如ACID)。
-
以最少的人工參與提供運營效率。
架構
•客戶端層:此群集感知層包括開源客戶端庫,可實現Aerospike API。
•叢集和資料分佈層:該層管理叢集通訊並自動執行故障轉移,複製,跨資料中心同步以及智慧重新平衡和資料遷移
•資料儲存層:該層可以將資料可靠地儲存在DRAM和Flash中,以便快速檢索。
客戶端層(Client Layer)
客戶端層能監控cluster的所有節點,並且能夠自動感知所有節點的更新,同時掌握資料在cluster內的分佈,特點:
-
高效性:Client的基礎架構確保請求能夠到相應的節點讀寫資料,減少響應時間。
-
穩定性:如果節點出錯,不需要重啟Client端,並且保持服務的正確性
-
連線池:為了減少頻繁的open/close TCP操作,Client會在內部維護一個連線池保持長連線
分佈層(Distibution Layer)
負責管理叢集內資料的平衡分佈。備份、容錯和不用叢集之前的資料同步。如果新增節點,只需要向叢集中新增新的Aerospike server,不需要停止當前的服務,包含三個模組:
-
叢集管理模組:基於Paxos-like Consensus Voting Process演算法來管理和維護叢集內的節點,並用心跳(Heart,包含active和passive)來監聽所有節點的狀態,用於監聽節點間的連通性。
-
資料遷移模組:當有節點新增和刪除是,該模組保證資料的重新分佈,按照系統配置的複製因子確保每個資料塊跨節點和跨資料中心複製。
-
事務處理模組:確保讀寫一致性,寫操作先寫Replica,再寫master
事務模組主要負責以下任務:
-
Sync/Async Replication(同步/非同步複製):為保證寫一致性,在提交資料之前向副本傳播更新並將結果返回客戶端
-
Proxy(代理):叢集重新配置期間客戶端可能出現短暫過期,透明代理請求到其他節點。
-
Duplicate(副本解析):當叢集從活動分割槽恢復時,解決不同資料副本之間的衝突。
資料儲存層(Data Layer)
負責資料的儲存,Aerospike是schema-less的鍵-值資料庫,資料儲存模式:
-
名稱空間:資料儲存在namespace中;namespace可以分為不同sets和records,每條record包含一個唯一的key和一個或多個bins值。
-
索引:Aerospike Indexs包含Primary Indexs和Second Indexs,索引只儲存在記憶體中。
-
磁碟:與其它基於檔案系統資料庫的不同之處,在於Aerospike為了達到更好的效能選擇了直接訪問SSD的raw blocks(row device),並特別優化了Aerospike的最小化讀、大塊寫和並行SSD來真加響應速度和吞吐量。
資料模型
Aerospike採用無模式(schema-less)資料模型,這意味著儲存在庫中的資料不符合嚴格模式。允許動態新增新型別的bin。儘管如此,仍然需要遵守bin名稱與資料的對應關係。應用程式必須利用bin的一致性來保障查詢和聚合的正確性。
Aerospike 鍵值儲存(KVS)操作將鍵與一組命名值相關聯。在叢集啟動時,Aerospike配置策略容器 - namespace(RDBMS 資料庫) - 它控制一組資料的保留和可靠性要求。名稱空間分為set(RDBMS 表)和record(RDBMS 行)。每條記錄都有一個唯一的索引鍵,以及一個或多個包含記錄值的bin(RDBMS 列)。
名稱空間(namespace)
名稱空間是頂級資料容器。名稱空間實際上可以是資料庫或一組資料庫的一部分,如標準RDBMS中所述。在名稱空間中收集資料的方式與資料的儲存和管理方式有關。名稱空間包含記錄,索引和策略。策略規定了名稱空間行為,包括:
-
如何儲存資料:在DRAM或磁碟上。
-
記錄存在多少個副本。
-
記錄到期時間等
集合(sets)
在名稱空間(namespace)中,記錄可以屬於一個稱作集合(set)的邏輯容器。集合(set)為應用程式提供了收集記錄組的能力。集合(set)繼承了包含它的namespace的策略,也可為set指定其他的策略。例如,可以僅針對特定集合的資料指定二級索引,或者可以對特定集合執行掃描操作。
記錄(records)
Aerospike資料庫是一個行儲存,專注於單個記錄(RDBMS 行)。記錄是資料庫中的基本儲存單元。記錄可以屬於名稱空間或名稱空間中的集合。記錄使用金鑰作為其唯一識別符號。
記錄包括以下內容:
Component | Description |
---|---|
Key | 唯一標識,記錄可以使用其金鑰的雜湊來定址,稱為摘要。 |
Metadata | 記錄版本資訊和配置到期時間,稱為生存時間(TTL) |
Bins | 相當於傳統資料中的欄位 |
- key
使用鍵在應用程式中讀取或寫入記錄。當金鑰被髮送到資料庫時,它及其設定資訊被雜湊為160位摘要,用於解決所有操作的記錄。因此,您在應用程式中使用金鑰,而摘要用於定址資料庫中的記錄。
- Metadata
每條記錄包括以下元資料
- 生成跟蹤記錄修改週期。該數字將在讀取時返回給應用程式,可以使用它來確保自上次讀取後未寫入的資料已被修改。
- **生存時間(TTL)**指定記錄到期。Aerospike根據其TTL自動過期記錄。每次寫入記錄時TTL都會遞增。對於伺服器版本3.10.1及更高版本,客戶端可以將策略設定為在更新記錄時不更新TTL。請參閱相應的客戶端API文件以獲取詳細信
- **last-update-time(LUT)**指定更新的時間戳記錄。這是資料庫內部的元資料,不會返回給客戶端。
bins
在記錄中,資料儲存在一個或多個bin中,包含名稱和值。Bins不指定資料型別,資料型別由bin中包含的值定義,這種動態資料型別為資料模型提供了靈活性。例如,記錄可以包含由字串值bob組成的bin id。bin的值總是可以更改為不同的字串值,但也可以更改為不同資料型別的值,例如整數。Bin中支援的資料型別:
-
Integer
-
String
-
Bytes
-
Double(3.6.0及更高的版本)
-
List
-
Map
-
GeoJSON(3.7.0及更高的版本)
-
native-language serialized (blobs)
名稱空間或集合中的記錄可以由非常不同的箱組成。記錄沒有架構,因此每條記錄可以有不同的bins。您可以在記錄的生命週期中的任何位置新增和刪除容器。
目前,名稱空間中併發唯一bin名稱的數量限制為32K。這是由於優化的字串表實現。
已知限制
AS資料庫中的限制摘要
Item | 限制 | 詳細限制 |
---|---|---|
Set | Set的數量 | 每個名稱空間限制為1023個Set |
Set | 名稱 | 集合名稱不能包含‘:’或‘;’ |
Bin | bins的數量 | 每個名稱空間最多有32,767個bin。這是硬編碼的,不能更改。 |
Bin | 名稱長度 | 任何單個位元組的15個字元。不允許使用雙位元組字元。對於4.2之前的伺服器版本,限制為14個字元。 |
Namespace | 數量 | 企業最多32個,社群最多2個(從4.0版開始)。集名不能包含’:‘或’;’ 字元。 |
Namespace | 儲存 | 名稱空間就像傳統SQL資料庫的表空間。請注意,您可以將多個SSD與名稱空間關聯,但用作原始裝置的任何SSD只能與單個名稱空間關聯。每個名稱空間最多限制為128個裝置。 |
Namespace | 名稱 | 名稱空間名稱不能包含’:‘或’;’ 字元。 |
Record | 數量 | 實際數量受RAM和儲存限制。索引條目的每條記錄佔用64個位元組。索引條目僅儲存在RAM中。金鑰本身實際上並不儲存在索引中,而是金鑰的雜湊值(使用RIPE-MD 160演算法)。這個帶有開銷的雜湊值恰好是64個位元組。在給定節點上每個名稱空間的最大記錄數限制為Community Edition上的4,294,967,296(由於4個位元組用於儲存引用,因此為2 ^ 32),企業版上為34,359,738,368(2 ^ 35)。這表示2TiB的RAM。 |
Record | 總數量大小 | 每個記錄值大小限制為寫入塊大小(版本4.2及更高版本允許的最大大小為8388608(或8M)。對於4.2之前的版本,允許的最大大小為1048576(或1M)。較大write-block-size 可能會對效能產生負面影響。),對於Flash裝置,通常在配置中設定為128KB,但從版本4.2開始可以增加到8MiB(對於先前版本,最大值為1MiB,這也是如果未在配置檔案中指定,則為default。 |
Record | bins的數量 | 記錄中的bin數沒有內建限制,但名稱空間中的bin總數有限制。目前這是32,767。 |
Record | Sets | 記錄只能屬於一個集合。請注意,set和key都被放入雜湊中,因此為了獲得具有set的鍵的值,您必須知道該set。 |
Cluster Size | 節點數 | 對於Enterprise Edition,群集中的最大節點數為128.對於執行heartbeat協議v2的3.14之前的版本,限制由配置paxos-max-cluster-size(預設值為31)定義。有關增加已在執行的群集的預設值的過程,請參閱此頁面:增加最大群集大小。對於Community Edition,對於4.0之前的版本,最大節點數限制為31,對於4.0及更高版本,最大節點數限制為8。 |
Devices | 裝置數量 | 每個節點的每個名稱空間的最大裝置數(或檔案數)在版本4.2時為128,對於版本低至3.12.1為64,對於之前的版本為32。 |
其他限制
Aerospike server item | limits |
---|---|
bin名稱 | <= 14個字元 |
set名稱 | <= 63 個字元(集合名稱中不允許使用’:‘或’;’) |
namespace名稱 | <= 31個字元(名稱空間名稱中不允許使用’:‘或’;’) |
名稱空間中所有鍵的總分類數 | < 32 K |
名稱空間中的總二級索引 | <= 256 indices |
每個鍵的bin | < 32 K |
索引名稱 | <= 255個字元(索引名稱中不允許使用’:‘或’;’) |
hist-track-back | 86400秒(切片10秒) |
複製因子 | =節點數是叢集 |
名稱空間的每個檔案或磁碟的最大可配置大小 | = 2 TiB |
介面數量 | <= 500(對於3.15之前的伺服器版本,限制為50) |