James Phillips談從關系型數據庫轉到NoSQL
James Phillips,Couchbase 的創始人之一。他最近的一場演講談到分布式面向文檔的數據庫和關系型數據庫模型之間的差別,以及從關系型數據庫轉到 NoSQL 時數據庫開發者需掌握的知識。InfoQ 就面向文檔的 NoSQL 的優缺點采訪了 James。
InfoQ:在談及數據持久和數據管理時,您提到了“大數據(Big Data)”和“大用戶(Big User)”,可否解釋這兩個概念之間的區別以及如何在二者之間做選擇?
James Phillips:大數據:需要收集并存儲大量信息,然后對信息進行分析和學習。它需要持續的高吞吐的寫(收集信息時)和讀(分析信息時)。數據本地化模型的優化方法是將“關聯的數據”放在物理上臨近的地方,從而確保分析的高效性。通常來說,它需要少量做數據插入的同步寫和少量做信息分析的同步讀。
大用戶:需要為隨機的讀和寫,以及大量并發讀和寫提供服務。數據本地化模型的優化方法則應該將“關聯的數據”盡可能地分散開,從而將讀和寫操作最大限度地分散到不同的服務器和轉軸之上。
InfoQ:NoSQL 數據庫與關系型數據庫相比,在數據建模和應用開發上其最主要的差別是什么?
James:關系型數據模型(及其數據建模)關注的是數據規范化的過程——將“記錄”分解成許多表以及表之間的關系,降低數據冗余。在過去,系統資源有限時,其意義非常大,因為每個字節的處理效率都很關鍵。而面向文檔的方式存儲數據則是更加自然的方式。其缺點是在某些情況下,數據要冗余,查詢模型也自然更復雜一些。但是,數據建模要簡單得多,因為現實世界中,信息并不總需要規范。而且,因為限制少了,應用開發者的生產力也提高了。
InfoQ:在演講中您談到面向文檔的數據庫。在哪些情況下,用面向文檔的數據庫優于關系型數據庫?
James:面向文檔的數據庫在以下場景中更勝一籌:需要數據模型的靈活性(數據管理過程中,需求變更無需變更 schema);低延遲、持久、高吞吐的讀寫性能;通過將數據和I/O方便地分散到廉價服務器和虛擬機之上,使基礎設施費用與應用程序性能成正比。
InfoQ:面向文檔的數據庫支持哪些數據持久和數據管理的架構模式?
James:大多數 NoSQL 及面向文檔的數據庫都支持多種持久化模型:從完全的同步策略(比如,只有當數據寫入磁盤或持久設備之后才報告寫操作成功)到多種異步存儲策略(比如,接受寫請求之后,在實際寫入磁盤之前就報告成功;或者,僅僅在完成數據備份之后即報告成功)。
InfoQ:面向文檔的數據庫有哪些缺點?應用架構師和開發者在使用這類數據庫時應考慮哪些問題?
James:目前,面向文檔的數據庫不直接支持連接(join),事務的支持通常只針對單個文檔,之前提到的數據持久靈活性也可算作缺點。它產生了數據冗余,在某些情況下,當數據變更時需要在多處更新數據。所以,基于面向文檔數據庫的應用要為處理相互依賴的更新做更多事情。將來,我們會看到使用外部事務監控器來填補目前對事務支持上的斷層。同樣,在應用層也有辦法實現諸如連接查詢之類的功能。
查看英文原文:James Phillips on Moving from Relational to NoSQL Databases