快速認識4類主流NoSQL資料庫

快速認識4類主流NoSQL資料庫

快速認識4類主流NoSQL資料庫

資料來源: https://www.ithome.com.tw/news/92507

目前有4種比較受到關注的NoSQL資料庫,分別是

01.Key-Value資料庫

    -取消了原本關聯式資料庫中常用的欄位架構(Schema),每筆資料各自獨立,所以,可以打造出分散式和高擴充能力的特性。


02.記憶體資料庫(In-memory Database)
    -就是將資料儲存在記憶體的NoSQL資料庫,包括了Memcached、Redis、Velocity、Tuple space等。其實像Memcached、Redis都是一種Key-Value資料架構的資料庫,只是這類資料庫改將資料儲存在記憶體中來提高讀取效率,大多用來快取常用網頁,加快傳遞網頁的速度,減少讀取硬碟的次數,不過系統關機後就無法保存。


03.圖學資料庫(Graph Database)

    -是指運用圖學架構來儲存節點間關係資料架構,例如用樹狀結構來組織從屬關係或網狀結構來儲存朋友關係,地理圖資系統通常也會用圖學資料庫來儲存地圖上每一點和鄰近點的關係,或用圖學資料庫來計算點與點之間最短的距離,也可以用同樣的概念來計算出人與人之間最短的交友距離。圖學資料庫最大的特性是對複雜性的擴充力,關係越複雜的資料越適合使用圖學資料庫。


04.文件資料庫(Document Database)

    -用來儲存非結構性的文件,例如最常見的非結構化資料就是HTML網頁。一個HTML網頁結構不像一般表格那樣有固定的欄位,每個欄位有特定資料類型和大小。例如網頁裡有Head和Body結構,Body元素中可能會有10個段落,段落中會有文字、連結、圖片等。文件資料庫的資料結構往往是鬆散的樹狀結構。



6 thoughts on “快速認識4類主流NoSQL資料庫

  1. MongoDB 是一個基於分佈式文件存儲的數據庫。由C++ 語言編寫。旨在為WEB 應用提供可擴展的高性能數據存儲解決方案。

    MongoDB 是一個介於關係數據庫和非關係數據庫之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。

    http://www.runoob.com/mongodb/mongodb-tutorial.html

    1. MongoDB 是一個介於關係(關聯)數據庫和非關係(非關聯)數據庫[NoSQL]之間的產品

      ▼關聯式資料庫 [SQL]
      ▼非關聯式資料庫 [NoSQL]

  2. 資料來源:https://news.ycombinator.com/item?id=1378684

    NoSQL is basically a hash table. They are much faster than relational databases since hash table lookups are quick O(1). However they don’t provide the ability to query the database like you can in SQL. For example, you cannot select all the items whose price is > $20 unless you iterate through every item in the NoSQL store yourself and check if the price is > $20.
    So why would you use NoSQL rather than just our own hashtable? NoSQL allows you to keep a hash table separate from the application server so you can devote an entire servers RAM to the table to increase performance. It also allows you to distribute the table across multiple machines to in essence create a big distributed hashtable. NoSQL is great replacement for any type of data that you would have previously accessed by doing a “SELECT * FROM table WHERE primary_key = ?”. Furthermore since NoSQL doesn’t have to do indexing, or any of the other overhead associated with a normal relational database it can be much faster.

    NoSQL基本上是一個哈希表。 它們比關係數據庫快得多,因為哈希表查找很快O(1)。 但是,它們不像SQL中那樣提供查詢數據庫的功能。 例如,您不能選擇價格> 20美元的所有商品,除非您自己遍歷NoSQL商店中的每個商品並檢查價格是否> 20美元。
    那你為什麼要使用NoSQL而不僅僅是我們自己的哈希表呢? NoSQL允許您將哈希表與應用程序服務器分開,這樣您就可以將整個服務器RAM用於表中以提高性能。 它還允許您跨多台計算機分發表,實質上創建一個大的分佈式哈希表。 NoSQL是您通過執行“SELECT * FROM table WHERE primary_key =?”之前訪問過的任何類型數據的絕佳替代品。 此外,由於NoSQL不必進行索引,或者與普通關係數據庫相關的任何其他開銷,因此它可以更快。

    —-

    This is not really accurate. Some NoSQL solutions, such as Memcached, MemcacheDB, and REDIS are key-value stores, i.e. hash tables.
    Other solutions, such as Cassandra, MongoDB, and CouchDB provide richer semantics that make it possible to perform efficient range queries and map-reduce queries. Cassandra and MongoDB both use indices to improve query performance.

    One of the primary advantages of the various NoSQL solutions is that they make it easy to scale horizontally, i.e. to add capacity by simply adding another host machine. This is in contrast to traditional relational databases, which are typically hard to scale horizontally.

    這不是很準確。 一些NoSQL解決方案,例如Memcached,MemcacheDB和REDIS是鍵值存儲,即哈希表。
    其他解決方案(如Cassandra,MongoDB和CouchDB)提供了更豐富的語義,可以執行有效的範圍查詢和映射減少查詢。 Cassandra和MongoDB都使用索引來提高查詢性能。

    各種NoSQL解決方案的主要優點之一是它們可以輕鬆地水平擴展,即通過簡單地添加另一台主機來增加容量。 這與傳統的關係數據庫形成對比,傳統的關係數據庫通常難以水平擴展。

  3. 資料來源: http://tx.liberal.ntu.edu.tw/InfoMgt/Jx/IS_IM/NoSQL.htm

    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個「主鍵」。

    關聯式資料庫之資料表
    編號 Last name First name age height color
    1923 Smith Jim 18 6′ 0″ Red
    3371 Dole Jun 34 5’8″ Brackish

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

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

    NoSQL資料庫之資料表
    鍵 值
    user1923_color Red
    user1923_age 1 18
    user3371_color Blue
    user3371_color Brackish
    user1923_height 6′ 0″
    user3371_age 34
    app_setting_width 450
    error_msg_457 There is no file %1 here
    error_message_1 There is no user with %1 name
    1923_name Jim
    user1923_name Jim Smith
    user1923_lname Smith
    Application_Installed true
    log_errors 1
    install_path C:\Windows\System32\Restricted
    ServerName localhost
    test test

    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 適用巨量網站,而「關聯式資料庫」還是較適合一般機構的管理資訊系統。

  4. DynamoDB

    資料來源:https://rickhw.github.io/2016/08/17/AWS/Study-Notes-DynamoDB/

    經常會跟 MongoDB 比較,概念很類似:

    Tables:
    -類似於 RDBMS 的 Table.
    -DynamoDB Table 是一個儲存集合單位。
    -相當於 MongoDB 的 Collection
    Items:
    -每個 Table 可以有多個 Items,相當於 RDBMS 的 Rows。
    -每個 Items 可包含多個 Attributes
    -相當於 MongoDB 的 Document
    Attributes:
    -每個 Items 由一個或多個 Attributes 組成
    -Attribute 的資料型態有

jash.liao@qq.com 發表迴響 取消回覆

你的電子郵件位址並不會被公開。 必要欄位標記為 *