2018年4月22日 星期日

NoSQL 非關聯式資料庫


NoSQL 非關聯式資料庫
NoSQL/ Key-Value Database




NoSQL/Key-Value 資料庫是網路興起後,資料庫設計與查詢的新方法,
也可以說是關聯式資料庫的一種反動。


NoSQL/Key-Value 資料庫的 2 大特色是:
NoSQL 非關聯式查詢
所有關聯式資料庫的通用查詢語言是SQL,所以 NoSQL 就表示不用關聯式資料庫的結構
表格分析設計法、與根據主鍵(primary keys)的查詢,故也可稱為「非關聯式資料庫」。


Key-Value Stores 「鍵-值」資料儲存法
採用只有 2 欄,稱為雜湊表( Hash table ,大陸譯為哈希表 )的方式儲存。
1欄是關鍵字 (Key),另1欄是值 (Value),作為查詢的資料結構 。


這種方法可以通過把鍵值通過一個函數的計算, 映射到表中一個位置來查詢記錄,
這加快了查找速度。 這個映射函數稱做雜湊函數 ,存放記錄的表格稱做雜湊表 。


NoSQL/Key-Value 資料庫興起原因
NoSQL/Key-Value 資料庫的興起源於網路發展,產生的新挑戰與回應:
網路興起帶動了巨量資料(Big Data)現象
外在的需求變動挑戰:網路興起帶動了巨量資料現象,即所謂「Big Data」,
又譯為海量資料、大數據,指的是資料量規模巨大到無法在合理時間內達到
擷取、管理、處理、並整理成為人類所能解讀的資訊。


網路行為使得傳統的「資料」定義為之改觀,搜尋、輸入、交易的網址
與時間…都是「資料」。而且經過「資料探勘」篩選、整理、分析,
有可能用於幫助企業經營決策,引導開發更多的消費力量或其他網路使用行為。


巨量資料的常見特點是4V:Volume、Velocity、Variety、Veracity
(資料量大、輸入和處理速度快、資料多樣性、真實性),
使得資料處理除了業務量巨量加重之外,還有資料品質的問題。


資料可擴展性(scalability)要求升高
內在的資訊技術能力挑戰:尤其是資料可擴展性(scalability, 同 expandability),
這原來是資料處理技術的專業名詞,指有關業務量的擴展問題。


從使用者的立場,統雄老師建議:資料可擴展性(scalability)就是在業務量增大時,
系統仍然能夠:區分緩急、靈活應對;分配資源、適時服務。


資料可擴展性 scalability 在技術上的處理項目包括:支持大量域
(Support of large number of domains),支持大量呼叫(Ability to handle large number of calls)
與呼叫狀態(call states),管理狀態中的元素(Elements that must maintain states) ,
信號訊息處理(Signaling message processing),與會方數量、集中還是分佈的交談控制
(Conference sizes, conference control (centralized vs. distributed)),
以及分散式的呼叫信號 DCS(Distributed Call Signaling)。


注意,文獻上另有 extensibility 一詞,是指設備上的硬體效能與軟體版本的「可升級性」,
勿產生混淆。


關聯式查詢相對緩慢、效益相對低
網路新資料不斷產生,但關聯式資料庫的設計與表格分析,從本文前篇:MIS 管理資訊系統、
系統分析與設計的介述,可知在「資料結構」設計上是十分費工的,
使得源源湧入的資料無法及時反應,可擴展性低。
造成傳統關聯式查詢查詢相對緩慢、效益相對低。


回應方案:演化?還是革命?
在這種業務壓力要求下,各機構與研究者,開始尋找解決方案。
當發現無法讓關聯式資料庫演化(evolution)後,開始有了革命(revolution)的構想,
向關聯式資料庫「說 No」的替代方案。


NoSQL一詞最早出現於1998年,是Carlo Strozzi開發的一個輕量、開源、不提供SQL功能的資料庫。
2009年,Rackspace 的Eric Evans 再次提出了NoSQL的概念,同時建立了「非關聯式資料庫」
設計模式。同年在亞特蘭大舉行的 "no:sql(east)" 討論會形成了實務應用的里程碑,
其口號是"select fun, profit from real_world where relational=false;"。


而大型網路組織如 Google的 GoogleAppEngine,Amazon的 smipleDB,
陸續採用NoSQL/Key-Value 模式,開創了當前最新的熱門潮流。


NoSQL/Key-Value 資料庫範例與比較
「關聯式資料庫」的表格是多欄式,以每筆資料為列,範例如下。


其中「編號」,就是至少要有1個「主鍵」。
關聯式資料庫之資料表


NoSQL/Key-Value 資料庫的表格只有 2 欄、沒有「主鍵」,每筆資料不一定只有1列,
同筆資料可以不只1個鍵 (key)名,範例如下。


「關聯式資料庫」的欄位必須要定義「資料格式」,如字串、整數、實數(含小數)、
貨幣、日期…等,而NoSQL/Key-Value 不必定義,還包括「資料格式」設定、系統訊息、
資料位址、…什麼都可以,而且,沒有順序問題,可以有空白格,
也就是沒有「資料結構」問題。


NoSQL資料庫之資料表
NoSQL/Key-Value 資料庫相關技術
NoSQL/Key-Value 資料庫相關同時配合應用的技術,包括如下。
API 查詢
由於不使用SQL語言,各種查詢必須由各種應用的開發者,自訂API查詢。
雲端應用
雲存儲存就是構建一個大型的存儲平台給別人用,這也就意味著在這上面運行的應用其實
是不可控制的,也就是可擴展性(scalability)需求高,在這種情況 下,
NoSQL/Key-Value 就是唯一的選擇了。
快取儲存
NoSQL/Key-Value 就是要求快,所以熱門資料,會經分析後儲存到快取記憶體,
更增加查詢效率。


NoSQL/Key-Value 資料庫的現況與未來
NoSQL/Key-Value 資料庫目前已經商業化,較知名的有:
Apache Cassandra, Redis, Aerospike, BigTable...等。

雖然有人認為 NoSQL/Key-Value 已成趨勢,甚至可能壓倒「關聯式資料庫」。
較持平的評論,認為兩者實有市場區隔,NoSQL/Key-Value 適用巨量網站,
而「關聯式資料庫」還是較適合一般機構的管理資訊系統。

沒有留言:

張貼留言