為您的項目選擇正確的數據庫是一項復雜的任務。許多數據庫選項都適合不同的用例,很快就會導致決策疲勞。
我們希望這份備忘單提供高級指導,以找到符合您項目需求的正確服務并避免潛在的陷阱。
注意:Google 關于其數據庫用例的文檔有限。盡管我們盡力查看可用的內容并得出最佳選擇,但某些條目可能需要更準確。
一、國外數據庫產品
?二、國內數據庫產品
三、數據庫提供支持的 8 種數據結構
答案會根據您的用例而有所不同。數據可以在內存或磁盤上建立索引。同樣,數據格式也各不相同,例如數字、字符串、地理坐標等。系統可能是寫入密集型的,也可能是讀取密集型的。所有這些因素都會影響您對數據庫索引格式的選擇。
以下是一些用于索引數據的最流行的數據結構:
- Skiplist:常見的內存索引類型。用于Redis
- 哈希索引:“Map”數據結構(或“Collection”)的一種非常常見的實現
- SSTable:不可變的磁盤“Map”實現
- LSM樹:Skiplist + SSTable。高寫入吞吐量
- B 樹:基于磁盤的解決方案。一致的讀/寫性能
- 倒排索引:用于文檔索引。在Lucene中使用
- 后綴樹:用于字符串模式搜索
- R-tree:多維搜索,比如尋找最近鄰居
四、SQL 語言組件
- DDL:數據定義語言,如CREATE、ALTER、DROP
- DQL:數據查詢語言,如SELECT
- DML:數據操作語言,如INSERT、UPDATE、DELETE
- DCL:數據控制語言,如GRANT、REVOKE
- TCL:事務控制語言,如COMMIT、ROLLBACK
下圖顯示了該過程。請注意,不同數據庫的架構有所不同,該圖演示了一些常見的設計。
通過傳輸層協議(例如TCP)將SQL 語句發送到數據庫。
- SQL 語句被發送到命令解析器,在其中進行語法和語義分析,然后生成查詢樹。
- 查詢樹被發送到優化器。優化器創建執行計劃。
- 將執行計劃發送給執行者。執行器從執行中檢索數據。
- 訪問方法提供執行所需的數據獲取邏輯,從存儲引擎檢索數據。
- 訪問方法決定 SQL 語句是否是只讀的。如果查詢是只讀的(SELECT 語句),則會將其傳遞到緩沖區管理器以進行進一步處理。緩沖區管理器在緩存或數據文件中查找數據。
- ?如果語句是 UPDATE 或 INSERT,則將其傳遞到事務管理器以進行進一步處理。
- ?在事務期間,數據處于鎖定模式。這是由鎖管理器保證的。它還確保了事務的 ACID 屬性。
五、SQL查詢可視化
SQL語句由數據庫系統分幾個步驟執行,包括:
- 解析SQL語句并檢查其有效性
- 將 SQL 轉換為內部表示,例如關系代數
- 優化內部表示并創建利用索引信息的執行計劃
- 執行計劃并返回結果
SQL的執行非常復雜,涉及很多考慮因素,例如:
- 索引和緩存的使用
- 表連接的順序
- 并發控制
- 事物管理