如何向你的祖母解釋 SQL 和 NoSQL 之間的區別

如何向你的祖母解釋 SQL 和 NoSQL 之間的區別

開發人員做出的最重要的決定之一是使用哪個數據庫。 多年來,選項僅限於支持結構化查詢語言 (SQL) 的各種關係數據庫選項。 其中包括 MS SQL Server、Oracle、MySQL、PostgreSQL、DB2 等等。

在過去的 15 年裡,許多新的數據庫以 No-SQL 方式進入市場。 其中包括 Redis 和 Amazon DynamoDB 等鍵值存儲、Cassandra 和 HBase 等廣泛的列數據庫、MongoDB 和 Couchbase 等文檔存儲以及 Elasticsearch 和 Solr 等圖形數據庫和搜索引擎。

在本文中,我們將嘗試了解 SQL 和 NoSQL,但不深入了解它們的功能。
另外,我們一路上會享受一些樂趣。

向奶奶解釋 SQL

奶奶,想像一下我不是您唯一的孫子。 相反,爸爸媽媽像兔子一樣相愛,他們生了 100 個孩子,然後又收養了 50 個。

所以,你愛我們所有人,不想忘記我們的任何一個名字、生日、最喜歡的冰淇淋口味、衣服尺碼、愛好、配偶名字、後代名字和其他超級重要的事實。 然而,讓我們面對現實吧。 你已經 85 歲了,再好的記憶力也無法應付了。

幸運的是,作為你的孫子中最聰明的一個,我可以提供幫助。 所以我來到你家,拿出一些紙,請你在開始之前烤一些餅乾。

在一張紙上,我們列出了一個名為“孫子”。 每一個 孫子 記錄了一些關於他的重要信息,包括一個唯一的號碼,現在將表明如何 孫子 他是。 另外,為了便於組織,我們在列表頂部寫出命名屬性,以便我們始終知道列表包含哪些信息。

id
名稱
生日
上次訪問
服裝尺碼
最喜歡的冰淇淋
採用

1

09-22-1992
09-01-2019
L
薄荷巧克力

2
傑西卡
07-21-1992
02-22-2018
M
石板路

......我們繼續這個清單!

孫輩名單

過了一會兒,你就明白了一切,我們的清單就快完成了! 然而,你轉向我說:“我們忘了為配偶、愛好、孫子們增加空間!” 但不,我們沒有忘記! 這進一步需要一張新紙。

所以我拿出另一張紙,在上面我們稱之為清單 配偶。 我們再次將對我們重要的屬性添加到列表頂部並開始添加行。

id
孫子id
名稱
生日

1
2
約翰福音
06-01-1988

2
9
費爾南達
03-05-1985

……更多配偶!

配偶名單

在這個階段,我向祖母解釋說,如果她想知道誰和誰結婚了,那麼她只需要匹配 id 在列表中 孫子 с 孫子id 在配偶名單中。

吃了幾十塊餅乾後,我需要小睡一下。 “奶奶,你還能繼續嗎?” 我要去睡午覺了。

幾個小時後我就回來。 你真棒,奶奶! 除了列表之外,一切看起來都很棒 愛好。 清單上大約有1000個愛好。 其中大部分都是重複的; 發生了什麼事?

孫子id
愛好

1
自行車

4
自行車

3
自行車

7
運行

11
自行車

…我們繼續!

對不起,我完全忘了說! 使用一個列表,您只能跟踪 愛好。 然後在另一個列表中我們需要跟踪 孫子誰在做這個 愛好。 我們將稱之為 《共同清單》。 看到你不喜歡,我就擔心了,然後回到列表模式。

id
愛好

1
自行車

2
運行

3
游泳的

……更多的愛好!

興趣愛好清單

一旦我們有了愛好列表,我們就創建第二個列表並將其命名為“孫子的愛好“。

孫子id
愛好id

4
1

3
1

7
2

…更多的!

孫輩愛好總表

經過所有這些工作,奶奶現在有了一個很酷的記憶系統來記錄她整個驚人的大家庭。 然後——為了讓我停留得更久——她問了一個神奇的問題:“你從哪裡學會做這一切的?”

關係數據庫

關係數據庫是一組正式描述的表(在我們的示例中,這些是工作表),您可以從中訪問 根據 或者以各種方式收集它們,而無需重新組織表格 數據庫。 有許多不同類型的關係數據庫,但不幸的是,一張紙上的列表並不是其中之一。

最流行的關係數據庫的標誌是 SQL(結構化查詢語言)查詢語言。 多虧了他,如果奶奶把她的記憶系統轉移到電腦上,她就能很快得到諸如“去年誰沒有來看我,結婚了,沒有愛好?”之類的問題的答案。

最流行的 SQL 數據庫管理系統之一是開源 MySQL。 它主要作為基於 Web 的軟件應用程序的關係數據庫管理系統 (RDBMS) 來實現。

MySQL 的一些關鍵特性:

  • 它是相當知名、廣泛使用和廣泛測試的。
  • 有許多熟練的開發人員擁有 SQL 和關係數據庫的經驗。
  • 數據存儲在各種表中,這使得使用主鍵和外鍵(標識符)可以輕鬆建立關係。
  • 它易於使用且高效,非常適合大大小小的企業。
  • 源代碼遵循 GNU 通用公共許可證的條款。

現在忘記了 所有.

向奶奶解釋NoSQL

奶奶,我們有一個大家庭。 她有150個孫子! 他們中的許多人結婚了,有了孩子,有自己喜歡的東西等等。 在你這個年紀,不可能記住我們所有人的一切。 你需要的是一個記憶系統!

幸運的是,我 沒有 希望你忘記我的生日和最喜歡的冰淇淋口味,我可以幫忙。 所以我跑到最近的商店,拿了一個筆記本,然後回到你家。

我採取的第一步是在筆記本封面上用粗體大字寫下“孫子”。 然後我翻到第一頁,開始寫下你需要記住的關於我的一切。 幾分鐘後,頁面看起來像這樣。

{ 
  "_id":"dkdigiye82gd87gd99dg87gd",
  "name":"Cody",
  "birthday":"09-12-2006",
  "last_visit":"09-02-2019",
  "clothing_size":"XL",
  "favorite_ice_cream":"Fudge caramel",
  "adopted":false,
  "hobbies":[ 
     "video games",
     "computers",
     "cooking"
  ],
  "spouse":null,
  "kids":[ 

  ],
  "favorite_picture":"file://scrapbook-103/christmas-2010.jpg",
  "misc_notes":"Prefers ice-cream cake on birthday instead of chocolate cake!"
}

Я:“看來一切都準備好了!”
祖母:“等等,剩下的孫子呢?”
Я: “對,就是這樣。 然後為每個人分配一頁。”
祖母:“我需要為每個人寫下所有相同的信息,就像我為你所做的那樣嗎?”
Я:“不,只要你願意。 讓我展示。”
我抓起祖母的筆,翻了一頁,飛快地記下了我最不喜歡的表弟的信息。

{ 
  "_id":"dh97dhs9b39397ss001",
  "name":"Tanner",
  "birthday":"09-12-2008",
  "clothing_size":"S",
  "friend_count":0,
  "favorite_picture":null,
  "remember":"Born on same day as Cody but not as important"
}

每當祖母需要記住有關孫子的事情時,她只需要導航到孫子筆記本中的正確頁面即可。 有關他們的所有信息都將存儲在他們的頁面上,她可以快速更改和更新。

當一切都完成後,她問了一個神奇的問題:“你從哪裡學會做這一切的?”

NoSQL 數據庫

有許多 NoSQL 數據庫 (“不僅僅是 SQL”)。 在我們的例子中,我們已經展示了 文檔數據庫。 NoSQL 數據庫以排除關係數據庫中使用的表關係的方式對數據進行建模。 這些數據庫在 2000 年代初開始受到那些由於明確的擴展要求而需要基於雲的數據庫集群的公司(例如 Facebook)的歡迎。 在此類應用程序中,數據一致性遠沒有性能和可擴展性那麼重要。

最初,NoSQL 數據庫通常用於利基數據管理任務。 基本上,當涉及到 Web 和雲應用程序時,NoSQL 數據庫處理和分發大量數據。 NoSQL 工程師還喜歡靈活的數據模式(或缺乏它),以便在更新的應用程序中可以快速更改。

NoSQL 的主要特點:

  • 非常靈活的數據存儲方式
  • 水平擴展至集群
  • 每個持久性/傳播可能的排序
  • 使用唯一鍵標識的文檔

詳細對比

MySQL 需要一個定義好的結構化模式。
NoSQL 允許您將任何數據存儲在“文檔”中。

MySQL 擁有一個龐大的社區。
NoSQL 擁有一個規模雖小但增長迅速的社區。

NoSQL 易於擴展。
MySQL 需要更多的可管理性。

MySQL 使用 SQL,它被用於許多類型的數據庫中。
NoSQL 是一種基於數據庫的設計,具有流行的實現。

MySQL 使用標準查詢語言(SQL)。
NoSQL 不使用標準查詢語言。

MySQL 有許多出色的報告工具​​。
NoSQL 有多種難以標準化的報告工具​​。

MySQL 可以顯示大數據的性能問題。
NoSQL 在大數據上提供了出色的性能。

想法8base

該公司 8鹼基在我工作的地方,我們為每個項目提供一個工作區,其中包含託管在 AWS 上的 Aurora MySQL 關係數據庫。 雖然當您的應用程序需要高性能和可擴展性時,NoSQL 是一個合理的選擇,但我們相信,在構建 SaaS 應用程序和其他業務軟件時,DBMS 提供的強大數據一致性至關重要。

我們認為,對於構建需要報告、事務完整性和定義明確的數據模型的業務應用程序的初創公司和開發人員來說,投資關係數據庫是正確的選擇。

訪問 8base.com 了解有關使用 Aurora、Serverless 和 GraphQL 進行開發的更多信息 這裡.

來源: www.habr.com

添加評論