1.實質。
非關系型數據庫的實質:非關系型數據庫產品是傳統關系型數據庫的功能閹割版本,通過減少用不到或很少用的功能,來大幅度提高產品性能。
2.價格。
目前基本上大部分主流的非關系型數據庫都是免費的。而比較有名氣的關系型數據庫,比如Oracle、DB2、MSSQL是收費的。雖然Mysql免費,但它需要做很多工作才能正式用於生產。
3.功能。
實際開發中,有很多業務需求,其實並不需要完整的關系型數據庫功能,非關系型數據庫的功能就足夠使用了。這種情況下,使用性能更高、成本更低的非關系型數據庫當然是更明智的選擇。
非關系型數據庫的優勢:
1. 性能
NOSQL是基於鍵值對的,可以想象成表中的主鍵和值的對應關系,而且不需要經過SQL層的解析,所以性能非常高。
2. 可擴展性
同樣也是因為基於鍵值對,數據之間沒有耦合性,所以非常容易水平擴展。
關系型數據庫的優勢:
1. 復雜查詢
可以用SQL語句方便的在一個表以及多個表之間做非常復雜的數據查詢。
2. 事務支持
使得對於安全性能很高的數據訪問要求得以實現。
對於這兩類數據庫,對方的優勢就是自己的弱勢,反之亦然。
但是近年來這兩種數據庫都在向着另外一個方向進化。例如:
NOSQL數據庫慢慢開始具備SQL數據庫的一些復雜查詢功能的雛形,比如Couchbase的index以及MONGO的復雜查詢。對於事務的支持也可以用一些系統級的原子操作來實現例如樂觀鎖之類的方法來曲線救國。
SQL數據庫也開始慢慢進化,比如HandlerSocker技術的實現,可以在MYSQL上實現對於SQL層的穿透,用NOSQL的方式訪問數據庫,性能可以上可以達到甚至超越NOSQL數據庫。可擴展性上例如Percona Server,可以實現無中心化的集群。
雖然這兩極都因為各自的弱勢而開始進化出另一極的一些特性,但是這些特性的增加也會消弱其本來具備的優勢,比如Couchbase上的index的增加會逐步降低數據庫的讀寫性能。所以怎樣構建系統的短期和長期存儲策略,用好他們各自的強項是架構師需要好好考慮的重要問題。
鏈接:http://www.zhihu.com/question/24225007
分析下mysql 與mongodb的特點與優劣:
再來分析下應用場景,
a.如果需要將mongodb作為后端db來代替mysql使用,即這里mysql與mongodb 屬於平行級別,那么,這樣的使用可能有以下幾種情況的考量:
(1)mongodb所負責部分以文檔形式存儲,能夠有較好的代碼親和性,json格式的直接寫入方便。(如日志之類)
(2)從data models設計階段就將原子性考慮於其中,無需事務之類的輔助。開發用如nodejs之類的語言來進行開發,對開發比較方便。
(3)mongodb本身的failover機制,無需使用如MHA之類的方式實現。
這種情況也是不少的,我手上的游戲就是有nodejs+mongodb的,用戶總量也是千萬級別的,流水什么還不錯。
b.將mongodb作為類似redis ,memcache來做緩存db,為mysql提供服務,或是后端日志收集分析。
考慮到mongodb屬於nosql型數據庫,sql語句與數據結構不如mysql那么親和 ,也會有很多時候將mongodb做為輔助mysql而使用的類redis memcache 之類的緩存db來使用。
亦或是僅作日志收集分析。
http://bbs.csdn.net/topics/390617341