1. 程式人生 > >Aerospike學習筆記之基礎知識

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

每條記錄包括以下元資料

  1. 生成跟蹤記錄修改週期。該數字將在讀取時返回給應用程式,可以使用它來確保自上次讀取後未寫入的資料已被修改。
  2. **生存時間(TTL)**指定記錄到期。Aerospike根據其TTL自動過期記錄。每次寫入記錄時TTL都會遞增。對於伺服器版本3.10.1及更高版本,客戶端可以將策略設定為在更新記錄時不更新TTL。請參閱相應的客戶端API文件以獲取詳細信
  3. **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)