夏志君+張榮福+鄭傳生



摘 要:根據市場調查和行業分析,高通量菌落挑選儀在優質菌落的篩選過程中應用越來越廣泛。通過對高通量菌落挑選儀的分析研究,設計了一個基于C/S架構的菌落信息管理系統,解決高通量菌落挑選儀在工作過程中的數據管理問題。該系統使用C#語言,以SQL Sever 2008作為底層數據庫,建立數據庫關系模型,通過高通量菌落挑選儀上位機實現與其數據交互。同時從數據庫表結構、索引及SQL語句等方面對數據庫進行了優化,提高系統存儲和查找效率,節省了系統資源開銷。
關鍵詞:菌落挑選儀;數據訪問;SQL Server數據庫;數據庫優化;信息管理
DOIDOI:10.11907/rjdk.171956
中圖分類號:TP319
文獻標識碼:A 文章編號文章編號:1672-7800(2017)008-0076-03
0 引言
隨著微生物、醫藥衛生等行業的迅猛發展,基于菌落形態學特征的篩選技術對獲得合格菌落的重要性越來越大。高通量菌落挑選儀正是基于這一技術的自動化菌落挑選設備,能從眾多培養出來的菌落中篩選出符合條件的微生物,供后續培養繁殖,提高優質菌株的培養效率。而菌落信息管理系統的設計目的是將其作為高效的數據處理系統輔助高通量菌落挑選儀完善其功能,實現對儀器收集數據的整理、存儲及分析,它是高通量菌落挑選儀不可或缺的重要組成部分。但隨著存儲數據的不斷增多,系統通過全表掃描來查找相關信息將會耗費較長時間。因此,對數據庫進行優化是提升菌落信息管理系統性能的重要內容。
1 系統設計
1.1 軟件結構設計
本系統軟件模塊采用分層結構設計,分為界面顯示層、邏輯關系層和數據訪問層三層結構,它們既彼此獨立又相互聯系,構成了系統軟件結構的骨架。此結構將系統的各個部分按照其調用的依賴關系分成不同的層級,且各個層級之間只能實現單項調用,不能越級調用,這樣的設計在保證系統運行流暢的同時也提高了系統的運行效率[1]。其中,邏輯關系層主要處理系統中的數據邏輯關系,如接種信息與菌落信息的匹配關系等。系統層級關系如圖1所示。
1.2 數據庫基本表設計
高通量菌落挑選儀是集挑選與接種于一體的自動化菌落優選裝置,可以對平皿菌落進行智能識別和自動優選。菌落信息管理系統作為高效的數據處理系統支撐挑選儀完成其功能,是整個菌落操作過程中的重要組成。高通量菌落挑選儀的數據流圖如圖2所示。
設計合理的系統相關表有利于后期對數據庫進行優化。因此,在本系統的數據庫基本表設計中,遵循的范式是第三范式,設計出來的數據管理系統冗余較小,減少了CRUD操作異常。通過對菌落信息管理系統的相關數據進行分析,結合用戶需求,本系統設計了6張表,各表之間通過外鍵或中間表相連,它們分別是操作員信息表、實驗信息表、挑選配置信息表、清洗消毒信息表、菌落信息表和接種信息表,如表1所示。
1.3 數據庫模型
數據模型的發展過程先后經歷了層次模型、網狀模型和關系模型3個階段[2],其中關系模型應用最為廣泛。關系模型用滿足相關條件的二維表結構對不同的實體進行描述,并依據各實體自身情況來建立彼此聯系,再對數據進行相關代數和邏輯關系運算。本系統關系數據庫正是基于該模型建立而成。通過一組具有正式描述性的表格對數據庫中的數據進行相關描述,并以集合代數的方法對其進行相應的處理,而這些建立在被不同表格所描述的數據之間關系的集合就構成了一個關系數據庫[3]。本系統數據信息實體關系如圖3所示。
1.4 ADO.NET數據訪問技術
菌落信息管理系統通過ADO.NET數據訪問組件實現儀器上位機對關系數據庫中數據的訪問。ADO是一組優化的數據庫訪問專用對象集,為ASP提供了完整的站點數據庫解決方案,它作用在服務器端,提供含有數據庫信息的內容,通過執行SQL命令,讓用戶在系統主界面中存儲、更新和刪除相關數據庫信息[4]。
(1)Connection:連接數據對象。Connection對象用于系統連接本地數據庫。基于本地SQL Server 2008的高通量菌落挑選儀數據庫創建和打開連接的核心代碼如下:
string connectionStr=@” Integrated Security=SSPI; Data Source=localhost; Initial Catalig=SCP”;
SqlConnection conn=new SqlConnection (connectionStr);
conn.Open ();
(2)Command:操作數據對象;DataReader:讀取數據對象。Command對象以一個SQL語句的字符串為命令操作數據庫,而DataReader對象可以接收命令執行結果。以查詢高通量菌落挑選儀在2017年1月1日所有的接種信息為例,代碼如下:
string cmdStr=”Select * From tb_PickingInformation Where Datatime=2017-01-01”;
SqlCommand dbCmd=new SqlCommand (cmdStr,conn);
SqlDataReader dbReader=new dbCmd.ExcuteReader ();
2 功能模塊
本系統通過C#進行可視化Winform窗體界面設計,根據高通量菌落挑選儀的功能需求,主要分為3個功能模塊,分別為信息存儲模塊、信息管理模塊和備份恢復模塊,并通過相關控件實現對應功能。
2.1 信息存儲模塊
信息存儲模塊是菌落信息管理系統的重要組成部分。作為對高通量菌落優選儀進行數據處理的信息管理系統,本模塊會在儀器工作過程中采集相應數據,通過與數據庫進行交互完成信息整理和存儲。系統信息采集流程如圖4所示,其中操作員信息、過程設置信息和清洗消毒信息在儀器挑選前完成存儲,菌落信息在儀器探針回到原點后進行采集存儲。此外,系統會根據操作員設置決定是否將基本參數信息和挑選接種信息保存至數據庫。以系統存儲菌落信息為例,相關代碼如下:endprint
string sqlstr = "insert into tb_ColonyInformation(孔板號,接種孔位置,質心坐標X,質心坐標Y,面積,周長,長徑,短徑,長短徑比,R,G,B,保存日期,保存時間) values('" + RecordList[i - 1].NoInDic.ToString() + "','" + RecordList[i - 1].IndexOfProbe.ToString() + "','" + Chara [i].Centroid.X.ToString() + "','" + Chara [i].Centroid.Y.ToString() + "','" + Chara [i].Area.ToString() + "','" + Chara [i].Perimeter.ToString() + "','" + Chara [i].MajorAxis.ToString() + "','" + Chara [i].MinorAxis.ToString() + "','" + Chara [i].MajToMinAxisRatio.ToString() + "','" + Chara [i].CentreAcerageColor.R.ToString() + "','" + Chara [i].CentreAcerageColor.G.ToString() + "','" + Chara [i].CentreAcerageColor.B.ToString() + "','" + DateTime.Now.ToString("yyyy-MM-dd") + "','" + DateTime.Now.ToLongTimeString().ToString() + "')";
dataOperate.DataCom(sqlstr);
2.2 信息管理模塊
信息管理模塊的主要功能是對菌落來源信息進行跟蹤、回溯,即在后期菌落繁殖中,通過本模塊可以對繁殖快、抗污染的優質菌株追根溯源,提高優質菌株的培養效率。本模塊管理與儀器有關的操作員信息、配置信息、過程設置信息、清洗消毒信息、接種信息和菌落特征信息,能夠對信息進行檢索查詢、刪除清空、數據輸出等操作,其中數據輸出是將上位機選中的數據庫表格導出成Excel。以查詢挑選配置表為例,相關代碼如下:
sqlstr = "select*from tb_PickingInformation";
tb = " tb_PickingInformation";
SqlDataAdapter sqldataadapter = new SqlDataAdapter(sqlstr,sqlconn);
DataSet mydataset = new DataSet();
sqldataadapter.Fill(mydataset,tb);
this.dataGridView1.DataSource = mydataset.Tables[tb]
2.3 備份恢復模塊
備份恢復模塊分為數據備份和數據恢復兩部分,主要用于預防突發情況造成系統重要信息的破壞。本模塊默認數據備份路徑為D:\\ Conoly,可手動備份或自動備份。自動備份SQL語句:"backup database MyDatabase to disk='D:\\ Conoly\\MyDatabase.bak'?"。而數據還原會掃描備份路徑下的全部子文件。自動還原SQL語句:"restore database MyDatabase from?disk=' D:\\ Conoly\\MyDatabase.bak' "。
3 數據庫性能優化
3.1 優化需求
對數據的處理和查詢速度已成為衡量系統性能的重要指標。隨著高通量菌落挑選儀的不斷工作,數據庫各表中的記錄會持續增加,系統響應速度也會越來越慢,因此有必要對數據庫進行性能優化,提高系統工作效率。基于SQL Server數據庫的性能優化方法有很多種,例如選擇性能優越的服務器、合理使用事務和批處理以及在應用程序開發時使用合適的工具等。本系統除了規范基本表結構外還通過索引優化和SQL語句優化兩種方法提升系統性能。
3.2 性能優化方法
3.2.1 索引優化
使用索引能大大加快數據庫查詢速度[5]。查詢執行的大部分開銷是I/O ,索引優化能提升系統性能的主要原因是避免了全表掃描。全表掃描會從磁盤讀取表的所有數據頁,若建立索引指向數據值,查詢只需讀較少次的磁盤。但索引不能建立過多,會占用磁盤空間和增加數據庫維護開銷。本系統對接種信息表中pickNum建立索引,以執行SQL語句"SELECT * FROM tb_PickingInformation WHERE pickNum= 250000;"為例查詢一條記錄,結果如表2所示,對比發現,建立索引后系統查詢時間明顯縮短。
3.2.2 語句優化
對于菌落信息管理系統而言,SQL語句獨立于應用程序設計,比優化系統源代碼的風險小、成本低。此外,SQL語句是對數據庫中數據進行操作的唯一方式,因此優化SQL語句對提升系統性能起到重要作用。本系統從WHERE子句、避免使用游標和分頁查詢三方面對SQL語句進行優化:
(1)WHERE子句。在數據查詢時,通過WHERE子句限定查詢條件能夠避免查詢大量無用數據,在WHERE涉及的列上建立索引,可以提高查詢效率。同時,避免在WHERE子句中對字段進行null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描。此外,盡量減少在WHERE子句中對字段進行表達式操作或函數操作,這也會導致引擎放棄使用索引而進行全表掃描。
(2)避免使用游標。游標的使用能讓系統對查詢返回結果集的每行進行處理,能基于游標位置對表中數據刪除或更新。但隨著菌落挑選儀的不斷工作,數據庫中存儲的信息會越來越龐大,如果建立游標,在處理數據時相關信息會被鎖定,直至數據遍歷完成。鑒于使用游標處理大量數據時, 效率低下、占用內存大,因此避免使用游標。
(3)分頁查詢。數據庫中各表的記錄數很大,滿足查詢條件的記錄可能會很多,若將查詢結果一次性顯示出來會降低查詢效率。通過row_number()解析函數完成分頁查詢能解決此類問題,即根據查詢條件返回前n條記錄,需要時再返回n+1條以后的記錄。
4 結語
本文介紹了菌落信息管理系統的軟件結構、功能模塊和數據訪問技術等內容,并通過數據庫優化提升系統性能。通過實際測試,整個系統運行穩定,功能達到設計要求。系統較數據庫優化前能快速、準確地存儲和查詢相關信息,能通過上位機控件操作數據庫中各表數據,具備良好的平臺無關性及拓展性。當菌落后期繁殖培養出優質菌株時,系統能準確回溯實驗相關信息,加快優質菌株的培養速度,很好地促進了高通量菌落挑選儀功能的完善。
參考文獻:
[1] 梁紅碩.存儲過程在C#數據庫編程中的應用[J].科技風,2014(1):83-83.
[2] 陳國紅.數據庫技術及其發展趨勢[J].紡織高校基礎科學學報,2001,14(3):244-248.
[3] 王曉鶴.數據融合中的數據庫技術[D].西安:西北工業大學,2004.
[4] 莫停飛,白振興,鄧善.C#環境下利用ADO與SQL Server 2000數據庫的鏈接[J].現代電子技術,2004,27(9):39-41.
[5] 傅向華,馮博琴,王小民,等.一種基于數據訪問流的數據庫索引優化方法[J].計算機工程,2007,33(12):99-101.endprint