云時代信息系統的數據庫

quguiliang 13年前發布 | 1K 次閱讀 紋理圖案 ActionScript
數據庫是信息系統的核心,一般數據(信息)無論經過怎樣過程的邏輯計算最終都要持久化到數據庫中。 基于“云計算”的背景,我們可以把信息系統的數據庫簡單得分為傳統關系數據庫,云數據庫(DBaaS)和NoSql數據庫。

    傳統應用的數據庫大多數會選用oracle等商用關系型數據庫,還有一部分會選擇mysql等開源數據庫。商用數據庫經過多年發展,非常穩定可靠,但也有一些缺點如Licence價格昂貴、維護成本高、人員要求高,而且在高并發、海量數據的情況下,需要很多開發技巧。

     最成功的SAAS廠商Salesforge提供了database.com 云數據庫, 號稱超過87200個組織包括銀行、政府機構、醫療機構在使用它。微軟也提供了sql  azure,并提供了與傳統的 sql server相一致的開發工具。database.com 和  sql zure 都是關系數據庫,提供了事務的支持, 并且 database.com 、sql azure等數據庫還提供了按需購買,自動維護,自動容災存儲,水平擴展,海量存儲等高擴展及高可用的能力(至少他們是這么宣傳的)。還有一種基于虛擬機的DBaaS產品如amazon的amazon rds,是基于mysql進行改造,我認為并不是云數據庫的發展方向。Ddatabase.com 以及sql azure正式發布的時間都不長,都沒有進入中國, 而且由于國內用戶對數據安全的擔心,用戶培養也需要很長時間,中國的云數據庫之路還有很長一段路要走。

    還有一類NoSql 數據庫,不提供關系模型,不提供實時一致性,但是提供了高可用性及高擴展性,最著名的是google的bigtable 以及 amazon的dynamo,開源的實現也很多如mongodb,hbase等。NoSql數據庫出身于大型互聯網公司,也決定了更適合大型互聯網應用。NoSql數據庫在信息系統高數據一致性要求下,并不適合,但是可以作為企業應用的一個很好的補充,并不是所有的數據都有高一致性要求。

     云時代信息系統采用的數據庫可以是云數據庫,也可以是NoSql數據庫,也可以是傳統關系型數據庫。例如,可以在amazon提供的EC2上運行oracle、mysql,也可以使用S3、SimpleDB等NoSql服務,在EC2上開發可以充分利用關系數據庫以及NoSql數據庫的特性。 一些非關鍵信息系統完全可以采用廉價的NoSql數據庫。如google 的 GAE 提供了多達1G的免費空間。

     企業的錢遠沒有個人的錢好賺,國內“云計算”的境況還是雷聲大雨點小,但是現在很多針對個人的應用已經放到云上了,如網易圍繞郵箱做的很多個人應用,很多人正在享用wps云存儲帶來的便利,智能手機(iOS,android)商店中的聯網應用,但個人云計算帶來的便利必然會讓企業云計算進入快速發展階段。對大多數企業來講,SAAS是他們看到的云計算形態。大規模的SAAS應用需要PAAS和IAAS的支撐,并且對PAAS和IAAS提出了更高的要求。 現在一些SAAS的提供商提供的只不過是高級虛擬主機的應用,例如后臺使用mysql集群,甚至為高級用戶單獨配置獨立的mysql服務器,SAAS 的外表下還是傳統的解決方案,這種數據存儲方式和傳統的數據庫沒有本質的差異,只不過是社會分工更加細化,SAAS運行商可以更專業的進行集中維護;然而這種方式維護成本非常高,并且不能解決海量數據以及高并發等帶來的問題。

      CAP理論,即一致性(Consistency),可用性(Availability),分區容忍性(Partition Tolerance)三個需求,最多只能同時滿足兩個;這是被證明了的理論,而不是軟件工程領域的經驗總結,所以我們的設計不是要發明“永動機”要超越CAP理論,而是在設計中根據業務實際情況在一致性、可用性、分區容忍性上做取舍。我們知道,在高并發(高并發讀、低并發寫)情況下,信息系統的數據庫一般采用讀寫分離的手段,例如一個可讀寫的主機,帶兩個只讀的從機,主機上寫數據、從機上讀數據情況下我們無法做到實時一致性,要求實時一致性的數據只能在主機上完成全部的讀寫。即使在同一臺機器上,實現實時一致性的代價也非常高,如在大多數場景下,我們選擇的隔離級別為讀提交(read commited),會導致不可重復讀(nonrepeatable read)和幻像讀(phantom read);在 未提交讀(read uncommitted)級別下可以產生臟讀(dirty read);只有序列化(serializable)級別才可以實現真正的實時一致性,但是序列化級別的效率太差,我們一般會采用其它的鎖定策略來實現業務邏輯要求的一致性。所以,信息系統對一致性的雖然比互聯網應用要高,但是在大多數場景下并不是要求實時一致性,在海量數據和高并發的情況下和互聯網應用一致,對可用性和分區容忍性要求更高。

     信息系統一般對查詢和統計要求比較多,而NoSql數據庫一般不支持sql語句,不提供join連接,不支持復雜查詢,所以只能做單表應用或對查詢要求不高的應用,如系統日志等。而云數據庫可以完全可以滿足信息系統的各種需求,首先云數據庫是關系型數據庫,提供了完整的關系數據庫功能,微軟的 sql zure 甚至提供了與本地數據庫相同的開發體驗;其次,在海量數據和高并發下提供了水平擴展的能力、降低了系統開發的難度;再次,由于高并發對很多企業來說有一定的時效性,這樣就可以根據高并發的時間來購買相應的服務,降低了擁有成本。

     云時代的數據庫是分布式的、基于云的、少維護的、高度可伸縮的。云時代的信息系統是基于云數據庫、在線開發的、開發即運行的。salesforce的force平臺具備“云時代的信息系統”的特征,見 http://www.salesforce.com/platform/;  也有開源的項目“云鶴平臺”,可能是實現的更好, 見  http://code.google.com/p/eeplat/ 。
 本文由用戶 quguiliang 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!