Redis
- 所用語言:C/C++
- 特點:運行異常快
- 使用許可: BSD
- 協議:類 Telnet
- 有硬盤存儲支持的內存數據庫,
- 但自2.0版本以後可以將數據交換到硬盤(注意, 2.4以後版本不支持該特性!)
- Master-slave複製(見編注3)
- 雖然採用簡單數據或以鍵值索引的哈希表,但也支持複雜操作,例如 ZREVRANGEBYSCORE。
- INCR & co (適合計算極限值或統計數據)
- 支持 sets(同時也支持 union/diff/inter)
- 支持列表(同時也支持隊列;阻塞式 pop操作)
- 支持哈希表(帶有多個域的對象)
- 支持排序 sets(高得分表,適用於範圍查詢)
- Redis支持事務
- 支持將數據設置成過期數據(類似快速緩衝區設計)
- Pub/Sub允許用戶實現消息機制
最佳應用場景:適用於數據變化快且數據庫大小可遇見(適合內存容量)的應用程序。
例如:股票價格、數據分析、實時數據蒐集、實時通訊。
(編注3:Master-slave複製:如果同一時刻只有一臺服務器處理所有的複製請求,這被稱爲 Master-slave複製,通常應用在需要提供高可用性的服務器集羣。)
MongoDB
- 所用語言:C++
- 特點:保留了SQL一些友好的特性(查詢,索引)。
- 使用許可: AGPL(發起者: Apache)
- 協議: Custom, binary( BSON)
- Master/slave複製(支持自動錯誤恢復,使用 sets 複製)
- 內建分片機制
- 支持 javascript表達式查詢
- 可在服務器端執行任意的 javascript函數
- update-in-place支持比CouchDB更好
- 在數據存儲時採用內存到文件映射
- 對性能的關注超過對功能的要求
- 建議最好打開日誌功能(參數 –journal)
- 在32位操作系統上,數據庫大小限制在約2.5Gb
- 空數據庫大約佔 192Mb
- 採用 GridFS存儲大數據或元數據(不是真正的文件系統)
最佳應用場景:適用於需要動態查詢支持;需要使用索引而不是 map/reduce功能;需要對大數據庫有性能要求;需要使用 CouchDB但因爲數據改變太頻繁而佔滿內存的應用程序。
例如:你本打算採用 MySQL或 PostgreSQL,但因爲它們本身自帶的預定義欄讓你望而卻步。