【編者按】NoSQL擁有可擴展性和超高吞吐量的能力,然而這卻沒(méi)有發(fā)揮實(shí)際的優(yōu)勢,同時(shí)它不具備關(guān)系數據庫所有的智能操作,雖然具有無(wú)模式存儲的優(yōu)勢,卻無(wú)形中增加了代碼的復雜度。更多的應用證明使用NoSQL如此困難,它僅能成為SQL系統的構件而不是替代品。
這是我第二次為新項目深入調研NoSQL,也是第二次決定放棄NoSQL。跟我上次發(fā)表的“為什么選擇使用NoSQL如此困難”的結論一樣,我們最終決定放棄NoSQL,使用傳統關(guān)系型數據庫。
我從上個(gè)帖子的許多評論中得出評估NoSQL的一大問(wèn)題——其解決方案指向的核心是“取決于你的需求”。但盡管需求明確,仍需要花時(shí)間調研并搞清楚一個(gè)特定的NoSQL引擎是否正是你所需。有太多方面,你不可能評估所有的。更糟的是,你得費力的從engine-specific文檔中解讀出它是否能夠實(shí)現你的目標,那些文檔大多是類(lèi)似選擇關(guān)系型數據或者ACID的解決方案。
相比之下,如果使用關(guān)系型SQL數據庫,大多數情況下,不管是哪種特定產(chǎn)品,你都能知道它的工作方式,不需要反復比對選擇,也比較成熟穩定。選擇RDBMS能大大降低做錯誤決定的風(fēng)險。
NoSQL的吸引力在于擁有可擴展性和超高吞吐量的能力。就算其擴展性真的優(yōu)于RDBMS,然而現實(shí)世界的事實(shí)是,99%的應用程序都不會(huì )變更數據模型。比如Stock Exchange,它是訪(fǎng)問(wèn)量最大的網(wǎng)站之一,它們的商品服務(wù)器是運行在MSSQL上的。而且很難想象NoSQL需要多么巨大的存儲空間,購買(mǎi)一個(gè)60-core、高達6TB內存的服務(wù)器基本是不可能的。所以使用NoSQL的實(shí)際好處又是什么?
起初我認為無(wú)模式存儲是NoSQL的一個(gè)優(yōu)勢,但我已經(jīng)改變了我這個(gè)觀(guān)點(diǎn)。至少對于關(guān)系型頁(yè)面應用程序,無(wú)模式只不過(guò)是在增加代碼復雜度。此外,我喜歡結構,特別是數據結構。在數據歸檔、文件存儲、或事件日志這類(lèi)數據處理中無(wú)模式是很有用的,但是對于非社交類(lèi)的頁(yè)面應用程序卻沒(méi)有任何優(yōu)勢。
與關(guān)系數據庫比起來(lái),文檔存儲會(huì )使程序的每個(gè)部分都變得更加復雜。對于那種可以將文件名作為key,文件內容作為value的平行文件存儲(key-value數據庫),NoSQL是很有優(yōu)勢的,你可以在這類(lèi)文件中存儲任何所需內容,讀取的時(shí)候也會(huì )很方便,但這種存儲很腦殘。我的結論是,NoSQL在管理和優(yōu)化所存儲的文件時(shí)是非常復雜的,對于存儲的數據內容它一無(wú)所知。關(guān)系數據庫所有的智能操作NoSQL全都沒(méi)有,你必須用代碼來(lái)實(shí)現那些SQL自帶的功能,這對大多數應用程序來(lái)說(shuō)都是不合理的。
即使是建造NoSQL引擎的人也很難描述自己產(chǎn)品的用例,NoSQL的很多評論都在推銷(xiāo)自己的產(chǎn)品,卻并沒(méi)有提供任何特別令人信服的理由。很少有SaaS應用程序用非關(guān)系型數據,現實(shí)情況是,RDBMS系統要比NoSQL系統多的多,一旦所有的炒作逐漸停止,NoSQL引擎的數量降到合理的范圍,NoSQL將會(huì )成為這些合理應用范圍內的有用工具。在未來(lái),我認為NoSQL能夠成為SQL系統的構件而不是替代品,現在我依然堅持使用SQL。
原文鏈接: NoSQL is a no go once again——Why I'll be sticking with SQL for now
稿源:CSDN
聯(lián)系客服