大數據“復活”記
824
2025-04-03
由于世界上存在大量數據,幾乎不可能在沒有適當數據庫的情況下管理數據。在當今市場上,存在著不同種類的數據庫,決定最適合您業務的數據庫可能是一項艱巨的任務。因此,在這篇關于SQL與 NoSQL 的文章中,我將比較這兩種類型的數據庫,以幫助您選擇哪種類型的數據庫可以幫助您和您的組織。
本文將涵蓋以下主題:
What is SQL?
What is NoSQL?
SQL vs NoSQL
Examples of SQL and NoSQL
What is MySQL?
What is MongoDB?
MySQL vs MongoDB
Demo: Insert values into tables and collections
所以,讓我們開始吧,伙計們!!
什么是 SQL?
SQL又名結構化查詢語言是關系數據庫的核心,用于訪問和管理數據庫。這種語言用于以表格的形式從結構化數據格式中操作和檢索數據,并保存這些表格之間的關系。關系可能如下:
一對一關系是指表 A 中的一行與表 B 中的一行相關。
一對多關系是指表 A 中的單行與表 B 中的多行相關。
多對多關系是指表 A 中的許多行可以與表 B 中的許多行相關。
自引用關系是指表 A 中的記錄與同一個表本身相關。
現在,本文接下來讓我們了解什么是 NoSQL?
什么是 NoSQL?
NoSQL,或者最常稱為 Not only SQL 數據庫,提供了一種用于存儲和檢索非結構化數據的機制。這種類型的數據庫可以處理海量數據并具有動態模式。因此,NoSQL 數據庫沒有特定的查詢語言,沒有或只有很少的關系,而是以集合和文檔的格式存儲數據。
因此,一個數據庫可以有“n”個集合,每個集合可以有“m?”個文檔。考慮下面的例子。
正如你所看到的上圖中,有一個員工數據庫,其中有 2 個集合,即員工和項目集合。現在,這些集合中的每一個都有文檔,它們基本上是數據值。因此,您可以假設集合是您的表,而文檔是您在表中的字段。
好的,既然您知道什么是 SQL 和 NoSQL,現在讓我們看看這些數據庫是如何相互對抗的。
SQL 與 NoSQL
因此,面對這種情況,我將基于以下理由比較這兩個數據庫:
Type of Database
Schema
Database Categories
Complex Queries
Hierarchical Data Storage
Scalability
Language
Online Processing
Base Properties
External Support
數據庫類型
SQL 被稱為關系數據庫,因為它將結構化數據組織成定義的行和列,每個表都與數據庫中的其他表相關。
另一方面,NoSQL 被稱為非關系型數據庫。這是因為數據以集合的形式存儲,它們之間沒有或幾乎沒有關系。
架構
SQL 需要為結構化數據預定義架構。因此,在開始使用 SQL 提取和操作數據之前,您需要確保您的數據結構以表格的形式預先定義。
但是,NoSQL 具有非結構化數據的動態模式。因此,如果您使用的是 NoSQL 數據庫,則不存在預定義的架構,數據的完整架構完全取決于您希望如何存儲數據。即您想在文檔和集合中存儲哪些字段。
數據庫類別
在?SQL數據庫是牛逼能夠根據數據庫。因此,您可以擁有 'n' 個相互關聯的表,并且每個表都可以有行和列,用于在表的每個單元格中存儲數據。
現在,如果我們談論 NoSQL 數據庫,那么 NoSQL 數據庫有以下幾類數據庫:
文檔數據庫- 它將每個鍵與稱為文檔的復雜數據結構配對。它可以包含許多不同的鍵值對、鍵數組對甚至嵌套文檔
鍵值存儲——它們是最簡單的 NoSQL 數據庫。數據庫中的每個項目都作為屬性名稱或鍵與其值一起存儲。
圖存儲- 它們用于存儲有關網絡的信息,例如社交關系。圖存儲包括 Neo4J 和 HyperGraphDB。
寬列存儲——Cassandra和HBase等寬列存儲針對大型數據集的查詢進行了優化,并將數據列存儲在一起,而不是行。
因此,SQL 數據庫以表的形式存儲數據,NoSQL 數據庫以鍵值對、文檔、圖形數據庫或寬列存儲的形式存儲數據?。
復雜查詢
與 NoSQL 相比,SQL更適合復雜的查詢環境,因為 SQL 數據庫中的架構是結構化的,并且數據以表格格式存儲。因此,即使您希望在外部查詢中應用具有許多子查詢的嵌套查詢,您也可以通過使用正確的表名和列名輕松實現。
現在,NoSQL 數據庫不適合復雜查詢的原因是因為 NoSQL 數據庫不是使用 SQL 等標準語言進行查詢的。
分層數據存儲
好吧,當我們根據這個因素比較數據庫時,與 SQL 數據庫相比,NoSQL 更適合分層存儲?。
這是因為隨著表數量的增加,維護它們之間關系的復雜性也在不斷增加。因此,在這種情況下,您無法將具有許多列的大量表相互關聯。但是,當您考慮 NoSQL 數據庫時,這種數據庫更適合分層數據存儲,因為它遵循類似于 JSON 數據的鍵值對存儲數據的方式。
可擴展性
SQL 數據庫可垂直擴展。您可以通過優化硬件(例如增加 CPU、RAM、SSD 等)來對數據服務器進行負載平衡。
另一方面,NoSQL 數據庫是水平可擴展的。您可以通過向集群添加更多服務器來處理大量流量來執行負載平衡。
語言
在SQL數據庫有一個特定的語言,它不從數據庫到數據庫的不同而不同。這種數據庫使用SQL(結構化查詢語言)來檢索和操作數據。
在NoSQL數據庫沒有特定的語言用于查詢,并從數據庫到數據庫的變化。在 NoSQL 數據庫中,查詢主要集中在文檔的集合上,該語言被稱為 UnQL(非結構化查詢語言)。
在線處理
在比較 SQL 和 NoSQL 時,基于這個因素,??SQL 數據庫用于重型事務型應用程序。嗯,這是因為 SQL 提供了數據的原子性、完整性和穩定性。此外,您可以將 NoSQL 用于事務目的,但是,它在高負載和復雜的事務應用程序中仍然不夠穩定。所以,你可以理解SQL主要用于OLTP(Online Transactional Processing),NoSQL主要用于OLAP(Online Analytical Processing)。
基礎屬性
SQL 數據庫基于ACID 屬性?(原子性、一致性、隔離性和持久性),而 NoSQL 數據庫基于Brewers CAP 定理(一致性、可用性和分區容錯性)。
讓我先解釋一下 ACID 屬性:
原子性:原子性是指完全完成或失敗的事務,其中事務是指數據的單個邏輯操作。這意味著如果任何事務的一部分失敗,則整個事務失敗并且數據庫狀態保持不變。
一致性:一致性確保數據必須滿足所有驗證規則。簡而言之,您可以說您的事務永遠不會在未完成其狀態的情況下離開數據庫。
隔離:隔離的主要目標是并發控制。
持久性:持久性意味著如果事務已提交,它將發生介于兩者之間的任何事情,例如斷電、崩潰或任何類型的錯誤。
來到CAP定理,
Brewers CAP 定理指出,一個數據庫最多只能實現三個保證中的兩個:一致性、可用性和分區容錯性。這里
一致性:所有節點同時看到相同的數據。
可用性:保證每個請求是否成功或失敗。
分區公差:???uarantees一個系統是否仍舊盡管該系統的一部分信息丟失或故障運行。
NoSQL 無法同時提供一致性和高可用性。
外部支持
自從 SQL 出現 40 多年以來,所有 SQL 供應商都提供出色的支持。但是,對于某些 NoSQL 數據庫,只有有限的專家可用,您仍然必須依靠社區支持來部署您的大規模 NoSQL 部署。這是因為 NoSQL 是在 2000 年代后期出現的,人們還沒有對其進行太多探索。
所以,如果我必須在這篇關于 SQL vs NoSQL 的文章中總結 SQL 和 NoSQL 的區別,你可以參考下表。
表 1:?SQL 和 NoSQL 之間的差異——SQL 與 NoSQL
所以,伙計們,到此我們結束了 SQL 和 NoSQL 之間的對峙。?現在,我們已經討論了很多關于 SQL 和 NoSQL 的內容,讓我向您展示一些相同的示例。
SQL 和 NoSQL 的示例
SQL 和 NoSQL 的示例如下:
現在,最流行的 SQL 和 NoSQL 數據庫是MySQL和MongoDB。
所以,接下來在這篇關于 SQL 與 NoSQL 的文章中,我們將比較 MySQL 和 MongoDB。但是,在此之前,您還可以觀看有關 SQL 與 NoSQL 的視頻。
什么是 MySQL?
MySQL是一個開源的關系數據庫管理系統,可在許多平臺上運行。它提供多用戶訪問以支持許多存儲引擎,并由 Oracle 提供支持。因此,您可以從 Oracle 購買商業許可版本以獲得高級支持服務。
MySQL的特點如下:
易于管理?- 該軟件很容易下載,并且還使用事件調度程序來自動安排任務。
強大的事務支持——擁有 ACID(原子性、一致性、隔離性、持久性)屬性,還允許分布式多版本支持。
全面的應用程序開發–?MySQL具有插件庫,可將數據庫嵌入到任何應用程序中。它還支持用于應用程序開發的存儲過程、觸發器、函數、視圖等。可以參考RDS教程,了解亞馬遜的RDBMS。
高性能– 提供具有不同內存緩存和表索引分區的快速加載實用程序。
低總體擁有成本——這降低了許可成本和硬件支出。
開源 & 24 * 7 支持——這個 RDBMS 可以在任何平臺上使用,并為開源和企業版提供 24 * 7 支持。
安全數據保護?– MySQL 支持強大的機制,以確保只有授權用戶才能訪問數據庫。
高可用性?– MySQL 可以運行高速主/從復制配置,并提供集群服務器。
可擴展性和靈活性– 使用 MySQL,您可以運行深度嵌入的應用程序并創建包含大量數據的數據倉庫。
接下來,在這篇文章中讓我們了解一下什么是MongoDB?
什么是MongoDB?
MongoDB是一個非關系型數據庫,它將數據存儲在文檔中。這種類型的數據庫將相關信息存儲在一起以進行快速查詢處理。
MongoDB的特點如下:
索引:創建索引是為了提高搜索性能。
復制:?MongoDB 將數據分布在不同的機器上。
Ad-hoc 查詢:它通過索引 BSON 文檔和使用獨特的查詢語言來支持臨時查詢。
無模式:它非常靈活,因為它的無模式數據庫是用 C++ 編寫的。
分片:?MongoDB 使用分片來支持具有非常大的數據集和高吞吐量操作的部署。
好的,那么,既然您知道什么是 MySQL 和 MongoDB,現在讓我們看看這些數據庫是如何相互對抗的。
MySQL 與 MongoDB
因此,面對這種情況,我將基于以下理由比較這兩個數據庫:
Query Language
Flexibility of Schema
Relationships
Security
Performance
Support
Key Features
Replication
Usage
Active Community
查詢語言
MySQL 使用結構化查詢語言(SQL)。這種語言很簡單,主要由用于檢索和操作數據的 DDL、DML DCL 和 TCL 命令組成。?另一方面,MongoDB使用非結構化查詢語言。所以,查詢語言基本上就是MongoDB的查詢語言。請參考下圖。
架構的靈活性
MySQL 具有良好的結構化數據架構靈活性,因為您只需要明確定義表和列。現在,另一方面,MongoDB對模式設計沒有限制。您可以直接提及集合中的幾個文檔,而這些文檔之間沒有任何關系。但是,MongoDB 的唯一問題是您需要根據訪問數據的方式優化架構。
關系
基于這個因素比較 MySQL 和 MongoDB 時,MySQL 支持借助 JOIN 語句的關系,但MongoDB 不支持 JOIN 語句。但是,它支持將一個文檔放在另一個文檔中(也稱為文檔嵌入)和多維數據類型,例如數組。
安全
MySQL 基本上使用基于特權的安全模型。這種安全模型對用戶進行身份驗證并促進用戶對特定數據庫的特權。
另一方面,MongoDB 使用基于角色的訪問控制和一組靈活的權限,提供授權和身份驗證等安全功能。
表現
在這個參數上比較 MySQL 和 MongoDB 時,讓我告訴你,當考慮大型數據庫時,MySQL 與 MongoDB 相比相當慢。這主要是因為 MySQL 無法用于處理大量非結構化數據。
但是,MongoDB 具有處理大型非結構化數據的能力。因此,在考慮大型數據庫的情況下,它比 MySQL 更快,因為它允許用戶以減少服務器負載的方式進行查詢。
注意:因此沒有硬性規定 MongoDB 會一直為您的數據更快,這完全取決于您的數據和基礎設施。
支持
好吧,它們都? 為安全修復、維護版本、錯誤修復、補丁和更新提供了 24*7 的出色支持。因此,基于此參數,它們之間沒有區別。
主要特征
MySQL和MongoDB的主要特性可以參考下圖:
復制
MySQL 支持主從復制和主主復制。另一方面,MongoDB支持內置復制、分片和自動選舉。因此,借助 MongoDB 中的自動選舉,您可以設置另一個或輔助數據庫以在主數據庫出現故障時自動接管。
用法
可以參考下圖了解在何處使用 MySQL 和 MongoDB:
活躍社區
基于這個因素比較 MySQL 和 MongoDB 時,MySQL 數據庫提供了比 MongoDB 更好的社區,因為它由 Oracle Corporation擁有和維護。
所以,如果非要總結一下 MySQL 和 MongoDB 的區別,大家可以參考下表。
Triggers & SSL Support
Provides text searching and indexing
Query caching
Integrated replication support
Different storage engines with various
觸發器和 SSL 支持
提供文本搜索和索引
查詢緩存
集成復制支持
不同的存儲引擎具有不同的
Auto-sharding
Comprehensive secondary indexes
In-memory speed
Native replication
Embedded data models support
自動分片
綜合二級指標
內存速度
本機復制
嵌入式數據模型支持
Best fit for data with tables and rows
Works better for small datasets
Frequent updates
Strong dependency on multi-row transactions
Modify large volume of records
最適合包含表和行的數據
更適合小數據集
經常更新
對多行事務的強依賴
修改大量記錄
Best fit for unstructured data
Works better for large datasets
High write loads
High availability in an unstable environment
Data is location-based
最適合非結構化數據
更適用于大型數據集
高寫入負載
不穩定環境下的高可用性
數據是基于位置的
所以,伙計們,到此我們結束了 MySQL 和 MongoDB 之間的對峙。現在,對 MySQL 和 MongoDB 了解得更多可能會在您的腦海中提出一個問題,即企業應該選擇 MySQL 還是 MongoDB?
好吧,他們兩個之間沒有明顯的贏家。數據庫的選擇完全取決于數據庫的架構以及您希望如何訪問它。然而,當您擁有固定架構、高事務、低維護、數據安全且預算有限時,您可以使用 MySQL,而當您擁有不穩定的架構、高可用性、云計算和內置分片時,您可以使用 MongoDB。
因此,對于其中哪一個是最好的,不會有任何最終裁決,因為這些中的每一個都根據您的要求表現出色。
現在,您知道 MySQL 和 MongoDB 之間的區別,接下來在這篇關于 SQL 與 NoSQL 的文章中,讓我向您展示如何分別將數據插入 MySQL Workbench 和 MongoDB Compass 的表和集合中。
演示:將數據插入到表和集合中
讓我們從使用 MySQL Workbench 將數據插入表開始。
使用 MySQL Workbench 將數據插入表中
要使用 MySQL Workbench 將數據插入表中,您可以按照以下步驟操作:
步驟 1:打開 MySQL Workbench 并創建連接。要了解如何創建連接,請參閱MySQL Workbench 教程。
第 2 步:現在,創建連接后,打開連接,然后您將被重定向到以下儀表板。
第 3 步:現在要創建數據庫和表,請按照以下查詢操作:
//Create Database CREATE DATABASE Employee_Info; //Use Database USE Employee_Info; //Create Table CREATE TABLE Employee (EmpID int, EmpFname varchar(255), EmpLname varchar(255), Age int, EmailID varchar(255), PhoneNo int8, Address varchar(255));
Step4:現在,一旦你的表被創建,要將值插入到表中,使用 INSERT INTO 語法如下:
//Insert Data into a Table INSERT INTO Employee(EmpID, EmpFname, EmpLname,Age, EmailID, PhoneNo, Address) VALUES ('1', 'Vardhan','Kumar', '22', 'vardy@abc.com', '9876543210', 'Delhi');
第 5 步:當您查看表格時,您將看到如下輸出。
現在,在這篇關于 SQL 與 NoSQL 的文章中,讓我們看看如何在 MongoDB Compass 中創建數據庫和集合。
使用 MongoDB Compass 將數據插入到集合中
要使用 MongoDB Compass 將數據插入表中,您可以按照以下步驟操作:
第 1 步:打開MongoDB Compass并創建一個主機。創建主機后,單擊“連接”。請參閱下文。
第 2 步:現在,一旦您的主機連接,要創建數據庫,請單擊“創建數據庫”選項并提及“數據庫”和“集合名稱”。
第 3 步:現在,打開您的數據庫,然后選擇集合。這里我選擇了samplecollection。要將文檔添加到集合中,請選擇“插入文檔”選項并提及參數。這里我提到了 EmpID 和 EmpName。
現在,我們結束對SQL 與 NoSQL 的比較?。我希望你們喜歡這篇文章并理解所有的差異。因此,如果您已閱讀本文,您可能對哪種數據庫適合您的需求有一個清晰的認識。
【綻放吧!數據庫】有獎征文火熱進行中:https://bbs.huaweicloud.com/blogs/285617
NoSQL SQL 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。