NoSQL and AWS DynamoDB - The first sight
Introduction
NoSQL 是 Not Only SQL,是一種非傳統關連式的資料庫
由於是key-value 的架構,因此設計primary key格外重要。primary key由partition key 與sort key(optional)結合。
在搜尋的方式上,因為架構上受限,只能對key 做運算(=, >=, /= ...)的判斷,因此當你決定用NoSQL來作為資料庫時,第一個問題是要用那個欄位為key?
根據AWS的解釋 NoSQL是高效能、非關連式資料庫並且有彈性的資料模組,部署容易,易於scale out。
Query 時partition key 不得為空
Types of NoSQL Databases
key-value, 用特定鍵值去搜尋資料,像是Redis這樣的操作。
Column-oriented, 用來應付分散式巨量資料的儲存方式,仍是用key去搜尋,會對應多個列,如Cassandra
Document, 半結構化的儲存格式像是JSON format, 查詢效率更高。like MongoDB
Graph, 圖形結構 like Neo4j
In-memory, use case like leaderboard, session stores, 即便redis可以提供低延遲的workload, 但畢竟沒有寫到disk like DynamoDB
Search, 若把elasticsearch算進來,就會是屬於對搜尋最佳化後的NoSQL例子
AWS DynamoDB
AWS DynamoDB 的Primary Key有兩種
Particition Key- 為單一attribute表示,值不允許重複,經過hash function存入對應的partition(物理)
Partition key and sort key- 兩個attribute組合而成,可允許有相同partition key但同時sort key必須唯一。經過hash function 後相同partition key就會在同一區,再由short key做排序。
查詢時...primary key 值是必要判斷條件,不可能有空值。若要以其他attribute作為查詢條件,可建立Secondary index。
Secondary indexes 就如同其他資料庫建立index一般,在DynamoDB中就多增加一個可查詢的條件。可以另外建立一組partition key and sort key的組合。支援兩種類型,
Global Secondary Index - partition key 可與primary key裡的不同,並可以搭配其他attribute作為sort key。可以跨table搜尋。
Local Secondary Index - 與primary key的partition key一樣,但sort key為其他attribute。
DynamoDB 有TTL可以設定,跟MongoDB一樣。RCU, WRU 預設上限每秒3000次。
DynamoDB 有service 上的限制,超過「軟」限制可以發support ticket去調高。像是每個on-demand table提供最高 40,000 read and write request units. 調整soft limit頻率不能太高,增加ReadCapacityUnit, WriteCapacityUnits沒有限制,但減少一天只能調整四次。
資料型態 String, Number, Binary. 由於資料型態單純,其他RDB有的型態像是geometry則無法在DynamoDB上有效運用。
Appendix
https://aws.amazon.com/nosql/?nc1=h_ls
留言
張貼留言