文棒棒1,2,曾獻(xiàn)輝1,2
?。?. 東華大學(xué) 信息科學(xué)與技術(shù)學(xué)院,上海 201620;2.數(shù)字化紡織服裝技術(shù)教育部工程研究中心,上海 201620)
摘要:工業(yè)4.0環(huán)境下,生產(chǎn)現(xiàn)場(chǎng)的監(jiān)測(cè)數(shù)據(jù)除了需要實(shí)時(shí)顯示與分析外,還需要作為歷史記錄進(jìn)行保存。面對(duì)海量的生產(chǎn)數(shù)據(jù),現(xiàn)有的數(shù)據(jù)庫(kù)技術(shù)已經(jīng)很難滿足該要求。提出了一種基于傳統(tǒng)數(shù)據(jù)庫(kù)多表架構(gòu)與NoSQL大數(shù)據(jù)庫(kù)相結(jié)合的新型數(shù)據(jù)存儲(chǔ)方案。該方案基于傳統(tǒng)數(shù)據(jù)庫(kù)的多表架構(gòu)實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)的分布式存儲(chǔ),同時(shí)將歷史數(shù)據(jù)遷移至NoSQL大數(shù)據(jù)庫(kù),解決了工業(yè)4.0下的海量數(shù)據(jù)存儲(chǔ)問題。最后給出了某企業(yè)基于SQL Server和MongoDB的實(shí)際應(yīng)用,驗(yàn)證了本文方法的正確性和有效性。
關(guān)鍵詞:多表結(jié)構(gòu);NoSQL大數(shù)據(jù)庫(kù);數(shù)據(jù)遷移;MapReduce分析
0引言
進(jìn)入21世紀(jì)以來(lái),隨著網(wǎng)絡(luò)信息技術(shù)、智能科學(xué)的蓬勃發(fā)展,信息化和智能化正逐步融合到工業(yè)生產(chǎn)中,向人們展示著工業(yè)4.0時(shí)代的到來(lái)[1]。在工業(yè)4.0 時(shí)代,企業(yè)在生產(chǎn)過程中累積的大量與生產(chǎn)監(jiān)測(cè)相關(guān)的數(shù)據(jù)匯聚成數(shù)據(jù)的海洋,這些數(shù)據(jù)不僅種類繁多同時(shí)產(chǎn)生速度快、價(jià)值密度低。要充分利用這些數(shù)據(jù),就需要企業(yè)不僅能夠?qū)崿F(xiàn)這些數(shù)據(jù)的實(shí)時(shí)顯示與分析,同時(shí)又能夠?qū)Ξa(chǎn)生的歷史數(shù)據(jù)進(jìn)行有效的存儲(chǔ)與分析。本文針對(duì)此問題,提出了一種基于傳統(tǒng)數(shù)據(jù)庫(kù)多表架構(gòu)和大數(shù)據(jù)相結(jié)合的數(shù)據(jù)存儲(chǔ)策略,該方法解決了工業(yè)數(shù)據(jù)的實(shí)時(shí)存儲(chǔ),同時(shí)可實(shí)現(xiàn)對(duì)海量歷史數(shù)據(jù)的有效保存與分析,以幫助企業(yè)充分利用這些數(shù)據(jù)。
1工業(yè)數(shù)據(jù)存儲(chǔ)技術(shù)
工業(yè)4.0時(shí)代的到來(lái),也意味著工業(yè)生產(chǎn)大數(shù)據(jù)時(shí)代的到來(lái)[2]。一般意義上講,大數(shù)據(jù)具有數(shù)據(jù)量大、數(shù)據(jù)種類多、商業(yè)價(jià)值高、處理速度高等特點(diǎn)。在此基礎(chǔ)上,工業(yè)生產(chǎn)中的數(shù)據(jù)還有兩大特點(diǎn):一是準(zhǔn)確率高,二是實(shí)時(shí)性強(qiáng)。工業(yè)生產(chǎn)中重要的應(yīng)用場(chǎng)景是實(shí)時(shí)監(jiān)測(cè)、實(shí)時(shí)預(yù)警、實(shí)時(shí)控制。一旦數(shù)據(jù)的采集、傳輸和應(yīng)用等全處理流程耗時(shí)過長(zhǎng),就難以在生產(chǎn)過程中發(fā)揮其價(jià)值[3]。如圖1所示,在多個(gè)采集工作站進(jìn)行數(shù)據(jù)采集時(shí),每天產(chǎn)生的數(shù)據(jù)量都是非常大的,此時(shí)不僅要保證這些數(shù)據(jù)的實(shí)時(shí)性,同時(shí)還需要一種存儲(chǔ)技術(shù)能夠?qū)崿F(xiàn)這些數(shù)據(jù)的歷史保存。傳統(tǒng)的數(shù)據(jù)庫(kù)存儲(chǔ)技術(shù)主要有兩種:一種是采用數(shù)據(jù)直接存放的方式,即單一表格存儲(chǔ);另一種則是采用數(shù)據(jù)庫(kù)多表架構(gòu)的方式,即多表存儲(chǔ)。
1.1數(shù)據(jù)庫(kù)單表直接存放形式存儲(chǔ)
傳統(tǒng)的數(shù)據(jù)庫(kù)存儲(chǔ)方法大多采用數(shù)據(jù)的直接存放形式,即單一表格形式。這種方法是將所有數(shù)據(jù)都直接存放在一個(gè)單表里,表中包括數(shù)據(jù)的所有字段和記錄。該方法的優(yōu)點(diǎn)是設(shè)計(jì)簡(jiǎn)單,使用非常方便,能夠較好地實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)。但是由于只是單個(gè)表格,當(dāng)單表數(shù)據(jù)量非常大時(shí),數(shù)據(jù)庫(kù)的訪問速度會(huì)急劇下降,會(huì)使得系統(tǒng)變得相當(dāng)不穩(wěn)定,此時(shí)若繼續(xù)對(duì)數(shù)據(jù)進(jìn)行查詢與插入,甚至可能出現(xiàn)死機(jī)等不能運(yùn)作的情況。因此這種方法不適合大量數(shù)據(jù)的實(shí)時(shí)存儲(chǔ)。
1.2數(shù)據(jù)庫(kù)多表分布式存儲(chǔ)
不同于數(shù)據(jù)的直接存儲(chǔ)方式,分表,顧名思義,就是通過一系列的切分規(guī)則將數(shù)據(jù)分布到不同的表中,如按照自然時(shí)間來(lái)分,可分為按日生成表、按月生成表和按年生成表。分表不僅能夠更好地完成大量數(shù)據(jù)的分布式存儲(chǔ),增大數(shù)據(jù)庫(kù)的存儲(chǔ)容量,而且減少了數(shù)據(jù)庫(kù)的負(fù)擔(dān),提高了數(shù)據(jù)庫(kù)的效率,特別是提高了單個(gè)表的增刪改查效率,能夠?qū)崿F(xiàn)數(shù)據(jù)的實(shí)時(shí)顯示與分析。但是,對(duì)于分表后存儲(chǔ)的歷史數(shù)據(jù),在對(duì)其進(jìn)行統(tǒng)計(jì)分析時(shí)往往需要遍歷所有的表格進(jìn)行多表之間的聯(lián)合,查詢速度會(huì)相當(dāng)慢,不便于實(shí)現(xiàn)歷史數(shù)據(jù)的有效分析。
1.3NoSQL大數(shù)據(jù)庫(kù)存儲(chǔ)
隨著工業(yè)生產(chǎn)數(shù)據(jù)的不斷增加,關(guān)系型數(shù)據(jù)庫(kù)在面對(duì)大量歷史數(shù)據(jù)的存儲(chǔ)和訪問等問題上逐漸暴露出一些不足之處。為了彌補(bǔ)這些不足,NoSQL數(shù)據(jù)庫(kù)應(yīng)運(yùn)而生。NoSQL[4](Not Only SQL)是對(duì)傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)以外的非關(guān)系型數(shù)據(jù)庫(kù)的統(tǒng)稱。NoSQL數(shù)據(jù)庫(kù)憑借其不固定的鍵值對(duì)結(jié)構(gòu)打破了傳統(tǒng)數(shù)據(jù)庫(kù)中表與表之間的關(guān)聯(lián)問題導(dǎo)致的性能瓶頸,大大減少了對(duì)歷史數(shù)據(jù)進(jìn)行存儲(chǔ)、計(jì)算、查詢等操作在時(shí)間和空間上的開銷。但是,在實(shí)時(shí)數(shù)據(jù)的分析與顯示方面,NoSQL往往顯得力不從心,數(shù)據(jù)處理不夠快速,且不能直觀顯示處理后的結(jié)果。
2多表架構(gòu)與大數(shù)據(jù)集成的新的數(shù)據(jù)存儲(chǔ)策略
面對(duì)工業(yè)生產(chǎn)上的實(shí)時(shí)數(shù)據(jù),不僅要求能夠?qū)ζ溥M(jìn)行實(shí)時(shí)顯示與分析,同時(shí)還要將其作為歷史數(shù)據(jù)進(jìn)行保存。對(duì)此,現(xiàn)有的數(shù)據(jù)庫(kù)方法已經(jīng)無(wú)法滿足。本文提出一種基于傳統(tǒng)數(shù)據(jù)庫(kù)多表架構(gòu)與NoSQL大數(shù)據(jù)庫(kù)相結(jié)合的新型數(shù)據(jù)存儲(chǔ)方案,該方案利用傳統(tǒng)數(shù)據(jù)庫(kù)的多表方法實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)存儲(chǔ),并實(shí)現(xiàn)對(duì)數(shù)據(jù)的實(shí)時(shí)操作與查詢顯示。此外,對(duì)于累積的歷史數(shù)據(jù),則利用數(shù)據(jù)遷移技術(shù)遷移至
NoSQL數(shù)據(jù)庫(kù)進(jìn)行歷史保存,不僅解決了海量數(shù)據(jù)的存儲(chǔ)問題,而且可以利用大數(shù)據(jù)技術(shù)對(duì)歷史數(shù)據(jù)進(jìn)行深層次的分析處理,以實(shí)現(xiàn)生產(chǎn)數(shù)據(jù)的最大化利用。圖2所示為傳統(tǒng)數(shù)據(jù)庫(kù)與NoSQL大數(shù)據(jù)庫(kù)相結(jié)合的數(shù)據(jù)存儲(chǔ)方案的處理流程。
2.1傳統(tǒng)多表架構(gòu)實(shí)現(xiàn)實(shí)時(shí)存儲(chǔ)與訪問
利用傳統(tǒng)數(shù)據(jù)庫(kù)的多表架構(gòu)可以實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)存儲(chǔ)與訪問,而多表的實(shí)現(xiàn)則主要利用存儲(chǔ)過程方法。存儲(chǔ)過程,即一組預(yù)先寫好的能實(shí)現(xiàn)某種功能的一段程序,將其保存在數(shù)據(jù)庫(kù)中,以后若要實(shí)現(xiàn)該功能則直接可調(diào)用該程序來(lái)完成[5]。因此,只要預(yù)先定義好存儲(chǔ)過程,當(dāng)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)時(shí)則可直接進(jìn)行調(diào)用,從而將數(shù)據(jù)實(shí)時(shí)地存儲(chǔ)在不同的表格里。而對(duì)于數(shù)據(jù)的訪問,同樣可以將相應(yīng)的操作通過建立存儲(chǔ)過程來(lái)實(shí)現(xiàn)。利用多表架構(gòu)一方面能夠保證數(shù)據(jù)的實(shí)時(shí)性存儲(chǔ)要求,另一方面將數(shù)據(jù)存儲(chǔ)在多個(gè)表里可以提高每個(gè)表的訪問速度,便于對(duì)表中的數(shù)據(jù)進(jìn)行實(shí)時(shí)顯示與相應(yīng)的增刪改查處理。
2.2大數(shù)據(jù)技術(shù)實(shí)現(xiàn)歷史記錄保存與分析
數(shù)據(jù)庫(kù)多表架構(gòu)解決了數(shù)據(jù)的實(shí)時(shí)性問題。但是,對(duì)于如何將這些海量數(shù)據(jù)作為歷史記錄進(jìn)行有效保存同時(shí)可以實(shí)現(xiàn)對(duì)其深層次的分析與利用,傳統(tǒng)的數(shù)據(jù)庫(kù)方法已經(jīng)無(wú)法滿足要求。此時(shí),大數(shù)據(jù)存儲(chǔ)技術(shù)的優(yōu)勢(shì)則脫穎而出。NoSQL數(shù)據(jù)庫(kù)具有高水平擴(kuò)展能力和低端硬件集群,可以很好地應(yīng)對(duì)海量數(shù)據(jù)的存儲(chǔ)問題。利用數(shù)據(jù)遷移技術(shù),即通過不同的接口函數(shù)訪問不同的數(shù)據(jù)庫(kù),實(shí)現(xiàn)歷史數(shù)據(jù)從傳統(tǒng)數(shù)據(jù)庫(kù)向NoSQL大數(shù)據(jù)庫(kù)的遷移。而將數(shù)據(jù)存儲(chǔ)在NoSQL數(shù)據(jù)庫(kù)后,可利用大數(shù)據(jù)分析技術(shù)實(shí)現(xiàn)歷史記錄的分析處理。例如MapReduce[6-7],它是一種并行編程模型,用于大規(guī)模數(shù)據(jù)集的并行運(yùn)算,其特點(diǎn)是簡(jiǎn)單易學(xué),適用廣泛,能夠降低并行編程難度,程序員只需實(shí)現(xiàn)其中的map函數(shù)和reduce函數(shù),而具體操作則交由MapReduce自身的框架來(lái)處理。
3多表架構(gòu)與NoSQL大數(shù)據(jù)存儲(chǔ)策略的實(shí)現(xiàn)與應(yīng)用分析
為了驗(yàn)證本文所提出方案的正確性和有效性,本文結(jié)合了某智能制造廠在生產(chǎn)過程中機(jī)器產(chǎn)生的大量數(shù)據(jù)來(lái)對(duì)其進(jìn)行分析與應(yīng)用。根據(jù)對(duì)智能制造廠生產(chǎn)現(xiàn)場(chǎng)的分析,得知其存在多個(gè)車間,且每個(gè)車間都有上千臺(tái)機(jī)器,每臺(tái)機(jī)器在工作時(shí)都會(huì)產(chǎn)生大量的數(shù)據(jù)。為了能夠充分利用這些數(shù)據(jù),首要的任務(wù)就是要解決如何把這些數(shù)據(jù)實(shí)時(shí)地存儲(chǔ)下來(lái)。通過比較分析,最終采用傳統(tǒng)的SQL Server數(shù)據(jù)庫(kù)對(duì)實(shí)時(shí)數(shù)據(jù)進(jìn)行存儲(chǔ),而對(duì)于歷史數(shù)據(jù)的存儲(chǔ)與分析則采用NoSQL數(shù)據(jù)庫(kù)中的MongoDB數(shù)據(jù)庫(kù)。
3.1實(shí)時(shí)數(shù)據(jù)的存儲(chǔ)與分析
在數(shù)據(jù)的實(shí)時(shí)存儲(chǔ)方面,采用SQL Server數(shù)據(jù)庫(kù)多表架構(gòu)的存儲(chǔ)方法。該方法首先將預(yù)先定義好的存儲(chǔ)過程存儲(chǔ)在SQL Server數(shù)據(jù)庫(kù)中,在對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)之前,先調(diào)用存儲(chǔ)過程檢測(cè)數(shù)據(jù)庫(kù)是否連接,若未連接,則要求連接;連接以后獲取當(dāng)前時(shí)間檢測(cè)數(shù)據(jù)表是否存在,若不存在則調(diào)用其他存儲(chǔ)過程生成當(dāng)前時(shí)間的數(shù)據(jù)表;當(dāng)數(shù)據(jù)表存在后則可進(jìn)行數(shù)據(jù)的實(shí)時(shí)性讀寫與插入。數(shù)據(jù)的整個(gè)存儲(chǔ)過程都是調(diào)用預(yù)先定義好的語(yǔ)句,通過存儲(chǔ)過程實(shí)現(xiàn)多表的按日生成,避免了傳統(tǒng)數(shù)據(jù)存儲(chǔ)時(shí)的繁瑣語(yǔ)句。同時(shí)若需要對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)查詢與顯示,同樣可通過定義好的SQL語(yǔ)句生成存儲(chǔ)過程實(shí)現(xiàn)對(duì)批量數(shù)據(jù)的增刪改查。圖3所示為利用存儲(chǔ)過程實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)多表方式的存儲(chǔ)流程。
3.2歷史數(shù)據(jù)的遷移與存放
對(duì)實(shí)時(shí)數(shù)據(jù)進(jìn)行SQL Server多表存儲(chǔ)和實(shí)時(shí)分析后,利用數(shù)據(jù)遷移技術(shù)將數(shù)據(jù)遷移至NoSQL數(shù)據(jù)庫(kù)進(jìn)行存儲(chǔ)和分析。MongoDB[8]數(shù)據(jù)庫(kù)是NoSQL數(shù)據(jù)庫(kù)的一種,其存儲(chǔ)結(jié)構(gòu)為典型的key value鍵值對(duì)型,而且它最大的特點(diǎn)是具有強(qiáng)大的查詢功能,支持通用輔助索引和復(fù)合索引,能夠進(jìn)行多種快速查詢,同時(shí)還支持各種分析工具,可以很好地對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析。因此,可以通過傳統(tǒng)數(shù)據(jù)庫(kù)的ADO技術(shù)來(lái)訪問SQL Server數(shù)據(jù)庫(kù),將SQL Server中的數(shù)據(jù)轉(zhuǎn)移到MongoDB數(shù)據(jù)庫(kù)中,實(shí)現(xiàn)海量歷史數(shù)據(jù)的存儲(chǔ)。如圖4所示,首先進(jìn)行SQL Server的連接,其連接形式為:
string conStr = "server=(local); Initial Catalog = Textile; Integrated Security = true";
SqlConnection connection = new SqlConnection(conStr);
SqlCommand cmd = connection.CreateCommand();
connection.Open();
在連接數(shù)據(jù)庫(kù)后可自行設(shè)置SQL命令將數(shù)據(jù)庫(kù)中的數(shù)據(jù)轉(zhuǎn)移到MongoDB中,在此之前需要利用MongoDB Driver 進(jìn)行MongoDB數(shù)據(jù)庫(kù)的連接,其實(shí)現(xiàn)方式為:
string connString = "mongodb://127.0.0.1:27017";
MongoServer server = MongoServer.Create(connString);
MongoDatabase mydb = server.GetDatabase("mydb");
MongoCollection test = mydb.GetCollection("test");
3.3基于MapReduce的大數(shù)據(jù)分析
MongoDB作為NoSQL大數(shù)據(jù)庫(kù)的一種,其除了可以實(shí)現(xiàn)海量歷史數(shù)據(jù)存儲(chǔ)以外,還提供了多種靈活和強(qiáng)大的數(shù)據(jù)聚合工具,其中就包括MapReduce。圖5所示為MapReduce在MongoDB數(shù)據(jù)庫(kù)中的操作流程。
為了更清楚地了解MapReduce編程模型的強(qiáng)大之處,本文結(jié)合智能制造廠生產(chǎn)現(xiàn)場(chǎng)的監(jiān)測(cè)數(shù)據(jù),利用MapReduce,通過設(shè)備在10天內(nèi)的開關(guān)機(jī)狀態(tài)計(jì)算出設(shè)備的生產(chǎn)效率值,從而幫助企業(yè)更加合理地調(diào)度生產(chǎn)資源實(shí)現(xiàn)資源的最大化利用。圖6所示為處理流程圖。
4結(jié)論
本文針對(duì)在工業(yè)4.0環(huán)境下生產(chǎn)過程中產(chǎn)生的大量數(shù)據(jù),提出一種基于傳統(tǒng)數(shù)據(jù)庫(kù)多表架構(gòu)和NoSQL大數(shù)據(jù)結(jié)合的新型存儲(chǔ)策略,不僅完成了生產(chǎn)數(shù)據(jù)的實(shí)時(shí)存儲(chǔ)與實(shí)時(shí)訪問,而且利用數(shù)據(jù)轉(zhuǎn)移技術(shù)將歷史數(shù)據(jù)轉(zhuǎn)移至NoSQL大數(shù)據(jù)庫(kù),解決了海量歷史數(shù)據(jù)的存儲(chǔ)問題,同時(shí)通過大數(shù)據(jù)分析技術(shù)實(shí)現(xiàn)對(duì)歷史數(shù)據(jù)的有效分析。最后通過某智能制造廠生產(chǎn)現(xiàn)場(chǎng)的監(jiān)測(cè)數(shù)據(jù),驗(yàn)證了本文提出方法的正確性和有效性。
參考文獻(xiàn)
?。?] 程曉蕾. 工業(yè)4.0架構(gòu)下的工業(yè)大數(shù)據(jù)的需求、環(huán)境及服務(wù)化[J].赤峰學(xué)院學(xué)報(bào), 2015,31(4):14 15.
?。?] 沈雁, 戴瑜興, 湯睿. 基于嵌入式數(shù)據(jù)庫(kù)的分布式大壩監(jiān)測(cè)數(shù)據(jù)匯聚器設(shè)計(jì)[J].電子技術(shù)應(yīng)用, 2011,37(5):39 41.
[3] FAZIO M, CELESTI A, PULIAFITO A, et al. Big data storage in the cloud for smart environment monitoring[J]. Procedia Computer Science, 2015(5):500 506.
?。?] 潘洪志. 高性能NoSQL存儲(chǔ)系統(tǒng)的研究與實(shí)現(xiàn)[D .長(zhǎng)春: 吉林大學(xué), 2014.
[5] 丌文娟. 對(duì)SQL Server存儲(chǔ)過程的研究與應(yīng)用[J .廊坊師范學(xué)院學(xué)報(bào), 2010,10(6):34 37.
?。?] 謝桂蘭, 羅省賢. 基于Hadoop MapReduce模型的應(yīng)用研究[J].微型機(jī)與應(yīng)用, 2010,29(8):4 7.
[7] MAITREY S, JHA C K. MapReduce: simplified data analysis of big data[J]. Procedia Computer Science, 2015(7):563 571.
?。?] 呂林. 基于MongoDB的應(yīng)用平臺(tái)的研究與實(shí)現(xiàn)[D]. 北京:北京郵電大學(xué), 2015.