Data Model(數據模型)
Aerospike採用無模式(schema-less)數據模型,這意味着存儲在庫中的數據不符合嚴格模式。
這提供了你在Aerospike中存儲數據的靈活性-數據修改不需要修改schema,庫中已存在的數據也不需要符合指定的schema
Aerospike的無模式(schema-less)數據模型允許動態添加新類型的bin。儘管如此,仍然需要遵守bin名稱與數據的對應關係。應用程序必須利用bin的一致性來保障查詢和聚合的正確性。
How Data is Organized(數據如何組織)
Namespaces(命名空間)
命名空間(namespace)是數據最頂層的容器。就像在標準的RDBMS中一樣,namespace可以是數據庫的一部分也可以是一組數據庫,這決定於你如何存儲和管理namespace中的數據。
一個namespace包含記錄(records),索引(indexes )及策略(policies)。策略決定namespace的行爲,包括:
- 數據如何存儲:存儲於內存或是磁盤
- 一條記錄存在多少個副本
- 記錄何時過期
更多關於namespace配置的信息請參看Configuring Namespaces。
根據應用程序的需要,一個數據庫可能包含多個不同策略的多個namespace。namespace被認爲是一個物理容器,因爲其中的數據必須綁定存儲設備,存儲設備可能是內存、磁盤或者是文件。
圖1中,我們定義了兩個namespace分別命名爲ns1和
ns2。ns1將記錄存放在磁盤上,ns2將記錄存放在內存中。
Sets(集合)
在命名空間(namespace)中,記錄可以屬於一個稱作集合(set)的邏輯容器。集合(set)爲應用程序提供了收集記錄組的能力。集合(set)繼承了包含它的namespace的策略,也可爲set指定其他的策略。
圖2中,爲ns1 namespace添加兩個集合,people和places。用於存儲基於類型的記錄。除了存儲於兩個集合中的記錄,namespace中有部分記錄不屬於任何set。
Records(記錄)
Aerospike數據庫是行存儲的所以焦點是獨立的記錄(在標準RDBMS中稱作行)。記錄是數據庫存儲的基本單元。行屬於某個namespace或者某個namespace中的set。記錄通過namespace中定義的唯一key來訪問。
記錄的組成如下:
組成 | 描述 |
---|---|
key | 記錄是通過一個哈希鍵進行訪問的,稱作摘要 |
metadata | 元數據提供記錄的版本信息(代)以及活動時間(ttl) |
bins (fields) | bin相當於傳統數據中的字段 |
Key / Digest
應用程序中,每一條記錄都有一個用來訪問它的key。應用程序通過key來讀寫記錄。
當key被髮送至數據庫,key(與set信息一起)被哈希化成一個160位的摘要。數據庫中,摘要爲所有操作定位記錄。
key主要用於應用程序訪問,而摘要主要用於數據庫定位記錄。
key可能是整型,字符串或者二進制。細節請參閱Data Types.
Metadata(元數據)
每條記錄與描述它自身的元數據一塊存儲,包括下列事物:
-
generation(代)反映記錄被修改的次數。這個數字在應用程序讀的時候交回,用來確定正在寫入的數據從最後一次讀開始未被修改過。
-
存活時間 (TTL) 用來指定記錄生存多長時間。Aerospike會自動依據記錄的TTL使其過期。每次在對象上執行寫操作TTL就會增加
Bins
在記錄(record)中數據被存儲於一個或多個bin。一個bin有名字和值組成。bin不指定類型,類型由bin中包含的值定義。
動態類型爲數據模型提供了很大的彈性。例如,一條記錄中包含值爲字符串"bob"名稱爲 "id"的bin。bin的值可以變成不同的字符串值,也可以變爲其他類型的值,比如整型的72.
namespace或set中的記錄可能由迥然不同的bin的集合組成。記錄無模式,所以每條記錄擁有完全不同的bins是有可能的。在記錄的生命週期中的任何時點都可以添加或移除bin
在一個namespace鍾bin名稱的數量是有限制的。最多32k個唯一bin名稱。
bin的值可能是任意原生支持的類型(native supported types)和LDTs.
譯者:北京IT爺們兒