一種基于網(wǎng)絡(luò)的數(shù)據(jù)存儲(chǔ)方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及網(wǎng)絡(luò)存儲(chǔ),特別涉及一種視頻數(shù)據(jù)存儲(chǔ)方法。
【背景技術(shù)】
[0002] 近年來,隨著視頻壓縮技術(shù)的不斷發(fā)展以及網(wǎng)絡(luò)帶寬的提升,視頻監(jiān)控系統(tǒng)以其 體積小、一體化、可操作性強(qiáng)、可定制、易維護(hù)、可接入的特點(diǎn),受到了安防監(jiān)控領(lǐng)域的極大 歡迎。除了可以對(duì)現(xiàn)場情況進(jìn)行實(shí)時(shí)監(jiān)控,還可以將無人監(jiān)視時(shí)段的前端現(xiàn)場或者突發(fā)報(bào) 警事件等進(jìn)行實(shí)時(shí)視頻,供事后進(jìn)行讀取和分析評(píng)價(jià)。目前已有多種存儲(chǔ)體系來支持視頻 監(jiān)控系統(tǒng)。其中DAS適合服務(wù)器在地理分布上很分散的狀況,將存儲(chǔ)設(shè)備通過SCSI接口或 光纖通道直接連接到服務(wù)器上。SAN將數(shù)據(jù)塊通過光纖通道傳輸至存儲(chǔ)網(wǎng)絡(luò),NAS是通過IP 通道將文件進(jìn)行多協(xié)議共享,適用于文件服務(wù)器的整合,CAS適用于長時(shí)間的完整性保存固 定數(shù)據(jù)。以上各種架構(gòu)均對(duì)視頻監(jiān)控提供了較好的系統(tǒng)支持,然而視頻存儲(chǔ)的穩(wěn)定性和清 晰度是監(jiān)控質(zhì)量的重要保證,目前視頻監(jiān)控系統(tǒng)的存儲(chǔ)通常具有以下不足:編碼格式較為 固定;傳統(tǒng)文件系統(tǒng)采用基于多級(jí)指針的數(shù)據(jù)存儲(chǔ)模式,在存儲(chǔ)幀數(shù)據(jù)時(shí)具有I/O操作量 大和易產(chǎn)生存儲(chǔ)碎片等問題,從而導(dǎo)致視頻存儲(chǔ)效率低和檢索性能差,成為系統(tǒng)性能及規(guī) 模提升的瓶頸。
【發(fā)明內(nèi)容】
[0003] 為解決上述現(xiàn)有技術(shù)所存在的問題,本發(fā)明提出了一種基于網(wǎng)絡(luò)的數(shù)據(jù)存儲(chǔ)方 法,包括:
[0004] 將視頻幀編碼和視頻幀存儲(chǔ)過程設(shè)計(jì)為兩個(gè)進(jìn)程,按兩個(gè)進(jìn)程預(yù)定義的路徑建立 兩個(gè)內(nèi)存共享區(qū)用于緩存;
[0005] 創(chuàng)建由指定大小的初始空白文件組成的文件池,并在創(chuàng)建每個(gè)文件時(shí),分配一組 連續(xù)物理空間上的固定大小的簇,在多個(gè)存儲(chǔ)設(shè)備之間基于被訪問頻率和存儲(chǔ)設(shè)備剩余空 間大小進(jìn)行存儲(chǔ)調(diào)度;
[0006] 利用文件索引方式,以預(yù)定時(shí)間單位記錄每個(gè)文件信息的文件索引表,以對(duì)視頻 文件進(jìn)行檢索。
[0007] 優(yōu)選地,所述將視頻幀編碼和視頻幀存儲(chǔ)過程設(shè)計(jì)為兩個(gè)進(jìn)程,按兩個(gè)進(jìn)程預(yù)定 義的路徑建立兩個(gè)內(nèi)存共享區(qū)用于緩存,進(jìn)一步包括:
[0008] 分別按上述兩個(gè)進(jìn)程預(yù)定義的路徑開辟2塊內(nèi)存共享區(qū)CACHE1和CACHE2,編碼 過程每次把1幀數(shù)據(jù)寫入CACHE1時(shí),將CACHE1施加排他鎖,存儲(chǔ)過程此時(shí)只能讀CACHE2 的1幀數(shù)據(jù),并同時(shí)將CACHE2施加共享鎖;每當(dāng)編碼過程寫完CACHE1時(shí)將其解鎖,轉(zhuǎn)而寫 CACHE2,此時(shí),若檢測到CACHE2已加上共享鎖,則空閑等待,直至CACHE2被存儲(chǔ)過程解除共 享鎖后再寫入數(shù)據(jù)并加上排他鎖;編碼過程交替寫入CACHE1和CACHE2,存儲(chǔ)過程交替讀出 CACHE2和CACHE1,從而使存儲(chǔ)過程讀取編碼過程輸出的所有視頻幀流數(shù)據(jù)。
[0009] 優(yōu)選地,創(chuàng)建由指定大小的初始空白文件組成的文件池,并在創(chuàng)建每個(gè)文件時(shí),分 配一組連續(xù)物理空間上的固定大小的簇,在多個(gè)存儲(chǔ)設(shè)備之間基于被訪問頻率和存儲(chǔ)設(shè)備 剩余空間大小進(jìn)行存儲(chǔ)調(diào)度,進(jìn)一步包括:
[0010] 監(jiān)控系統(tǒng)在上電后,創(chuàng)建初始空白文件池,按需從該文件池中獲取句柄完成數(shù)據(jù) 的寫入,定義第一結(jié)構(gòu)數(shù)組記錄初始空白文件池的信息,該結(jié)構(gòu)數(shù)組設(shè)置三個(gè)屬性字段:初 始空白文件完整性標(biāo)志,初始空白文件序列號(hào),初始空白文件所占空間;
[0011] 定義第二結(jié)構(gòu)數(shù)組記錄當(dāng)前存儲(chǔ)設(shè)備的信息,包括以下字段:存儲(chǔ)設(shè)備名稱,存儲(chǔ) 設(shè)備有效性標(biāo)志,文件存在標(biāo)志,存儲(chǔ)設(shè)備剩余空間和總空間,當(dāng)前訪問線程數(shù),按照以下 步驟進(jìn)行多通道調(diào)度:
[0012] 1)計(jì)算各存儲(chǔ)設(shè)備所??臻g百分比k,即設(shè)備剩余空間和總空間的比值;
[0013] 2)計(jì)算各存儲(chǔ)設(shè)備最大訪問線程數(shù)量Vn=kXThreadSm,其中,ThreadSm為當(dāng)前 需要存儲(chǔ)視頻的通道數(shù);
[0014] 3)按剩余空間的大小對(duì)上述第二結(jié)構(gòu)數(shù)組元素由大到小排序;
[0015] 4)根據(jù)步驟3)的排序結(jié)果,把當(dāng)前線程訪問數(shù)量未達(dá)到Vn/2的結(jié)構(gòu)數(shù)組元素 中的第一個(gè)存儲(chǔ)設(shè)備,即最大剩余空間的設(shè)備分配給當(dāng)前存儲(chǔ)線程,如果訪問數(shù)量已達(dá)到 Vn/2,選擇其余剩余空間最大而且訪問線程數(shù)沒有達(dá)到Vn/2的存儲(chǔ)設(shè)備,分配給此存儲(chǔ)設(shè) 備最近的存儲(chǔ)線程訪問請(qǐng)求;
[0016] 5)當(dāng)所有存儲(chǔ)設(shè)備的線程訪問數(shù)都已經(jīng)達(dá)到Vn/2時(shí),把剩余空間大并且訪問線 程數(shù)量未達(dá)到Vn的存儲(chǔ)設(shè)備分配給最新存儲(chǔ)線程訪問請(qǐng)求;
[0017] 6)如果第二結(jié)構(gòu)數(shù)組中排序的最后一個(gè)存儲(chǔ)設(shè)備已經(jīng)達(dá)到Vn,則返回?zé)o存儲(chǔ)設(shè) 備可用的信息,此時(shí)則開始應(yīng)用覆蓋策略,將時(shí)間最久的視頻文件刪除,獲得更多的存儲(chǔ)設(shè) 備空間。
[0018] 優(yōu)選地,所述利用文件索引方式,以預(yù)定時(shí)間單位記錄每個(gè)文件信息的文件索引 表,以對(duì)視頻文件進(jìn)行檢索,進(jìn)一步包括:
[0019] 為視頻建立文件夾,每個(gè)文件夾里包含一個(gè)用于記錄當(dāng)天每個(gè)文件信息的文件索 引表,所述文件信息包括視頻的類型、起止時(shí)間、索引ID、數(shù)據(jù)位置及長度,第三結(jié)構(gòu)數(shù)組定 義文件索引結(jié)構(gòu),以記錄所存儲(chǔ)的全部視頻幀文件信息,該數(shù)組記錄以下屬性字段:文件有 效性標(biāo)志,文件的起始和結(jié)束時(shí)間,數(shù)據(jù)段起始和結(jié)束位置,圖像格式,視頻通道號(hào),視頻類 型。
[0020] 本發(fā)明相比現(xiàn)有技術(shù),具有以下優(yōu)點(diǎn):
[0021] 本發(fā)明提出了一種基于網(wǎng)絡(luò)的存儲(chǔ)方法,在較高的數(shù)據(jù)量下實(shí)現(xiàn)了穩(wěn)定存儲(chǔ)以及 快速準(zhǔn)確的檢索,具有實(shí)用性和可靠性。
【附圖說明】
[0022] 圖1是根據(jù)本發(fā)明實(shí)施例的基于網(wǎng)絡(luò)的數(shù)據(jù)存儲(chǔ)方法的流程圖。
【具體實(shí)施方式】
[0023] 下文與圖示本發(fā)明原理的附圖一起提供對(duì)本發(fā)明一個(gè)或者多個(gè)實(shí)施例的詳細(xì)描 述。結(jié)合這樣的實(shí)施例描述本發(fā)明,但是本發(fā)明不限于任何實(shí)施例。本發(fā)明的范圍僅由權(quán) 利要求書限定,并且本發(fā)明涵蓋諸多替代、修改和等同物。在下文描述中闡述諸多具體細(xì)節(jié) 以便提供對(duì)本發(fā)明的透徹理解。出于示例的目的而提供這些細(xì)節(jié),并且無這些具體細(xì)節(jié)中 的一些或者所有細(xì)節(jié)也可以根據(jù)權(quán)利要求書實(shí)現(xiàn)本發(fā)明。
[0024] 本發(fā)明的一方面提供了一種基于網(wǎng)絡(luò)的數(shù)據(jù)存儲(chǔ)方法。圖1是根據(jù)本發(fā)明實(shí)施例 的基于網(wǎng)絡(luò)的數(shù)據(jù)存儲(chǔ)方法流程圖。
[0025] 本發(fā)明的視頻監(jiān)控系統(tǒng)由視頻幀編碼、視頻幀存儲(chǔ)、實(shí)時(shí)傳輸、人機(jī)接口模塊構(gòu) 成。視頻幀編碼過程獲得幀數(shù)據(jù)進(jìn)行編碼后需要將這些數(shù)據(jù)傳送給視頻幀存儲(chǔ)過程,本發(fā) 明提出了一種雙緩存內(nèi)存共享方法,將視頻幀編碼過程和視頻幀存儲(chǔ)過程被設(shè)計(jì)為兩個(gè) 進(jìn)程,CACHE1和CACHE2分別是按兩個(gè)進(jìn)程預(yù)定義的路徑而開辟的2塊內(nèi)存共享區(qū)。編碼 過程每次把1幀數(shù)據(jù)寫入CACHE1時(shí),將CACHE1施加排他鎖,存儲(chǔ)過程此時(shí)只能讀CACHE2 的1幀數(shù)據(jù),并同時(shí)將CACHE2施加共享鎖;每當(dāng)編碼過程寫完CACHE1時(shí)將其解鎖,轉(zhuǎn)而寫 CACHE2,此時(shí),若檢測到CACHE2已加上共享鎖,則空閑等待直至CACHE2被存儲(chǔ)過程解除共 享鎖后再寫入數(shù)據(jù)并加上排他鎖。于是,編碼過程交替寫入CACHE1和CACHE2,存儲(chǔ)過程交 替讀出CACHE2和CACHE1,如此循環(huán),從而保證了存儲(chǔ)過程能夠讀取到編碼過程輸出的所有 視頻幀流數(shù)據(jù),避免發(fā)生丟幀現(xiàn)象。
[0026] 監(jiān)控系統(tǒng)在上電后,創(chuàng)建一個(gè)由多個(gè)指定大小初始空白文件組成的初始空白文件 池。按需從該初始空白文件池中獲取句柄完成數(shù)據(jù)的寫入,在寫入數(shù)據(jù)前每個(gè)初始空白文 件的簇鏈表是已知的。所以寫存儲(chǔ)設(shè)備只會(huì)改寫簇鏈表中的內(nèi)容而不會(huì)影響到其本身的結(jié) 構(gòu)。當(dāng)發(fā)生像斷電這樣的異常時(shí),丟失的只是當(dāng)前正在寫入的數(shù)據(jù),并沒有造成文件本身的 損壞。
[0027] 設(shè)計(jì)預(yù)分配空數(shù)據(jù)文件數(shù)據(jù)結(jié)構(gòu)如下,定義一個(gè)結(jié)構(gòu)數(shù)組記錄初始空白文件池的 信息,設(shè)置三個(gè)屬性字段:初始空白文件完整性標(biāo)志,初始空白文件序列號(hào),一個(gè)初始空白 文件所占空間。
[0028] 創(chuàng)建每個(gè)文件時(shí),為其分配一組連續(xù)的物理空間上的固定大小的簇,這會(huì)具有防 止存儲(chǔ)碎片產(chǎn)生、縮短存儲(chǔ)設(shè)備尋道時(shí)間、提高存儲(chǔ)設(shè)備讀寫速度等優(yōu)點(diǎn)。防止存儲(chǔ)碎片的 產(chǎn)生是因?yàn)槠湓谖锢砜臻g的連續(xù)性,而相鄰時(shí)間具有相同性質(zhì)的幀數(shù)據(jù)的聚類存儲(chǔ)可以提 高存儲(chǔ)設(shè)備讀寫的效率并降低檢索數(shù)據(jù)的響應(yīng)時(shí)間。此外,應(yīng)該在存儲(chǔ)設(shè)備初始化時(shí)進(jìn)行 固定大小且連續(xù)的文件的創(chuàng)建以提高效率。
[0029] 本發(fā)明改進(jìn)了存儲(chǔ)調(diào)度方法,可以提高多通道存儲(chǔ)訪問的效率。結(jié)合考慮被訪問 頻率和存儲(chǔ)設(shè)備剩余空間大小進(jìn)行存儲(chǔ)調(diào)度,盡量保證存儲(chǔ)設(shè)備當(dāng)前剩余空間在維持在一 個(gè)預(yù)定的閾值,避免多通道視頻流集中存儲(chǔ)在某一個(gè)存儲(chǔ)設(shè)備而造成存儲(chǔ)設(shè)備I/O訪問的 瓶頸,盡可能地將多通道視頻流均勻存儲(chǔ)至每個(gè)存儲(chǔ)設(shè)備中。
[0030] 首先定義一個(gè)結(jié)構(gòu)數(shù)組記錄當(dāng)前存儲(chǔ)設(shè)備的信息:包括以下字段,存儲(chǔ)設(shè)備名稱, 存儲(chǔ)設(shè)備有效性標(biāo)志,文件存在標(biāo)志,存儲(chǔ)設(shè)備剩余空間和總空間,當(dāng)前訪問線程數(shù)。
[0031] 多通道視頻流的具體調(diào)度方法步驟為:
[0032] 1)計(jì)算各存儲(chǔ)設(shè)備所??臻g百分比k,即設(shè)備剩余空間和總空間的比值;
[0033] 2)計(jì)算各存儲(chǔ)設(shè)備最大訪問線程數(shù)量Vn =kXThreadSm,其中,ThreadSm為當(dāng)前 需要存儲(chǔ)視頻的通道數(shù);
[0034] 3)按剩余空間的大小對(duì)上述結(jié)構(gòu)數(shù)組元素由大到小排序;
[0035] 4)根據(jù)步驟3)的排序結(jié)果,把當(dāng)前線程訪問數(shù)量未達(dá)到Vn/2的結(jié)構(gòu)數(shù)組元素 中的第一個(gè)存儲(chǔ)設(shè)備,即最大剩余空間的設(shè)備分配給當(dāng)前存儲(chǔ)線程。如果訪問數(shù)量已達(dá)到Vn/2,選擇其余剩余空間最大而且訪問線程數(shù)沒有達(dá)到Vn/2的存儲(chǔ)設(shè)備,分配給此存儲(chǔ)設(shè) 備最近的存儲(chǔ)線程訪問請(qǐng)求。
[0036] 5)當(dāng)所有存儲(chǔ)設(shè)備的線程訪問數(shù)都已經(jīng)達(dá)到Vn/2時(shí),把剩余空間大并且訪問線 程數(shù)量未達(dá)到Vn的存儲(chǔ)設(shè)備分配給最新存儲(chǔ)線程訪問請(qǐng)求;
[0037] 6)如果結(jié)構(gòu)數(shù)組中排序的最后一個(gè)存儲(chǔ)設(shè)備已經(jīng)達(dá)到Vn,則返回?zé)o存儲(chǔ)設(shè)備可 用的信息。此時(shí)則開始應(yīng)用覆蓋策略,將時(shí)間最久的視頻文件刪除,從而節(jié)省出更多的存儲(chǔ) 設(shè)備空間。采用多通道存儲(chǔ)調(diào)度策略,使視頻流較均勻地存儲(chǔ)在各個(gè)存儲(chǔ)設(shè)備,提高了存儲(chǔ) 設(shè)備I/O訪問的效率,并且提高了存儲(chǔ)設(shè)備的利用率。
[0038] 在索引構(gòu)建方面,本發(fā)明的優(yōu)選的實(shí)施例采用文件索引方式,對(duì)應(yīng)于每一天,建立 一個(gè)以年月日為名稱的文件夾,每個(gè)文件夾里包含一個(gè)用于記錄當(dāng)天每個(gè)文件信息(如視 頻的類型、起止時(shí)間、索引ID、數(shù)據(jù)位置及長度等)的文件索引表,這