數(shù)據(jù)模型
關(guān)系模型對數(shù)據(jù)進行了規(guī)范化,使之成為一種表格結(jié)構(gòu),也叫做表。這類表由多個行和列組成。采用一種架構(gòu)來嚴(yán)格定義表、列、索引、各個表之間的關(guān)系及其他數(shù)據(jù)庫元素。
非關(guān)系 (NoSQL) 數(shù)據(jù)庫一般不會實施任何架構(gòu)。一般使用分區(qū)鍵來檢索值、列集或半結(jié)構(gòu)化 JSON、XML 或其他包含相關(guān)項目屬性的文檔。
ACID 屬性
傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng) (RDBMS) 支持由 ACID(原子性、持續(xù)性、隔離性和一致性)定義的一組屬性。原子性表示“全有或全無”,即完全執(zhí)行或完全不執(zhí)行某項事務(wù)。一致性表示事務(wù)提交之后,數(shù)據(jù)必須符合數(shù)據(jù)庫架構(gòu)。隔離性要求并發(fā)事務(wù)應(yīng)分別執(zhí)行,互不干擾。持續(xù)性即能夠從意外系統(tǒng)故障或斷電情況中恢復(fù)到上一個已知狀態(tài)。
為了獲得更為靈活的可水平擴展的數(shù)據(jù)模型,NoSQL 數(shù)據(jù)庫通常會放棄傳統(tǒng)關(guān)系數(shù)據(jù)庫管理系統(tǒng) (RDBMS) 的部分 ACID 屬性。憑借這些特性,NoSQL 數(shù)據(jù)庫成了傳統(tǒng) RDBMS 在面臨架構(gòu)方面的挑戰(zhàn)時的最佳選擇。它可用來克服一系列問題,包括性能瓶頸、可擴展性、運營復(fù)雜性和不斷增加的管理和支持成本。
性能
SQL 數(shù)據(jù)庫性能一般取決于磁盤子系統(tǒng)。要獲得最佳性能,就需要優(yōu)化查詢、索引和表結(jié)構(gòu)。
NoSQL 數(shù)據(jù)庫性能通常由底層硬件集群大小、網(wǎng)絡(luò)延遲以及調(diào)用應(yīng)用程序來決定。
擴展
SQL 數(shù)據(jù)庫進行縱向擴展最簡單的方式是利用運行更快的硬件。? 要獲得跨分布式系統(tǒng)的關(guān)系表,就需要追加更多投資。
NoSQL 數(shù)據(jù)庫旨在利用低成本硬件的分布式集群進行橫向擴展,從而在不增加延遲的前提下提高吞吐量。
API
SQL 數(shù)據(jù)庫對存儲和檢索數(shù)據(jù)的請求由符合結(jié)構(gòu)化查詢語言 (SQL) 的查詢來傳達。
這些查詢由關(guān)系數(shù)據(jù)庫管理系統(tǒng) (RDBMS) 來解析和執(zhí)行。借助基于對象的 API,應(yīng)用開發(fā)人員可以輕松存儲和檢索內(nèi)存數(shù)據(jù)結(jié)構(gòu)。通過分區(qū)鍵,應(yīng)用可以查找鍵值對、列集或包含序列化應(yīng)用對象和屬性的半結(jié)構(gòu)化文檔。
工具
SQL 數(shù)據(jù)庫一般會提供一組豐富的工具,用于簡化數(shù)據(jù)庫驅(qū)動型應(yīng)用程序的開發(fā)流程。
而 NoSQL 數(shù)據(jù)庫一般會提供多種工具來管理集群和擴展。應(yīng)用程序是底層數(shù)據(jù)的主要接口。