關系型數據庫和非關系型數據庫在存儲結構上有著很大的不同,而這種差異也導致他們在使用上有著很大的不同。本文從數據模型、運行方式、([查詢)效率和體系架構等方面對這兩種數據庫進行比較。

#### 數據模型
關系型數據庫源于帕雷托模型,它采用二維表存儲數據,表中的每一行表示一條記錄,表中的每列表示一種屬性。關系型數據庫建立在表的基礎上,且表之間可以建立鍵值引用,所以支持事務完整性、參照完整性、表達完整性等特性,這就是關系型數據庫的主要特點。
而非關系型數據庫源于列式數據庫,它不像關系型數據庫那樣采用表的形式,而是采用一種被稱為結構化查找表(structured query table)的一種文檔存儲結構,在存儲過程中,將數據轉換為一個個JSON格式的文檔存儲起來。這樣做的好處是能夠減少冗余,同時還更加靈活,比如結構可以在不同的文檔中不同。
#### 運行方式
關系型數據庫具有完整的數據的搜索、索引和檢索功能。它的查詢語句按照一定的標準編寫,如 SQL 語言的查詢子句。在理論上,操作關系型數據庫只需要提供完善的索引和分布式跟蹤技術,即可輕松滿足對整體數據的查找和更新。
與關系型數據庫不同,非關系型數據庫有一種新穎的查詢方式,即無需按照某個特定標準寫查詢語句。它的查詢語言是基于JSON提供的屬性條件查詢技術,可以以更靈活的方式來檢索數據,如基于范圍的查詢,基于points-in-polygon 或某種數值條件的查詢。且非關系型數據庫的查詢語句可以添加不同的函數,比如聚合函數,來獲得復雜的信息。
#### 查詢效率
從查詢效率上來說,關系型數據庫的高性能查詢也相當可觀。因為關系型數據庫幾乎不會處理文檔本身,而完全依賴于索引來將數據快速組織起來,所以其大多數查詢操作的時間復雜度都是 O(log n) 級別的,且查詢效率受到索引的大小及索引建立的方式有很大的影響。
相比較之下,在對非關系型數據庫進行查詢時,由于不需要維護索引這一步驟,所以一般而言,查詢效率會明顯高于關系型數據庫。非關系型數據庫支持范圍查找,只要定義范圍,就可以快速找到文檔,這大大減少了時間成本。
#### 開發成本
對于關系型數據庫,在采用之前,一般都需要對它的表結構進行設計,比如定義字段類型,建立唯一索引等,這一過程需要花費相當多的時間和精力,而且有可能出現數據冗余等情況。另外,使用關系型數據庫還會涉及作業安