各種內存NoSQL,什麼情況下才有必要使用,SQL性能真的很糟糕?

補充一點,我是想問何種情況下有必要使用NoSQL作為SQL的緩存。

現在經常能看到各種基於內存緩存的NoSQL,比如Redis和memcached。宣傳都是能提升多少系統性能,但是看到一個問題評論說並沒有提供預期的性能,同時SQL的性能沒有一些人想像的那樣糟糕。很想知道需要多大的系統負載才能把SQL壓垮,以至於需要用到NoSQL來作為緩存。


NoSQL 和 SQL 的分類本來就是錯誤的。

非關係型資料庫通常來講強項是定向到單個信息項進行操作,關係資料庫的強項是定義對一類信息的集合操作。這個區別使得很多後關係型資料庫產品更擅長對單個信息項的快速高性能分散式管理。這種能力普遍表現在MongoDB這樣的文檔資料庫到Redis這類KV資料庫。

傳統關係型資料庫的強項是能力均衡,而且新生代還真不一定就比前輩快,例如 Don"t Assume PostgreSQL is Slow - The Build 這篇文章提到的例子,這還是沒有內存表的PostgreSQL,如果換做MSSQL呢?別說MSSQL了,以前同事測試MySQL的內存表也比存儲表有至少33倍提升。

以一個PostgreSQL/Oracle/MSSQL這樣的資料庫為基礎,基本上總能滿足一個普通類型的信息服務需求,完全可以在將來真的遇到性能或分散式擴展的瓶頸時再組合使用非關係資料庫。

我司現在就是組合使用Redis和PostgreSQL,從目前的體驗看,Redis上早了。

性能評估其實比通常想像的複雜,不好一概而論。


不談應用場景就談性能這是耍流氓啊。。。


就我的經驗,這個得自己去切身用項目體驗。

我來給您出個題吧,用scrapy爬蟲去爬取知乎的問題頁面。把裡面的問題,回答,作者,主題都爬出來規整,放進SQL資料庫里,然後再放到NOSQL資料庫里,體會一下增刪查改的效率。

例如,查詢今天提問過感情問題的湖南女娃子有哪些。

我倒是無聊真的去做了:


用MySQL如果資料庫幾張關聯表的數據量都達到百萬級,或者最頻繁的資料庫操作的延遲達到0.5秒以上,你就可以考慮用Redis做cache layer了。


應對ddos必須nosql啊


如果對事務和join不怎麼需要,有不少流行的nosql可以取代sql作為主業務資料庫。

nosql的優勢可以是性能,可以是海量數據,可以是高可用,sql的優勢就是查詢分析很方便,可靠性更強。

nosql不一定就是用來當緩存,或當資料庫,只是一個叫法,適合拿來做什麼,看它的功能。


不太明確什麼nosql可以取代關係型資料庫


NoSQL和SQL應用在不同的場景,nosql存儲在內存中,sql是存儲在硬碟中。所以兩者沒法硬性的比較。SQL適合結構化數據,而NoSQL是非關聯性數據。NoSQL是隨著數據越來越多,SQL的優化已經不能滿足數據膨脹式的增長,而且SQL在分散式方面表現不是特別好,NoSQL就是在這種情況下產生的。


推薦閱讀:

怎樣理解分析王垠文章《SQL,NoSQL 以及資料庫的實質》的觀點?
Redis集群方案應該怎麼做?
MySQL為主,NoSQL為輔正成為網站技術的標配嗎?
NoSQL 會有注入問題嗎?
如何在node項目中引入redis做session持久化?

TAG:資料庫 | SQL | 資料庫性能 | NoSQL |