本公開內容一般性地涉及存儲技術,并且更特別地涉及一種用于存儲數據的方法和裝置。
背景技術:
近來,時間序列數據在云系統和數據中心中正在變得越來越大,虛擬化和集裝化的技術已經增加了用于典型的分布式應用和服務的獨立節點的數目。
未加工的時間序列數據通常是具有諸如{uuid,測量,時間戳,數值}這種格式的數據點的序列,其可以直接寫入數據存儲設備,諸如數據庫或者平面文件。盡管具有很大的靈活性,但是這樣的設計需要存儲許多冗余信息,所以難以用高效的方式來查詢。此外,分析任務將會遭受嚴重的性能問題。
例如,在使用openstack作為參考云平臺的具體場景中,一個具有諸如{資源id、時間戳、數值}這種格式的數據點被存儲作為ceilometer數據庫中的數據項。但是,這種不良的數據存儲設計使得后續的分析過程變得極度復雜,并且同時遭受到性能問題。
技術實現要素:
鑒于現有技術中存在的上述技術問題,本公開內容的實施例的目的之一在于提供一種用于存儲數據的方法和裝置,以解決現有技術中存在的上述至少一個技術問題。
根據本公開內容的第一方面,提供了一種用于存儲數據的方法。該方法包括:從時間序列數據中提取度量信息以及與度量信息相關聯的元數據,其中度量信息包括時間值和在時間值處的數值;以及將度 量信息存儲在對象存儲設備中,并且將元數據存儲在數據庫中。
在一些實施例中,元數據可以包括實體和資源,實體可以包括測量項目并且資源可以包括實體的組合。在一些實施例中,時間值和數值可以與特定實體相關聯。在一些實施例中,對象存儲設備可以具有可伸縮的存儲空間。
在一些實施例中,該方法可以進一步包括:將所述度量信息的存儲塊劃分為具有固定時間跨度的多個分段。在一些實施例中,該方法可以進一步包括:將分段與時間跨度之間的對應關系存儲在數據庫中作為元數據的一部分。在一些實施例中,數據庫可以包括結構化查詢語言sql數據庫。
在一些實施例中,該方法可以進一步包括:使用分層技術將度量信息存儲在對象存儲設備中。在一些實施例中,對象存儲設備可以包括作為性能層的第一存儲設備和作為容量層的第二存儲設備。在一些實施例中,該方法可以進一步包括:將度量信息存儲在第一存儲設備中,并且同時復制到第二存儲設備。
在一些實施例中,該方法可以進一步包括:在將度量信息存儲在第一存儲設備中時,基于策略來刪除第一存儲設備中的原有對象數據。在一些實施例中,策略可以基于對象數據的訪問頻率和存儲年齡。
在一些實施例中,該方法可以進一步包括:如果要訪問的對象數據僅存儲在第二存儲設備中,則將對象數據從第二存儲設備復制到第一存儲設備。在一些實施例中,第一存儲設備可以包括固態硬盤ssd,并且第二存儲設備可以包括硬盤驅動器hdd。
在一些實施例中,該方法可以進一步包括:提供專用用戶接口用以管理度量信息和元數據。在一些實施例中,管理可以包括以下各項中的至少一項:寫入、讀取、刪除、以及更新。在一些實施例中,專用用戶接口可以包括表述性狀態傳遞rest接口。
根據本公開內容的第二方面,提供了一種用于存儲數據的裝置。該裝置包括:提取單元,被配置為從時間序列數據中提取度量信息以及與度量信息相關聯的元數據,其中度量信息包括時間值和在時間值 處的數值;以及控制單元,被配置為將度量信息存儲在對象存儲設備中,并且將元數據存儲在數據庫中。
根據本公開內容的第三方面,提供了一種計算機可讀存儲介質。該計算機可讀存儲介質具有存儲在其上的計算機可讀程序指令,這些計算機可讀程序指令用于執行根據本公開內容的第一方面的方法。
根據本公開內容的第四方面,提供了一種存儲系統。該存儲系統包括根據本公開內容的第二方面的裝置。
相對于現有技術的方法,根據本公開內容的用于存儲數據的方法和裝置提供了一種靈活的存儲設計,用以保證存儲容量的可擴展性,并且同時支持對數據的快速取回。這對于后續的分析任務是非常有幫助的,諸如時間序列虛擬化和統計分析,實時分類和預測,甚至進一步的決策和自動it操作。
此外,根據本公開一個或多個實施方式的用于存儲數據的方法和裝置還可以獲得如下的技術優點。首先,通過利用數據庫中的索引化技術和對象存儲設備中的快速對象訪問,數據請求能夠快速地被執行。其次,數據請求中的參數規定,例如,時間跨度、資源列表和實體列表等,可以支持具有不同過濾和排序的數據取回,例如,用以滿足用戶的分析場景的資源與實體的不同組合。第三,對象存儲設備可以支持幾乎無限的存儲容量并且具有靈活可伸縮性的特性。
附圖說明
通過參考附圖閱讀下文的詳細描述,本公開內容的實施例的上述以及其他目的、特征和優點將變得容易理解。在附圖中,以示例性而非限制性的方式示出了本公開內容的若干實施例,其中:
圖1示意性地示出了根據本公開內容的實施例的用于存儲數據的方法的流程圖。
圖2示意性地示出了根據本公開內容的實施例的利用數據庫和分層的對象存儲設備的時間序列數據存儲模型的示圖。
圖3示意性地示出了根據本公開內容的實施例的對象存儲設備中 具有等同時間跨度的實體分段的示圖。
圖4示意性地示出了根據本公開內容的實施例的數據對象的狀態轉換示圖。
圖5示意性地示出了根據本公開內容的實施例的請求數據的工作流程的示圖。
圖6示意性地示出了根據本公開內容的實施例的用于存儲數據的裝置的框圖。
圖7示意性地示出了一個可以用來實施本公開內容的實施例的設備的框圖。
具體實施方式
下面將參考附圖中所示出的若干示例性實施例來描述本公開內容的原理和精神。應當理解,描述這些具體的實施例僅是為了使本領域的技術人員能夠更好地理解并實現本公開內容,而并非以任何方式限制本公開內容的范圍。
在存儲系統中,時間序列數據并不具有通用目的,并且具有其特定的訪問模式。例如,時間序列數據幾乎總是按時間順序到達,寫入幾乎總是按次序進行添加;時間序列數據很少更新;時間序列數據按批地(inbulk)刪除,開始于歷史數據的起始并且按相連的塊來進行,所以高效的批量刪除是重要的;對近期數據的讀取具有非常低的時延,幾乎實時地進行;讀取通常是按序列地依次進行的;并且一次讀取多個序列是常見的。
鑒于時間序列數據的上述特點,使用時間序列數據的模型化用于分析提出了新的挑戰,這主要歸因于其巨大的量、快速的生成速度、要求幾乎無限的存儲容量和可伸縮性、以及查詢的靈活性。
一般而言,在時間序列數據中存在兩種類型的信息,度量信息和元數據。基于此,本公開內容提出了一種分離的數據存儲和數據模型的設計,即用于時間序列度量信息的對象存儲設備和用于元數據的數據庫,以便于支持對時間序列數據的快速和可伸縮的訪問。
此外,本公開內容還可以將分層存儲技術應用到對象存儲設備池,以進一步加速對數據的取回,其中可以使用固態硬盤ssd作為性能層,可以使用硬盤驅動器hdd作為容量層。因此,度量信息可以按序列緊密地被包裝并且被優化用于對序列的順序讀取,同時對數據庫中的元數據進行的索引化和排序支持了靈活的且面向分析任務的數據劃分群組。
圖1示意性地示出了根據本公開內容的實施例的用于存儲數據的方法100的流程圖。在一些實施例中,方法100可以由稍后參考圖6所描述的裝置600來執行。
如圖1中所示出的,方法100在開始之后可以進入步驟101。在步驟101中,從時間序列數據中提取度量信息以及與度量信息相關聯的元數據,其中度量信息包括時間值和在時間值處的數值。
如上文所述,在時間序列數據中存在兩種類型的信息,即度量信息和相關的元數據,其中度量信息包括時間值和在時間值處的數值。在一些實施例中,度量信息可以包括針對給定實體的{時間戳,數值}的列表,而實體可以包括具體的測量項目,例如,產品環境中的溫度,或者實例的cpu利用率,等等。在一些實施例中,時間值和數值可以與特定實體相關聯。
根據本公開內容的實施例,可以使用分離的數據模型來支持對時間序列數據的快速和可伸縮的訪問。也就是說,如稍后結合圖2進一步描述的,可以使用對象存儲設備來存儲度量信息,并且使用數據庫來存儲相關的元數據。
在一些實施例中,元數據可以包括實體和資源,其中實體可以包括測量項目并且資源可以包括實體的組合。在這些實施例中,時間序列數據可以被提取為三個部分,度量、實體和資源。
在一些實施例中,資源根據不同的應用場景可以與任何數目的實體相聯系。此外,資源的配置可以易于靈活地根據后續的諸如分析任務來進行規定。
接下來,在完成步驟101之后,方法100可以進入步驟102,在 步驟102中,將度量信息存儲在對象存儲設備中,并且將元數據存儲在數據庫中。
根據本公開內容的實施例,時間序列數據的度量信息可以被存儲在對象存儲設備中,對象存儲設備可以利用可伸縮的設計來提供幾乎無限的空間來存儲數據。在一些實施例中,對象存儲設備可以具有可伸縮的存儲空間。
在一些實施例中,數據庫可以包括結構化查詢語言sql數據庫。如此,與資源有關的信息可以被存儲在sql數據庫中,所以能夠充分地利用其快速排序和索引化的特征。
圖2示意性地示出了根據本公開內容的實施例的利用數據庫和分層的對象存儲設備的時間序列數據存儲模型的示圖。應當理解,圖2中所描繪的具體存儲結構和過程僅是本公開內容的實施例的一種具體示例,在其他的具體實施例中,也可以偏離圖2中所描繪的技術細節來實施本公開內容的技術方案。
如圖2中所示出的,具有{uuid,測量,時間戳,數值}格式的時間序列數據201可以首先經過數據提取202處理。接著,所提取的元數據可以進行索引化處理204,然后存儲到數據庫205中。如圖2中所示出的,所存儲的元數據可以采用標記209所示出的形式,即以資源為單位進行存儲,每個資源可以包括一個或多個實體。
另一方面,所提取的度量信息可以經過存儲/復制203處理之后進入分層的對象存儲設備206。如圖2中所示出的,并且如稍后進一步描述的,對象存儲設備206可以包括作為性能層的ssd207和作為容量層的hdd208。所存儲的度量信息可以采用關于某個實體的{時間戳,數值}列表210的形式。由此實現了分離的數據存儲和數據模型,同時利用了分層存儲技術。
在下文中,參考圖3來描述本公開內容的進一步的實施例。圖3示意性地示出了根據本公開內容的實施例的對象存儲設備中具有等同時間跨度的實體分段的示圖。
如圖3中所示出的,考慮到時間序列數據的潛在無限的特性,可 以將某個實體的度量信息塊拆分為具有固定時間跨度的多個分段。因此,在一些實施例中,方法100可以進一步包括:將度量信息的存儲塊劃分為具有固定時間跨度的多個分段。
此外,實體分段與時間跨度之間的對應關系可以被存儲在數據庫中作為元數據,而實體分段可以在時間上連續地寫入到對象存儲設備。因此,在一些實施例中,方法100可以進一步包括:將分段與時間跨度之間的對應關系存儲在數據庫中作為元數據的一部分。
在圖3中所描繪的具體示例中,數據庫310可以存儲元數據311,而元數據311可以采用例如關于實體_a的不同時間跨度的分段實體,諸如實體_a_1、實體_a_2、……、實體_a_n等等。相應地,在對象存儲設備320中,存儲了關于實體_a_1、實體_a_2、……、實體_a_n的具體度量信息,例如,實體_a_1的{時間戳,數值}列表321、實體_a_2的{時間戳,數值}列表322、……、實體_a_n的{時間戳,數值}列表323,等等。因此,避免了在對象存儲設備中某個實體的度量信息過大的問題。
在下文中,將詳細地描述用于本公開內容的實施例的分層存儲技術。如上文所描述的,分層技術可以使用在混合的存儲系統中。例如,ssd可以提供比hdd多至100倍的每秒輸入輸出操作iops。因此,存儲系統可能需要自動進行分層或緩存的技術來實現由ssd提供的大多數增加的性能。在一些實施例中,可以使用ssd作為性能層,并且使用hdd作為容量層。
自動分層的基本原理是,隨著數據老化,它的價值下降。隨著數據的值按時間下降,將它移動到較低性能和較低成本的存儲層是有意義的。自動化的分層基于諸如數據年齡、訪問頻率、最后訪問時間和甚至響應時間之類的策略。
此外,分層是一種反應性技術,意味著它基于歷史訪問趨勢或者應用模式來移動/移除數據。因此,關鍵任務的數據可以利用ssd作為目標存儲設備。但是,隨著數據老化,它可以被移出ssd,當被召回(recall)時,它可以從hdd被復制回來。
基于上述的基本思想,如圖2中所示出的,分層技術可以被應用到對象存儲設備206以進一步加速對數據的取回。具體地,ssd207可以被使用作為性能層,而低成本的hdd208可以被使用作為容量層。以這種方式,熱數據對象能夠從性能層非常快速地被取回,而在ssd207中逐漸冷卻的數據對象可以有意地自動消失,并且同時不用擔心丟失數據對象。
因此,在一些實施例中,方法100可以進一步包括:使用分層技術將度量信息存儲在對象存儲設備中。在這些實施例中,對象存儲設備可以包括作為性能層的第一存儲設備和作為容量層的第二存儲設備。在具體使用性能層和容量層來存儲度量信息的實施例中,方法100可以進一步包括:將度量信息存儲在第一存儲設備中,并且同時復制到第二存儲設備。
在進一步的實施例中,方法100可以包括:在將度量信息存儲在第一存儲設備中時,基于策略來刪除第一存儲設備中的原有對象數據。在一些實施例中,策略可以基于對象數據的訪問頻率和存儲年齡。另外,方法100可以進一步包括:如果要訪問的對象數據僅存儲在第二存儲設備中,則將對象數據從第二存儲設備復制到第一存儲設備。如上文所闡述的,第一存儲設備可以包括固態硬盤ssd,并且第二存儲設備可以包括硬盤驅動器hdd。
圖4示意性地示出了根據本公開內容的實施例的數據對象的狀態轉換示圖。具體而言,圖4中示出了在ssd與hdd之間的數據移動以及數據對象的對應狀態轉換,其中數據的狀態轉換體現了訪問趨勢的改變,“獎勵”表示不遠的未來將存在潛在的訪問,而“懲罰”表示在不遠的未來很可能沒有訪問。
如圖4中所示出的,當新數據對象401被存儲到存儲設備時,它可以被寫入ssd410,同時復制到hdd420。新數據對象401向ssd410和hdd420兩者的復制寫入使得時間序列數據在hdd420處能夠連續地寫入和順序組織(沿著時間線),并且因此促進了基于此后的數據取回的在分區0和時間范圍中的實體分段。
進一步地,因為新到來的時間序列數據總是首先寫入ssd410,由于容量的限制,這可以促使一些舊的數據對象從ssd410中消失。用于置換的策略可以基于時間對象的訪問頻率和時間位置等。
此外,當接收到對數據的請求時,如果數據對象已經在ssd410中,它將準備好用于快速取回,這樣的訪問可以視為一種“獎勵”,可以對增加它保持停留在性能層ssd410中用于不遠的未來進行下一次訪問。
另一方面,逐漸減少的訪問次數將會導致對于數據對象的“懲罰”而增加它從ssd410消失的機會。
對僅保存在hdd420中的數據對象的訪問將會帶來“獎勵”,從而增加將該數據對象變熱的機會,也就是將該數據對象從hdd420復制到sdd410。
在本公開內容的實施例中,還提供了專用用戶接口來實現用戶對時間序列數據的請求。在這個方面,方法100可以進一步包括:提供專用用戶接口用以管理度量信息和元數據。在一些實施例中,管理可以包括以下各項中的至少一項:寫入、讀取、刪除、以及更新。在一些實施例中,專用用戶接口可以包括表述性狀態傳遞rest接口。
作為非限制性的示例,以表述性狀態傳遞rest接口為例,本公開內容的實施例所提供的專用用戶接口可以至少包括以下的restfulapi用以響應用戶請求。
post/vi/entity:創建實體。
post/vi/entity/<id>/measures:將{時間戳:<ts>,數值:<v>}的列表存儲到存儲設備作為針對指定實體的測量。
get/v1/entity/<id>/measure:讀取針對指定實體的測量{時間戳:<ts>,數值:<v>}的列表。用戶能夠指定具有“開始=”和“結束=”的參數的間隔。
delete/v1/entity/<id>:刪除指定的實體,包括屬于這個實體的所有分段。
post/v1/resource:創建資源。屬于這個資源的實體可以在參數 中被指定。
put/v1/resource/<id>:更新指定資源中的實體。
get/v1/resource/<id>/measures:讀取針對指定資源中的所有實體的測量。
get/v1/resource/<id>/entity/<id>/measures:讀取針對資源中的指定實體的測量。
delete/v1/resource/<id>:刪除資源。但是,將不會刪除這個資源中指定的實體。
下面參考圖5來具體地描述根據本公開內容的實施例的數據請求的工作流程。圖5示意性地示出了根據本公開內容的實施例的請求數據的工作流程的示圖。
如圖5中所示出的,描繪了數據取回的示例工作流程。在步驟501中,接收到rest數據取回請求。如方框510中所示出的,該請求用以獲得在指定時間跨度之間的實例x的cpu利用率數據。在步驟502中,該請求可以通過接口api520首先被發送給數據庫530來獲得與對象存儲設備540中所存儲的數據對象有關的對應元數據。在步驟503中,可以在數據庫530中搜索與res-實例-x有關的資源信息。在步驟504中,可以搜索與資源中的cpu利用率(x-cpu-util)有關的實體信息。在步驟505中,可以利用用戶指定的時間跨度,導出與實體分段有關的對象信息。在步驟506中,可以定位對象存儲設備540中的該數據分段。最后,在步驟507中,所請求的測量的列表可以被發送給用戶。
圖6示意性地示出了根據本公開內容的實施例的用于存儲數據的裝置600的框圖。在圖6所示出的框圖中,使用虛線框來表示可選的單元或組件。本領域的技術人員可以理解,圖6中僅示出了裝置600中的與本公開內容緊密相關的單元或組件,在具體的實踐中,裝置600可以包括使其能夠正常操作的其他功能單元或組件。此外,圖6中所示出的各個單元或組件之間可以存在必要的連接關系,但是出于簡潔的考慮,圖6中并沒有描繪出這些連接關系。
如圖6中所示出的,用于存儲數據的裝置600包括提取單元601和控制單元602。提取單元601被配置為從時間序列數據中提取度量信息以及與度量信息相關聯的元數據,其中度量信息包括時間值和在時間值處的數值。控制單元602被配置為將度量信息存儲在對象存儲設備中,并且將元數據存儲在數據庫中。
在一些實施例中,元數據可以包括實體和資源,實體可以包括測量項目并且資源可以包括實體的組合。在一些實施例中,時間值和數值可以與特定實體相關聯。在一些實施例中,對象存儲設備可以具有可伸縮的存儲空間。
在一些實施例中,裝置600可以進一步包括:劃分單元603,被配置為將度量信息的存儲塊劃分為具有固定時間跨度的多個分段。在一些實施例中,控制單元602可以進一步被配置為,將分段與時間跨度之間的對應關系存儲在數據庫中作為元數據的一部分。在一些實施例中,數據庫可以包括結構化查詢語言sql數據庫。
在一些實施例中,控制單元603可以進一步被配置為,使用分層技術將度量信息存儲在對象存儲設備中。在一些實施例中,對象存儲設備可以包括作為性能層的第一存儲設備和作為容量層的第二存儲設備。在一些實施例中,控制單元602可以進一步被配置為,將度量信息存儲在第一存儲設備中,并且同時復制到第二存儲設備。
在一些實施例中,控制單元602可以進一步被配置為,在將度量信息存儲在第一存儲設備中時,基于策略來刪除第一存儲設備中的原有對象數據。在一些實施例中,該策略可以基于對象數據的訪問頻率和存儲年齡。
在一些實施例中,控制單元602可以進一步被配置為,如果要訪問的對象數據僅存儲在所述第二存儲設備中,則將對象數據從第二存儲設備復制到第一存儲設備。在一些實施例中,第一存儲設備可以包括固態硬盤ssd,并且第二存儲設備可以包括硬盤驅動器hdd。
在一些實施例中,裝置600可以進一步包括:接口提供單元604,被配置為提供專用用戶接口用以管理度量信息和元數據。在一些實施 例中,管理可以包括以下各項中的至少一項:寫入、讀取、刪除、以及更新。在一些實施例中,專用用戶接口可以包括表述性狀態傳遞rest接口。
圖7示意性地示出了一個可以用來實施本公開內容的實施例的設備700的框圖。如圖7中所示出的,設備700包括中央處理單元(cpu)701,其可以根據存儲在只讀存儲設備(rom)702中的計算機程序指令或者從存儲單元708加載到隨機訪問存儲設備(ram)703中的計算機程序指令,來執行各種適當的動作和處理。在ram703中,還可存儲設備700操作所需的各種程序和數據。cpu701、rom702以及ram703通過總線704彼此相連。輸入/輸出(i/o)接口705也連接至總線704。
設備700中的多個部件連接至i/o接口705,包括:輸入單元706,例如鍵盤、鼠標等;輸出單元707,例如各種類型的顯示器、揚聲器等;存儲單元708,例如磁盤、光盤等;以及通信單元709,例如網卡、調制解調器、無線通信收發機等。通信單元709允許設備700通過諸如因特網的計算機網絡和/或各種電信網絡與其他設備交換信息/數據。
上文所描述的各個過程和處理,例如方法100,可由處理單元701來執行。例如,在一些實施例中,方法100可被實現為計算機軟件程序,其被有形地包含于機器可讀介質,例如存儲單元708。在一些實施例中,計算機程序的部分或者全部可以經由rom702和/或通信單元709而被載入和/或安裝到設備700上。當計算機程序被加載到ram703并由cpu701執行時,可以執行上文描述的方法100的一個或多個步驟。
在對本公開內容的實施例的描述中,術語“包括”及其類似用語應當理解為開放性包含,即“包括但不限于”。術語“基于”應當理解為“至少部分地基于”。術語“一個實施例”或“該實施例”應當理解為“至少一個實施例”。
應當注意,本公開內容的實施例可以通過硬件、軟件或者軟件和 硬件的結合來實現。硬件部分可以利用專用邏輯來實現;軟件部分可以存儲在存儲設備中,由適當的指令執行系統,例如微處理器或者專用設計硬件來執行。本領域的技術人員可以理解上述的設備和方法可以使用計算機可執行指令和/或包含在處理器控制代碼中來實現,例如在可編程的存儲設備或者諸如光學或電子信號載體的數據載體上提供了這樣的代碼。
此外,盡管在附圖中以特定順序描述了本公開內容的方法的操作,但是這并非要求或者暗示必須按照該特定順序來執行這些操作,或是必須執行全部所示的操作才能實現期望的結果。相反,流程圖中描繪的步驟可以改變執行順序。附加地或備選地,可以省略某些步驟,將多個步驟組合為一個步驟執行,和/或將一個步驟分解為多個步驟執行。還應當注意,根據本公開內容的兩個或更多裝置的特征和功能可以在一個裝置中具體化。反之,上文描述的一個裝置的特征和功能可以進一步劃分為由多個裝置來具體化。
雖然已經參考若干具體實施例描述了本公開內容,但是應當理解,本公開內容不限于所公開的具體實施例。本公開內容旨在涵蓋所附權利要求的精神和范圍內所包括的各種修改和等效布置。