〔摘 要〕傳統圖書館各類應用軟件平臺的數據庫大多為行存儲模式的關系型數據庫,真正運用以海量存儲、高可靠性為特征的具備列(云)存儲技術的比較少。本文以分析列存儲技術特點為出發點,結合圖書館共享域建設的技術需求,提出與搭建開源數據庫平臺:Hbase,討論該平臺在未來圖書館共享域建設中可以發揮重要的作用。
〔關鍵詞〕列存儲數據庫;云存儲;共享域
DOI:10.3969/j.issn.1008-0821.2011.12.021
〔中圖分類號〕G250.74 〔文獻標識碼〕B 〔文章編號〕1008-0821(2011)12-0078-04
Column Oriented Database Systems and Library ConsortiaGao Jianzhong
(Library,Xian Jiaotong University,Xian 710049,China)
〔Abstract〕The traditional library database of most kinds of application software platform is RDBMS with row storage model,the column(cloud)storage technology with mass storage,high reliability rarely used here.Based on analysis of the column storage technology,combined with the technology needs of the library consortia,proposed and built the open source database platform:HBASE,to discuss the platform can play an important role in the construaciton of library consortia.
〔Key words〕column-oriented database;cloud storage;consortia
1 列存儲的概念與背景知識
列存儲的思想早在1985年ACM的SIGMOD會議上George P.Copeland和Setrag Khoshafian就在文章“A Decomposition Storage Model”[1]中對列存儲進行了比較詳細的介紹,它提出了“分解存儲模型”(DSM,Decomposition Storage Model),DSM將關系垂直分為N個子關系,相同屬性的值存儲在一起,屬性僅當需要時才加以存取訪問。而Sybase在2004年左右推出了列存儲的Sybase IQ數據庫系統,主要用于在線分析、數據挖掘等查詢密集型應用。
2005年Michael Stonebraker在VLDB上發表文章“One Size Fits All:An Idea Whose Time Has Come and Gone”[2]指出隨著時代發展,一種數據庫可以統一所有應用的日子已經一去不復返,未來商業數據庫市場將分裂為各種獨立的數據庫引擎的集合。同年,他開發出一種列存儲的數據庫原型系統——C-Store[3]。C-Store在優化查詢、包含重復映射、利用密集壓縮減少存儲容量和分布式處理等方面有很大創新。特別是在查詢性能上遠遠優于傳統行存儲數據庫。
綜上所述,可對列存儲作以下定義:列存儲是一種將數據庫表的所有記錄中相同字段的數據聚合存儲的方式,并通過表中的列來存儲與訪問數據。
2 列存儲存儲模型、技術特點與應用范疇
2.1 行存儲與列存儲模型比較
由上圖可見行存儲是將數據組織成多行,這樣可在操作中找到所有的列。缺點是操作時必須每次處理一整行,而不是只處理需要的列。優點是在處理相同對象的兩列或多列查詢時能夠取得較快的速度,同時可提高更新、插入和刪除速度。
列存儲是將數據組成多列存儲在物理空間上,這樣在查詢對象少數列的時候可以顯著提高查詢速度,因為不需要一行行去讀取對照從而找到需要的列。缺點是在對象需要頻繁執行多列更新、插入和刪除時速度不及行存儲。
2.2 行列存儲技術特點比較
存儲類型特 點數據存儲數據讀取數據壓縮行存儲數據按行存儲——表中每行記錄的所有屬性在物理空間上存儲在一起查詢時將一行的所有屬性讀出—產生大量I/O負載對于行中所有記錄,采用統一的壓縮方式列存儲數據按列存儲,表中同一屬性在同一列中只訪問查詢涉及到的列——大量降低系統I/O數據類型一致、特征相似——高效壓縮
列存儲數據庫技術與圖書館共享域建設2.3 兩種存儲方式的特點與應用范疇比較表2 行列存儲特征與應用
項 目OLTPOLAP應用特征事務型,以更新、編
輯、刪除為主 查詢、復雜分析單個查詢時間毫秒級分鐘到小時數據模型三范式多維模型查詢涉及字段所有字段個別字段3 圖書館共享域:概念、服務平臺設計與實現的技術要求3.1 共享域概念及Calis中心共享域涵義與定位
Calis管理中心的三期項目規劃中提出項目服務的設計原則、政策、主要技術,并明確提出圖書館共享域的概念及實現平臺。共享域服務可以理解為Calis中心為提高原有文獻三級服務模式的靈活性,滿足各成員館個性化文獻服
圖2 Calis共享域平臺架構[5]
務需求,推出的一種精細化信息服務模式,是原有文獻信息服務的樞紐與有力補充。
共享域是指多個圖書館(文獻服務機構)為開展某項共建共享活動按照區域、學科而組成的合作聯盟,達到彼此協作、共享資源和服務的目標。Calis共享域是由多個Calis成員館,基于Calis共享體系和相關業務規范、應用軟件等,按照自愿、平等、互惠、共享的原則,建立的館際合作組織[4-5]。
Calis三期項目規劃中針對Calis共享域服務機制、共享域支持方案、共享活動內容及共享域中心建立流程作了明確說明。Calis共享服務機制主要包含兩類服務模式:中心系統模式和本地系統模式。Calis對共享域的支持方案:免費提供各類SaaS系統使用權、運維服務、技術指導與培訓,提供各類數據、資源、文獻信息共享渠道。
3.2 Calis共享域服務平臺體系結構與技術要求
Calis共享域服務實際上就是同一地域、相似類型或為共享某一具體的項目活動信息的成員館之間形成圖書館聯盟,彼此共享資源、提供服務。
圖3 共享域服務體系結構
上圖為共享域服務體系結構,共享域平臺的技術支持核心還是存儲系統與數據庫系統。該平臺既有中心集中式服務模式,也有各成員館分布式服務模式。既然是多個圖書館聯盟,甚至是全國圖書館聯盟,海量數據資源的可能性很大,而且用戶類型多樣,因此對共享域應用軟件的查詢效率要求較高。這兩點需求正式列存儲的技術優勢。
4 基于列存儲的共享域存儲原型系統設計與實現(以圖書館學位論文管理系統為例)4.1 基于列(云)存儲的海量結構化數據存儲架構
該存儲結構的架構以Apache開源項目Hadoop為應用平臺,在3臺物理機或虛擬機搭建Hadoop 0.20云存儲平臺:1臺為Namenode,另外2臺作為Datanode,構成分布式存儲系統。
將hbase1的SSH公鑰拷貝到另外兩臺主機的authorizedkeys中,在將hbase2和hbase3的SSH公鑰拷貝到hbase1的authorizedkeys中,使Namenode和兩臺Datanode之間可以不需密碼即可互相訪問。
(3)下載Hadoop 0.20內核,修改Hadoop配置文件,在slaves文件中加入hbase2、hbase3。
修改core-site.xml:
格式化Namenode之后,啟動Hadoop,可以在192.168.0.1:50070查看Hadoop分布式文件系統的結構,如圖4。
4.2 結構化數據在列存儲原型系統中的存儲與管理
使用HBase的API存儲,編寫代碼向基于列存儲的數據存儲原型系統中存儲數據,以下為在HBase中創建數據表papers,并插入一行數據的代碼。
∥新建一個表;
System.out.println(″create table″);
HTableDescriptor tableDescripter=new HTableDescriptor(″papers″.getBytes());∥表名為papers;
tableDescripter.addFamily(new HColumnDescriptor(″stuno:″));∥圖4 分布式文件系統結構
加入列族stuno:;
tableDescripter.addFamily(new HColumnDescriptor(″name:″));∥加入列族∥name:;
tableDescripter.addFamily(new HColumnDescriptor(″title:″));∥加入列族titile:;
tableDescripter.addFamily(new HColumnDescriptor(″department:″));∥加入列族department:;
admin.createTable(tableDescripter);
∥添加一行數據;
System.out.println(″add Papers data″);
BatchUpdate paperUpdate=new BatchUpdate(″Paper″);
paperUpdate.put(″paperno:″,Writables.getBytes(new IntWritable(1)));
paperUpdate.put(″paperno:stuno″,Writables.getBytes(new IntWritable(3206643025)));
paperUpdate.put(″paperno:name″,Writables.getBytes(new IntWritable(gao jianzhong)));
paperUpdate.put(″paperno:title″,Writables.getBytes(new IntWritable(分面檢索在圖書館應用研究與實現)));
paperUpdate.put(″paperno:department″,Writables.getBytes(new IntWritable(computer science)));
table.commit(paperUpdate);5 列存儲應用前景與不足
列存儲技術作為一種新型存儲技術,在穩定性和性能上還存在較大的提升空間。在與傳統關系數據庫的行存儲系統的對比中,列存儲在可伸縮性、稀疏性上都體現了較好的性能。隨著數據規模的增長,列存儲的查詢時間只是線性增長,并無額外開銷。圖書館共享域建設核心技術應該是平臺建設,平臺建設的關鍵技術還是存儲和數據庫。隨著列存儲技術的不斷完善與發展,在未來圖書館共享域建設中必將占有一席之地。
參考文獻
[1]Copeland GP,Khoshafian SN.A Decomposition Storage Model[C].Proceedings of the 1985 ACM,1985.
[2]Stonebraker M,UAgur etintemel.“One Size Fits All”:An Idea Whose Time Has Come and Gone[J].Proceedings of the 31st VLDB Conference,2005.
[3]Stonebraker M,Abadi DJ,Batkin A,Chen XD,et al.C-Store:A Column-oriented DBMS.In VLDB.Pages 553-564.2005[J].Proceedings of the 31st VLDB Conference,2005.
[4]陳凌.CALIS共享域服務設計與實現[EB].http:∥www.doc88.com/p-70721610025.html,2011-10-15.
[5]王文清:Calis數字圖書館云服務平臺與資源整合[EB].http:∥wenku.baidu.com/view/7b1e3907eff9aef8941e062f.html,2011-10-15.