本發(fā)明涉及一種模塊化數(shù)據(jù)分布計(jì)劃形成。
背景技術(shù):
企業(yè)數(shù)據(jù)庫(kù)系統(tǒng)存儲(chǔ)從一個(gè)或多個(gè)不同的源接收的巨大量的數(shù)據(jù)。數(shù)據(jù)被存儲(chǔ)在數(shù)據(jù)庫(kù)表格中并且可經(jīng)由結(jié)構(gòu)化查詢(xún)來(lái)訪問(wèn)和修改。數(shù)據(jù)庫(kù)表格可被分區(qū),并且許多數(shù)據(jù)庫(kù)系統(tǒng)支持將表格分區(qū)分布在多個(gè)主機(jī)間以便改善例如可擴(kuò)展性和可用性。
表格分區(qū)在主機(jī)間的分布通常由計(jì)劃生成算法來(lái)確定。計(jì)劃生成算法可考慮到情景的不同屬性和數(shù)據(jù)訪問(wèn)需求。傳統(tǒng)的計(jì)劃生成算法是由數(shù)據(jù)庫(kù)系統(tǒng)開(kāi)發(fā)者提供的并且無(wú)法具有照顧到眾多可能的考慮及其對(duì)于各種用戶(hù)的相對(duì)重要性所需的靈活性。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的一個(gè)方面涉及一種系統(tǒng),包括:存儲(chǔ)器,存儲(chǔ)處理器可執(zhí)行過(guò)程步驟;以及處理器,執(zhí)行所述處理器可執(zhí)行過(guò)程步驟來(lái)使得所述系統(tǒng):實(shí)例化計(jì)劃生成環(huán)境,該計(jì)劃生成環(huán)境暴露一個(gè)或多個(gè)軟件鉤子,所述一個(gè)或多個(gè)軟件鉤子的每一者與用于生成數(shù)據(jù)庫(kù)表格分區(qū)重分布計(jì)劃的多個(gè)步驟中的相應(yīng)一個(gè)步驟相關(guān)聯(lián);對(duì)于所述一個(gè)或多個(gè)軟件鉤子,識(shí)別用于執(zhí)行與所述至少一個(gè)軟件鉤子相關(guān)聯(lián)的步驟的關(guān)聯(lián)的一個(gè)或多個(gè)軟件模塊;并且執(zhí)行所述計(jì)劃生成環(huán)境和所識(shí)別出的一個(gè)或多個(gè)軟件模塊來(lái)生成數(shù)據(jù)庫(kù)表格分區(qū)重分布計(jì)劃。
本發(fā)明的另一方面涉及一種由計(jì)算機(jī)實(shí)現(xiàn)的方法,包括:實(shí)例化計(jì)劃生成環(huán)境,該計(jì)劃生成環(huán)境暴露一個(gè)或多個(gè)軟件鉤子,所述一個(gè)或多個(gè)軟件鉤子的每一者與用于生成數(shù)據(jù)庫(kù)表格分區(qū)重分布計(jì)劃的多個(gè)步驟中的相應(yīng)一個(gè)步驟相關(guān)聯(lián);對(duì)于所述一個(gè)或多個(gè)軟件鉤子,識(shí)別用于執(zhí)行與所述至少一個(gè)軟件鉤子相關(guān)聯(lián)的步驟的關(guān)聯(lián)的一個(gè)或多個(gè)軟件模塊;并且執(zhí)行所述計(jì)劃生成環(huán)境和所識(shí)別出的一個(gè)或多個(gè)軟件模塊來(lái)生成數(shù)據(jù)庫(kù)表格分區(qū)重分布計(jì)劃。
本發(fā)明的再一方面涉及一種存儲(chǔ)程序代碼的非暫態(tài)計(jì)算機(jī)可讀介質(zhì),所述程序代碼可由計(jì)算機(jī)系統(tǒng)執(zhí)行來(lái)使得該計(jì)算機(jī)系統(tǒng):實(shí)例化計(jì)劃生成環(huán)境,該計(jì)劃生成環(huán)境暴露一個(gè)或多個(gè)軟件鉤子,所述一個(gè)或多個(gè)軟件鉤子的每一者與用于生成數(shù)據(jù)庫(kù)表格分區(qū)重分布計(jì)劃的多個(gè)步驟中的相應(yīng)一個(gè)步驟相關(guān)聯(lián);對(duì)于所述一個(gè)或多個(gè)軟件鉤子,識(shí)別用于執(zhí)行與所述至少一個(gè)軟件鉤子相關(guān)聯(lián)的步驟的關(guān)聯(lián)的一個(gè)或多個(gè)軟件模塊;并且執(zhí)行所述計(jì)劃生成環(huán)境和所識(shí)別出的一個(gè)或多個(gè)軟件模塊來(lái)生成數(shù)據(jù)庫(kù)表格分區(qū)重分布計(jì)劃。
附圖說(shuō)明
圖1是根據(jù)一些實(shí)施例的數(shù)據(jù)庫(kù)體系結(jié)構(gòu)的框圖。
圖2是根據(jù)一些實(shí)施例的數(shù)據(jù)庫(kù)體系結(jié)構(gòu)的框圖。
圖3包括根據(jù)一些實(shí)施例的過(guò)程的流程圖。
圖4是根據(jù)一些實(shí)施例的用戶(hù)界面的外在視圖。
圖5包括根據(jù)一些實(shí)施例的過(guò)程的流程圖。
圖6包括根據(jù)一些實(shí)施例的過(guò)程的流程圖。
圖7是根據(jù)一些實(shí)施例的裝置的框圖。
具體實(shí)施方式
提供以下描述來(lái)使得任何本領(lǐng)域技術(shù)人員能夠做出和使用描述的實(shí)施例。然而,各種修改將仍然是本領(lǐng)域技術(shù)人員很容易清楚的。
圖1是根據(jù)一些實(shí)施例的數(shù)據(jù)庫(kù)體系結(jié)構(gòu)100的框圖。實(shí)施例不限于體系結(jié)構(gòu)100或某一數(shù)據(jù)庫(kù)體系結(jié)構(gòu)。體系結(jié)構(gòu)100包括數(shù)據(jù)庫(kù)110、應(yīng)用服務(wù)器120和客戶(hù)端130。
應(yīng)用服務(wù)器120執(zhí)行并提供服務(wù)給諸如管理工具122和其他應(yīng)用124a和124b之類(lèi)的應(yīng)用。應(yīng)用可包括服務(wù)器側(cè)可執(zhí)行程序代碼(例如,編譯的代碼、腳本等等),這些代碼通過(guò)向客戶(hù)端130提供用戶(hù)界面,經(jīng)由這種用戶(hù)界面接收來(lái)自客戶(hù)端130的請(qǐng)求,基于這些請(qǐng)求從數(shù)據(jù)庫(kù)110取回?cái)?shù)據(jù),處理從數(shù)據(jù)庫(kù)110接收的數(shù)據(jù),并且將經(jīng)處理的數(shù)據(jù)提供給客戶(hù)端130,從而來(lái)向客戶(hù)端130提供功能。
諸如管理工具122之類(lèi)的在應(yīng)用服務(wù)器120內(nèi)執(zhí)行的應(yīng)用也可向客戶(hù)端130暴露管理功能,包括但不限于數(shù)據(jù)庫(kù)配置、數(shù)據(jù)庫(kù)維護(hù)、數(shù)據(jù)庫(kù)優(yōu)化和其他管理功能??蛻?hù)端130對(duì)特定應(yīng)用的訪問(wèn)可基于操作客戶(hù)端130的用戶(hù)的角色。例如,在一些實(shí)施例中只有與數(shù)據(jù)庫(kù)管理員角色相關(guān)聯(lián)的用戶(hù)可被允許訪問(wèn)管理工具122。
應(yīng)用服務(wù)器120提供客戶(hù)端130可通過(guò)其來(lái)與在應(yīng)用服務(wù)器120上執(zhí)行的應(yīng)用通信的任何適當(dāng)?shù)慕涌?。例如,?yīng)用服務(wù)器120可包括支持通過(guò)傳輸控制協(xié)議(transmissioncontrolprotocol,tcp)的瞬態(tài)請(qǐng)求/響應(yīng)協(xié)議的超文本傳送協(xié)議(hypertexttransferprotocol,http)接口,支持應(yīng)用服務(wù)器120和任何實(shí)現(xiàn)websocket協(xié)議的客戶(hù)端130之間的通過(guò)單個(gè)tcp連接的非瞬態(tài)全雙工通信的websocket接口,和/或開(kāi)放數(shù)據(jù)協(xié)議(opendataprotocol,odata)接口。
數(shù)據(jù)庫(kù)110包括數(shù)據(jù)庫(kù)管理系統(tǒng)(databasemanagementsystem,dbms)112和數(shù)據(jù)114。根據(jù)一些實(shí)施例,數(shù)據(jù)114包括數(shù)據(jù)庫(kù)表格的數(shù)據(jù)。正如本領(lǐng)域中已知的,數(shù)據(jù)114可分布在多個(gè)主機(jī)之間。例如,每個(gè)主機(jī)可包括一個(gè)或多個(gè)分區(qū),并且每個(gè)分區(qū)可存儲(chǔ)數(shù)據(jù)114的一個(gè)或多個(gè)關(guān)聯(lián)的數(shù)據(jù)庫(kù)表格。
如下文將要描述的,dbms112根據(jù)一些實(shí)施例可提供計(jì)劃生成引擎來(lái)生成重分布計(jì)劃。dbms112可執(zhí)行這種重分布計(jì)劃以在多個(gè)主機(jī)之間分布數(shù)據(jù)114。
數(shù)據(jù)114在主機(jī)間的分布和分區(qū)的定義可由也存儲(chǔ)在數(shù)據(jù)114內(nèi)的元數(shù)據(jù)來(lái)描述。存儲(chǔ)的元數(shù)據(jù)也可描述數(shù)據(jù)114內(nèi)存儲(chǔ)的數(shù)據(jù)的結(jié)構(gòu)、關(guān)系和含義。此信息可包括定義數(shù)據(jù)114內(nèi)存儲(chǔ)的數(shù)據(jù)庫(kù)表格的模式(schema)的數(shù)據(jù)。模式可指定數(shù)據(jù)庫(kù)表格所屬的命名空間、數(shù)據(jù)庫(kù)表格名稱(chēng)、數(shù)據(jù)庫(kù)表格的列、與每一列相關(guān)聯(lián)的數(shù)據(jù)類(lèi)型和與數(shù)據(jù)庫(kù)表格相關(guān)聯(lián)的其他信息。
在服務(wù)器120上執(zhí)行的一個(gè)或多個(gè)應(yīng)用可利用數(shù)據(jù)庫(kù)管理接口與dbms112通信,所述數(shù)據(jù)庫(kù)管理接口包括但不限于開(kāi)放數(shù)據(jù)庫(kù)互連(opendatabaseconnectivity,odbc)和java數(shù)據(jù)庫(kù)互連(javadatabaseconnectivity,jdbc)接口。這些類(lèi)型的應(yīng)用可使用結(jié)構(gòu)化查詢(xún)語(yǔ)言(structuredquerylanguage,sql)來(lái)管理、修改和查詢(xún)數(shù)據(jù)庫(kù)110中存儲(chǔ)的數(shù)據(jù)。
dbms112為取回和/或修改數(shù)據(jù)114的請(qǐng)求服務(wù),并且也執(zhí)行行政和管理功能。這種功能可包括快照和備份管理、索引、優(yōu)化、垃圾收集和/或已知或者會(huì)變得已知的任何其他數(shù)據(jù)庫(kù)功能。根據(jù)一些實(shí)施例,數(shù)據(jù)庫(kù)110還提供應(yīng)用邏輯,例如數(shù)據(jù)庫(kù)過(guò)程和/或計(jì)算。此應(yīng)用邏輯可包括腳本、功能庫(kù)和/或編譯的程序代碼。
在一些實(shí)施例中,數(shù)據(jù)114可包括傳統(tǒng)的表格式數(shù)據(jù)、基于行的數(shù)據(jù)、基于列的數(shù)據(jù)和基于對(duì)象的數(shù)據(jù)中的一個(gè)或多個(gè)。數(shù)據(jù)114可被索引和/或在索引上選擇性地重復(fù)以允許對(duì)其的快速搜索和取回。數(shù)據(jù)庫(kù)110可支持多租賃以通過(guò)提供在編程上與彼此隔離的多個(gè)邏輯數(shù)據(jù)庫(kù)系統(tǒng)來(lái)分別支持多個(gè)不相關(guān)的客戶(hù)端。
數(shù)據(jù)庫(kù)110可包括已知的或?qū)⒆兊靡阎娜魏我粋€(gè)或多個(gè)查詢(xún)-響應(yīng)數(shù)據(jù)源,包括但不限于sql關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)。數(shù)據(jù)庫(kù)110可包括關(guān)系數(shù)據(jù)庫(kù)、多維數(shù)據(jù)庫(kù)、可擴(kuò)展標(biāo)記語(yǔ)言(extendablemarkuplanguage,xml)文檔或者存儲(chǔ)結(jié)構(gòu)化和/或非結(jié)構(gòu)化數(shù)據(jù)的任何其他數(shù)據(jù)存儲(chǔ)系統(tǒng)。數(shù)據(jù)114可分布在若干個(gè)關(guān)系數(shù)據(jù)庫(kù)、維度數(shù)據(jù)庫(kù)和/或其他數(shù)據(jù)源之間。實(shí)施例不限于任何數(shù)目或類(lèi)型的數(shù)據(jù)源。
數(shù)據(jù)庫(kù)110可實(shí)現(xiàn)“內(nèi)存”(in-memory)數(shù)據(jù)庫(kù),其中整個(gè)數(shù)據(jù)庫(kù)被存儲(chǔ)在易失性(例如,非基于盤(pán)的)存儲(chǔ)器(例如,隨機(jī)訪問(wèn)存儲(chǔ)器)中。整個(gè)數(shù)據(jù)庫(kù)可被存留在和/或備份到固定盤(pán)中(未示出)。實(shí)施例不限于內(nèi)存實(shí)現(xiàn)方式。例如,數(shù)據(jù)可被存儲(chǔ)在隨機(jī)訪問(wèn)存儲(chǔ)器(例如,用于存儲(chǔ)最近使用的數(shù)據(jù)的緩存存儲(chǔ)器)和一個(gè)或多個(gè)固定盤(pán)(例如,用于存儲(chǔ)整個(gè)數(shù)據(jù)庫(kù)的其各自部分的持久性存儲(chǔ)器)中。
如虛線所指示,應(yīng)用服務(wù)器120可與數(shù)據(jù)庫(kù)110分離或者與數(shù)據(jù)庫(kù)110緊密集成。緊密集成的應(yīng)用服務(wù)器120可使得能夠完全在數(shù)據(jù)庫(kù)110上執(zhí)行服務(wù)器應(yīng)用,而不需要額外的應(yīng)用服務(wù)器。例如,根據(jù)一些實(shí)施例,數(shù)據(jù)庫(kù)110包括提供對(duì)基于web的應(yīng)用的端到端支持的嵌入式服務(wù)的綜合集合。這些服務(wù)可包括輕量型web服務(wù)器、對(duì)odata的可配置支持、服務(wù)器側(cè)javascript執(zhí)行和對(duì)sql和sqlscript的訪問(wèn)。
每個(gè)客戶(hù)端130可包括執(zhí)行用于呈現(xiàn)用戶(hù)界面以允許與應(yīng)用服務(wù)器120的交互的軟件應(yīng)用的程序代碼的一個(gè)或多個(gè)設(shè)備。用戶(hù)界面可包括適合于管理、報(bào)告、數(shù)據(jù)分析和/或任何其他基于數(shù)據(jù)114的功能的用戶(hù)界面。
取決于由應(yīng)用服務(wù)器120生成的用戶(hù)界面代碼的類(lèi)型,如本文所述的用戶(hù)界面的呈現(xiàn)可包括任何程度或類(lèi)型的渲染。例如,客戶(hù)端130可執(zhí)行web瀏覽器來(lái)經(jīng)由http、https和/或websocket從應(yīng)用服務(wù)器120請(qǐng)求并接收網(wǎng)頁(yè)(例如,以html格式)并且可根據(jù)已知的協(xié)議渲染并呈現(xiàn)網(wǎng)頁(yè)??蛻?hù)端130中的一個(gè)或多個(gè)可以額外地或者替換地通過(guò)在虛擬機(jī)內(nèi)執(zhí)行獨(dú)立可執(zhí)行文件(例如,.exe文件)或代碼(例如,java小應(yīng)用程序)來(lái)呈現(xiàn)用戶(hù)界面。
圖2是根據(jù)一些實(shí)施例的系統(tǒng)200的詳細(xì)框圖。系統(tǒng)200可包括在一些實(shí)施例中圖1的系統(tǒng)100的一種實(shí)現(xiàn)方式。系統(tǒng)200包括數(shù)據(jù)庫(kù)205,數(shù)據(jù)庫(kù)205進(jìn)而包括數(shù)據(jù)210和數(shù)據(jù)庫(kù)引擎220。系統(tǒng)200還包括管理工具ui組件230,數(shù)據(jù)庫(kù)管理員240與該管理工具ui組件230交互來(lái)根據(jù)一些實(shí)施例生成重分布計(jì)劃。
計(jì)劃生成引擎222被調(diào)用以便生成重分布計(jì)劃。數(shù)據(jù)庫(kù)引擎220的計(jì)劃生成引擎222可基于經(jīng)由計(jì)劃生成數(shù)據(jù)總線224從計(jì)劃生成步驟模塊226接收的算法來(lái)生成重分布計(jì)劃。模塊226可包括被插入到計(jì)劃生成引擎222的軟件鉤子中并且在重分布計(jì)劃的生成期間的適當(dāng)時(shí)間被調(diào)用的算法。
模塊226可在數(shù)據(jù)庫(kù)系統(tǒng)205的核心內(nèi)實(shí)現(xiàn)(例如,實(shí)現(xiàn)為sqlscript模塊211)、在數(shù)據(jù)庫(kù)引擎220上實(shí)現(xiàn)(例如,實(shí)現(xiàn)為javascript模塊228)和/或在外部系統(tǒng)250上實(shí)現(xiàn),其中到該外部系統(tǒng)250的通信信道可作為模塊252被建立。模塊226因此可提供一種機(jī)制,通過(guò)該機(jī)制客戶(hù)可實(shí)現(xiàn)依客戶(hù)而定的算法,該算法作為由數(shù)據(jù)庫(kù)系統(tǒng)205的提供者發(fā)貨的算法的替換在重分布計(jì)劃的生成期間被調(diào)用。
數(shù)據(jù)210包括倉(cāng)庫(kù)212和表格218。倉(cāng)庫(kù)212的模塊接口數(shù)據(jù)214包括計(jì)劃生成環(huán)境(例如,模塊接口的元數(shù)據(jù),和配置設(shè)定(例如,哪些模塊要被使用))和在重分布計(jì)劃216的生成期間生成的日志。重分布計(jì)劃216定義數(shù)據(jù)庫(kù)表格分區(qū)的數(shù)目及其布置,并且可被觸發(fā)來(lái)由數(shù)據(jù)庫(kù)205執(zhí)行。
圖3包括根據(jù)一些實(shí)施例的過(guò)程300的流程圖。過(guò)程300可包括系統(tǒng)根據(jù)一些實(shí)施例生成重分布計(jì)劃。在一些實(shí)施例中,系統(tǒng)100或200的各種硬件元件(例如,一個(gè)或多個(gè)處理器)執(zhí)行程序代碼來(lái)執(zhí)行過(guò)程300。
過(guò)程300和本文提到的所有其他過(guò)程可以用從諸如軟盤(pán)、基于盤(pán)的硬盤(pán)驅(qū)動(dòng)器或固態(tài)硬盤(pán)驅(qū)動(dòng)器、cr-rom、dvd-rom、閃盤(pán)驅(qū)動(dòng)器和磁帶之類(lèi)的非暫態(tài)計(jì)算機(jī)可讀介質(zhì)中的一個(gè)或多個(gè)讀取并且隨后被以壓縮的、未編譯的和/或加密的格式存儲(chǔ)的處理器可執(zhí)行程序代碼來(lái)實(shí)現(xiàn)。在一些實(shí)施例中,硬連線的電路可取代程序代碼或與程序代碼相結(jié)合使用來(lái)實(shí)現(xiàn)根據(jù)一些實(shí)施例的過(guò)程。實(shí)施例因此不限于硬件和軟件的任何特定組合。
在s310之前,用戶(hù)可登錄到用于管理數(shù)據(jù)庫(kù)系統(tǒng)的應(yīng)用。實(shí)施例可采用任何適當(dāng)?shù)墓ぷ魇?、工具、開(kāi)發(fā)環(huán)境或其他管理應(yīng)用。例如,管理員240可操作客戶(hù)端設(shè)備來(lái)訪問(wèn)數(shù)據(jù)庫(kù)210的管理應(yīng)用的web門(mén)戶(hù)。假定管理員240提供適當(dāng)?shù)淖C書(shū),則管理工具ui組件230可將用戶(hù)界面發(fā)送到客戶(hù)端設(shè)備來(lái)顯示。
圖4是根據(jù)一些實(shí)施例的用戶(hù)界面400的外在視圖。管理員240可操縱用戶(hù)界面400來(lái)指定計(jì)劃生成步驟模塊226及其特定參數(shù)。更具體而言,簡(jiǎn)檔字段410指定與其自己的模塊接口(即,“鉤子”)和算法相關(guān)聯(lián)的特定計(jì)劃生成環(huán)境。
用戶(hù)界面400的各種區(qū)塊對(duì)應(yīng)于計(jì)劃生成環(huán)境的不同步驟。在每個(gè)區(qū)塊內(nèi)可指定多種參數(shù)。例如,參數(shù)“(一個(gè)或多個(gè))模式名稱(chēng)”、“(一個(gè)或多個(gè))群組名稱(chēng)”和“(一個(gè)或多個(gè))群組類(lèi)型”是鉤入到步驟中來(lái)確定分區(qū)元數(shù)據(jù)的模塊226的參數(shù),這將在下文描述。過(guò)程300在執(zhí)行生成計(jì)劃用戶(hù)界面控件時(shí)開(kāi)始。
在s310,確定要執(zhí)行的計(jì)劃生成步驟和對(duì)于每個(gè)步驟要調(diào)用的模塊。計(jì)劃生成引擎222可基于上文描述的用戶(hù)輸入(即,指定計(jì)劃生成環(huán)境和對(duì)于環(huán)境的每個(gè)步驟指定參數(shù))加載模塊接口數(shù)據(jù)的配置設(shè)定并且基于其來(lái)實(shí)例化計(jì)劃生成環(huán)境。如上所述,計(jì)劃生成環(huán)境提供一個(gè)或多個(gè)預(yù)定的鉤子,這些鉤子可由模塊實(shí)現(xiàn)(或者在一些情況下必須由模塊實(shí)現(xiàn))。s310還包括加載模塊226之中的與實(shí)例化的計(jì)劃生成環(huán)境的鉤子相對(duì)應(yīng)的模塊,執(zhí)行一致性檢查并且寫(xiě)入消息日志。
接下來(lái),在s320,僅當(dāng)要求的且識(shí)別的模塊被成功加載時(shí),計(jì)劃生成環(huán)境才被執(zhí)行來(lái)生成重分布計(jì)劃。在一些實(shí)施例中,計(jì)劃生成引擎222可執(zhí)行計(jì)劃生成環(huán)境的步驟,適當(dāng)?shù)卣{(diào)用加載的模塊,來(lái)生成分布計(jì)劃。在引擎222和模塊之間傳達(dá)的數(shù)據(jù)的一致性被對(duì)照模塊接口來(lái)檢查并且日志被寫(xiě)入來(lái)提供關(guān)于每個(gè)步驟的結(jié)果的詳細(xì)信息。根據(jù)一些實(shí)施例的s320將在下文參考圖5的替換過(guò)程500和圖6的替換過(guò)程600來(lái)詳細(xì)描述。
生成的重分布計(jì)劃在s330被存儲(chǔ)。重分布計(jì)劃由重分布步驟組成,重分布步驟可包含關(guān)于將表格分區(qū)移動(dòng)到何處或者如何改變分區(qū)的數(shù)目的信息,或者可包括特殊的語(yǔ)義(例如,觸發(fā)重壓縮)。這些步驟可被存儲(chǔ)在倉(cāng)庫(kù)212的重分布計(jì)劃216中并且可隨后被數(shù)據(jù)庫(kù)系統(tǒng)205執(zhí)行來(lái)重分布分區(qū)。
在s340,與計(jì)劃生成有關(guān)的日志消息被寫(xiě)入到數(shù)據(jù)庫(kù)表格。日志消息可包括關(guān)于計(jì)劃生成的狀態(tài)和關(guān)于發(fā)生的任何問(wèn)題的信息。消息可被設(shè)定成與任何實(shí)體(例如,表格)發(fā)生關(guān)系,從而使得用戶(hù)可識(shí)別與給定實(shí)體相關(guān)聯(lián)的消息。模塊可能夠向日志消息賦予不同的嚴(yán)重性級(jí)別,從而促進(jìn)對(duì)問(wèn)題的根本原因的識(shí)別。
圖5的過(guò)程500包括根據(jù)一些實(shí)施例的過(guò)程300的s320的一種實(shí)現(xiàn)方式。一般而言,在過(guò)程500期間,計(jì)劃生成引擎222按預(yù)定的順序執(zhí)行由所選擇的計(jì)劃生成環(huán)境定義的特定步驟。用于執(zhí)行每個(gè)步驟的邏輯可由數(shù)據(jù)庫(kù)205的開(kāi)發(fā)者提供,并且客戶(hù)、咨詢(xún)顧問(wèn)或其他人可通過(guò)提供實(shí)現(xiàn)其自己的步驟實(shí)現(xiàn)方式的模塊來(lái)覆寫(xiě)此邏輯。這種模塊必須遵守步驟的接口合約。
轉(zhuǎn)到具體步驟,在s510確定分區(qū)元數(shù)據(jù)。實(shí)現(xiàn)此步驟的模塊返回表示在下一步驟中要讀取的分區(qū)的集合和元數(shù)據(jù)的抽象數(shù)據(jù)源。在s510期間,要重組織的分區(qū)的集合可被約束(例如,通過(guò)針對(duì)某些屬性進(jìn)行過(guò)濾)或者充實(shí)(例如,通過(guò)從外部源提供額外的元數(shù)據(jù),例如量級(jí)估計(jì))。
實(shí)施例可支持多于一個(gè)模塊執(zhí)行s510。如果多于一個(gè)模塊被使用,則這些模塊與彼此形成流水線,使得由第一模塊返回的數(shù)據(jù)源被傳遞下去作為第二模塊的數(shù)據(jù)源,等等依此類(lèi)推。所得到的數(shù)據(jù)源可以是復(fù)雜嵌套數(shù)據(jù)源。
接下來(lái),在s520,從在s510產(chǎn)生的抽象數(shù)據(jù)源讀取一批分區(qū)信息。例如,實(shí)現(xiàn)s520的模塊可返回與彼此表現(xiàn)出特定關(guān)系(例如,由于常規(guī)數(shù)據(jù)庫(kù)查詢(xún)?cè)诼?lián)接中使用這些表格)的表格的群組。讀取的批次的表格被聯(lián)合處理,從而對(duì)于重組織允許了更大靈活性(例如,關(guān)于放置的)。s520還確定表格將按什么順序被處理(例如,從具有最大表格的最大群組到具有最小表格的最小群組)。對(duì)于作為由此模塊返回的批次的一部分的每個(gè)表格,預(yù)期該表格的所有分區(qū)被返回(即,描述完整表格)。
在s530確定讀取的批次的每個(gè)表格的配置設(shè)定。預(yù)期向該批次的每個(gè)表格指派配置,并且如果沒(méi)有找到關(guān)聯(lián)的配置則忽略表格。附于表格的配置可由“擁有”該表格的應(yīng)用的開(kāi)發(fā)者定義,但也可由數(shù)據(jù)庫(kù)管理員或咨詢(xún)顧問(wèn)定義(即,作為“配置類(lèi)型”)。
在s540基于配置設(shè)定確定該批次的每個(gè)表格的分區(qū)的目標(biāo)數(shù)目。實(shí)現(xiàn)s540的模塊可按每批次操作,以例如確保作為該批次的一部分的所有表格被指派相同數(shù)目的分區(qū)。s540可以是可選的,因?yàn)樵诜謪^(qū)的數(shù)目已被定義為固定的情況下其可被跳過(guò)。
對(duì)于該批次中包含的每個(gè)分區(qū),實(shí)現(xiàn)s5504模塊確定該分區(qū)應(yīng)當(dāng)被放置在的主機(jī)。在確定分布式數(shù)據(jù)庫(kù)系統(tǒng)的哪個(gè)主機(jī)對(duì)于給定表格是最優(yōu)的時(shí)可考慮任何數(shù)目的因素。例如,最優(yōu)主機(jī)可基于本地最優(yōu)來(lái)選擇(例如,具有最低的存儲(chǔ)器利用率的主機(jī))、基于給定表格的增長(zhǎng)率來(lái)選擇,或者被選擇來(lái)確保所有主機(jī)上的所有表格的記錄的數(shù)目是大致相等的。
在s560判定是否停止計(jì)劃的生成。此判定可簡(jiǎn)單地是對(duì)于是否還有任何批次的分區(qū)元數(shù)據(jù)仍未被讀取的判定。如果否,則如圖所示流程前進(jìn)到s330。
s560也可采用評(píng)估計(jì)劃生成是否應(yīng)當(dāng)被停止的一個(gè)或多個(gè)模塊。這些模塊可被“或”(or)在一起,使得如果任何模塊判定計(jì)劃生成應(yīng)當(dāng)被停止則計(jì)劃生成將停止。例如,如果已經(jīng)知道表格分區(qū)是正確分布的并且如果檢測(cè)到整體節(jié)點(diǎn)利用率是充分平衡的,則計(jì)劃生成可被提早停止(即,在讀取分區(qū)元數(shù)據(jù)的所有批次之前)。用于判定是否停止計(jì)劃生成的其他因素包括但不限于主機(jī)的數(shù)目、主機(jī)間的整體存儲(chǔ)器分布、通過(guò)讀取或修改屬于一起的不同表格分區(qū)的數(shù)據(jù)所引起的處理器負(fù)載以及執(zhí)行重分布計(jì)劃所需要的時(shí)間。
如果s560處的判定是否定,則流程返回到s520以讀取下一批分區(qū)元數(shù)據(jù)并且如上所述繼續(xù)直到所有批次都被讀取并且重分布計(jì)劃被生成為止或者直到在s560因其他原因判定停止計(jì)劃生成為止。
圖6的過(guò)程600例示了根據(jù)一些實(shí)施例的s320的一種實(shí)現(xiàn)方式。過(guò)程600反映了一種計(jì)劃生成環(huán)境,其中重分布計(jì)劃是基于由數(shù)據(jù)庫(kù)管理員定義的參數(shù)在一個(gè)步驟內(nèi)生成的。因此,不是利用如針對(duì)過(guò)程500所述定制重分布計(jì)劃生成的關(guān)聯(lián)子步驟的模塊,而是插入到過(guò)程600的計(jì)劃生成環(huán)境中的模塊提供用于生成重分布計(jì)劃的完整算法的一種實(shí)現(xiàn)方式。
在s610,使由數(shù)據(jù)庫(kù)管理員提供(例如,由數(shù)據(jù)庫(kù)管理員240經(jīng)由界面400提供)的數(shù)據(jù)符合計(jì)劃生成環(huán)境的(唯一)模塊接口。接下來(lái),在s620,該模塊基于計(jì)劃生成環(huán)境的配置數(shù)據(jù)和由數(shù)據(jù)庫(kù)管理員提供的數(shù)據(jù)生成分布計(jì)劃。流程隨后如上所述繼續(xù)到s330。
前述模塊化概念經(jīng)由明確定義的接口和調(diào)用能力促進(jìn)了插件模塊的使用,這些插件模塊提供了影響重分布計(jì)劃的生成的功能,這些重分布計(jì)劃例如定義數(shù)據(jù)庫(kù)表格分區(qū)及其在分布式數(shù)據(jù)庫(kù)系統(tǒng)的主機(jī)上的放置。
圖7是根據(jù)一些實(shí)施例的裝置700的框圖。裝置700可包括通用計(jì)算裝置并且可執(zhí)行程序代碼來(lái)執(zhí)行本文描述的任何功能。根據(jù)一些實(shí)施例,裝置700可包括圖1的數(shù)據(jù)庫(kù)110和應(yīng)用服務(wù)器120和/或圖2的數(shù)據(jù)庫(kù)系統(tǒng)205的一種實(shí)現(xiàn)方式。裝置700可包括其他未示出的元件。
裝置700包括處理器710,該處理器710操作性地耦合到通信設(shè)備720、數(shù)據(jù)存儲(chǔ)設(shè)備730、一個(gè)或多個(gè)輸入設(shè)備740、一個(gè)或多個(gè)輸出設(shè)備750和存儲(chǔ)器760。通信設(shè)備720可促進(jìn)與外部設(shè)備(例如客戶(hù)端)或外部數(shù)據(jù)存儲(chǔ)設(shè)備的通信。(一個(gè)或多個(gè))輸入設(shè)備740可包括例如鍵盤(pán)、小鍵盤(pán)、鼠標(biāo)或其他指點(diǎn)設(shè)備、麥克風(fēng)、旋鈕或開(kāi)關(guān)、紅外(ir)端口、擴(kuò)展塢和/或觸摸屏。(一個(gè)或多個(gè))輸入設(shè)備740可例如用于向裝置700中輸入信息。(一個(gè)或多個(gè))輸出設(shè)備750可包括例如顯示器(例如,顯示屏)、揚(yáng)聲器和/或打印機(jī)。
數(shù)據(jù)存儲(chǔ)設(shè)備730可包括任何適當(dāng)?shù)某志眯源鎯?chǔ)設(shè)備,包括磁存儲(chǔ)設(shè)備(例如,磁盤(pán)、硬盤(pán)驅(qū)動(dòng)器和閃存)、光存儲(chǔ)設(shè)備、只讀存儲(chǔ)器(readonlymemory,rom)設(shè)備等等的組合,而存儲(chǔ)器760可包括隨機(jī)訪問(wèn)存儲(chǔ)器(randomaccessmemory,ram)、存儲(chǔ)級(jí)存儲(chǔ)器(storageclassmemory,scm)或者任何其他快速訪問(wèn)存儲(chǔ)器。
管理工具731、計(jì)劃生成引擎732、計(jì)劃生成步驟模塊733和dbms734可包括由處理器710執(zhí)行來(lái)使得裝置700執(zhí)行本文描述的過(guò)程中的任何一個(gè)或多個(gè)的程序代碼。實(shí)施例不限于單個(gè)裝置執(zhí)行這些過(guò)程。
重分布計(jì)劃735如本文所述可由計(jì)劃生成引擎732聯(lián)合計(jì)劃生成步驟模塊733生成。數(shù)據(jù)庫(kù)表格736可包括存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)庫(kù)表格,以及元數(shù)據(jù)和希望存儲(chǔ)的任何其他數(shù)據(jù)。如本領(lǐng)域中已知的,重分布計(jì)劃735可被執(zhí)行來(lái)在主機(jī)之間分布數(shù)據(jù)庫(kù)表格736的分區(qū)。
數(shù)據(jù)庫(kù)表格736可如圖所示被存儲(chǔ)在設(shè)備730中和/或存儲(chǔ)在例如存儲(chǔ)器760之類(lèi)的易失性存儲(chǔ)器中。數(shù)據(jù)存儲(chǔ)設(shè)備730也可存儲(chǔ)用于提供額外功能和/或?qū)τ谘b置700的操作所必要的數(shù)據(jù)和其他程序代碼,例如設(shè)備驅(qū)動(dòng)器、操作系統(tǒng)文件等等。
前述附圖表示用于描述根據(jù)一些實(shí)施例的過(guò)程的邏輯體系結(jié)構(gòu),并且實(shí)際實(shí)現(xiàn)方式可包括以其他方式布置的更多或不同的組件。結(jié)合其他實(shí)施例可使用其他拓?fù)?。另外,本文描述的每個(gè)組件或設(shè)備可由經(jīng)由任何數(shù)目的其他公共和/或私有網(wǎng)絡(luò)通信的任何數(shù)目的設(shè)備實(shí)現(xiàn)。這種計(jì)算設(shè)備中的兩個(gè)或更多個(gè)可位于彼此的遠(yuǎn)程并且可經(jīng)由(一個(gè)或多個(gè))網(wǎng)絡(luò)和/或?qū)S眠B接的任何已知方式與彼此通信。每個(gè)組件或設(shè)備可包括適合于提供本文描述的功能以及任何其他功能的任何數(shù)目的硬件和/或軟件元件。例如,在根據(jù)一些實(shí)施例的系統(tǒng)的實(shí)現(xiàn)方式中使用的任何計(jì)算設(shè)備可包括處理器來(lái)執(zhí)行程序代碼以使得該計(jì)算設(shè)備如本文所述那樣操作。
本文論述的所有系統(tǒng)和過(guò)程可以用存儲(chǔ)在一個(gè)或多個(gè)非暫態(tài)計(jì)算機(jī)可讀介質(zhì)上的程序代碼來(lái)實(shí)現(xiàn)。這種介質(zhì)可包括例如軟盤(pán)、cd-rom、dvd-rom、閃盤(pán)驅(qū)動(dòng)器、磁帶和固態(tài)隨機(jī)訪問(wèn)存儲(chǔ)器(ram)或只讀存儲(chǔ)器(rom)存儲(chǔ)單元。實(shí)施例因此不限于硬件和軟件的任何特定組合。
本文描述的實(shí)施例只是為了例示。本領(lǐng)域技術(shù)人員將會(huì)認(rèn)識(shí)到在對(duì)上文描述的進(jìn)行修改和替換后可實(shí)現(xiàn)其他實(shí)施例。