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。


查詢分兩種
Query - 藉由primary key的條件去搜尋,由於在建立table時已經指定primary key, 因此增加查詢效能與降低運算資源。
Scan - 給定primary key ,加上filter查詢attribute的條件。此動作會掃過所有 table,相當耗資源。

以每秒讀取4kb請求量,以最終一致性的case來講,每秒可以多兩倍,所以1MB的資料 / 4kb item size/2 =128 read operations. 強一致性就會需要256 read operations.


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

留言

這個網誌中的熱門文章

[專案] 銀行端末系統

如何在MacOS 中自由切換不同Python版本 - pyenv + virtualenv

用 C# 控制 Win7 輸入法