數(shù)據(jù)存儲方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及通信技術(shù),尤其涉及一種數(shù)據(jù)存儲方法及系統(tǒng)。
【背景技術(shù)】
[0002] 時(shí)空軌跡數(shù)據(jù)具有數(shù)據(jù)量大、位置更新頻繁、信息蘊(yùn)含豐富等特點(diǎn),為基于位置的 服務(wù)化ocation Based Service,簡稱LBS)、交通管理、城市規(guī)劃、社會計(jì)算等提供了重要的 數(shù)據(jù)源。
[0003] 用戶設(shè)備的時(shí)空軌跡數(shù)據(jù)也成為大數(shù)據(jù)(Big Data)時(shí)代的典型代表,海量的時(shí) 空軌跡數(shù)據(jù)蘊(yùn)含著諸多用戶個(gè)性化信息,例如個(gè)體的時(shí)空軌跡可W用于描述其時(shí)空行為特 征,大量的個(gè)體的時(shí)空軌跡則可W反映群體的時(shí)空行為規(guī)律,特別是對挖掘用戶行為習(xí)慣 及個(gè)人用戶畫像、智能城市交通規(guī)劃、電信流量分配W及時(shí)空數(shù)據(jù)挖掘等實(shí)際應(yīng)用具有非 常重要的意義。
[0004] 當(dāng)前用戶設(shè)備的時(shí)空軌跡數(shù)據(jù)是基于用戶設(shè)備不同時(shí)間的位置信息集合,簡單 來講可W是基于用戶身份標(biāo)識(IDentity,簡稱ID )、地理位置(LocationID )和時(shí)間戳 (Timestamp)為主鍵的多元組集合,即{<0id,LocationID, Timestamp, A?!?A?!?,…}。其中, 前H個(gè)屬性為時(shí)空軌跡數(shù)據(jù)的核也標(biāo)示屬性,包括Oid標(biāo)示了對應(yīng)的對象ID, LocationID 標(biāo)示了對應(yīng)的時(shí)空軌跡點(diǎn)W及Timestamp標(biāo)示了對應(yīng)的時(shí)間點(diǎn),A。…,A。為數(shù)據(jù)附帶的其 他相關(guān)軌跡信息屬性。
[0005] 時(shí)空軌跡數(shù)據(jù)是一個(gè)結(jié)構(gòu)化良好的關(guān)系型數(shù)據(jù)。大量的用戶設(shè)備及較長的時(shí)間跨 度,導(dǎo)致在該類結(jié)構(gòu)化數(shù)據(jù)的存儲及實(shí)時(shí)分析查詢具有巨大的挑戰(zhàn)。例如在一個(gè)大中型城 市約有300~400萬的移動終端,一天的時(shí)空軌跡數(shù)據(jù)即可達(dá)到約為5TB的數(shù)據(jù)量,該為有 效的實(shí)時(shí)數(shù)據(jù)查詢分析帶來了巨大的困難。針對此類高速海量時(shí)空軌跡數(shù)據(jù)流,現(xiàn)有技術(shù) 中提供有一種數(shù)據(jù)存儲方案,如并行關(guān)系數(shù)據(jù)庫存儲系統(tǒng)。
[0006] 并行關(guān)系數(shù)據(jù)庫存儲系統(tǒng)將傳統(tǒng)分布式數(shù)據(jù)管理系統(tǒng)擴(kuò)展于此種結(jié)構(gòu)化的大數(shù) 據(jù)存儲管理。其缺陷是海量數(shù)據(jù)的管理效率不高,W及數(shù)據(jù)安全容錯(cuò)性不足。
[0007] 另外,現(xiàn)有技術(shù)中還公開一種基于區(qū)域劃分的時(shí)空軌跡數(shù)據(jù)存儲方法,通過地理 位置的網(wǎng)格區(qū)域劃分,將位于同一網(wǎng)格單元的地理位置點(diǎn)存儲在同一個(gè)網(wǎng)格區(qū)域內(nèi),W壓 縮時(shí)空軌跡的存儲空間。該類方法將區(qū)域的索引存儲在軌跡中,提供軌跡的快速檢索方式, 搜索相似軌跡時(shí),不用與數(shù)據(jù)庫中的所有軌跡匹配,而只需要計(jì)算該軌跡與其通過的區(qū)域 中的軌跡的相似度即可。
[0008] 然而,現(xiàn)有基于區(qū)域存儲方法的缺點(diǎn)主要是;基于網(wǎng)格劃分的結(jié)構(gòu)導(dǎo)致軌跡數(shù)據(jù) 的各個(gè)網(wǎng)格單元密度不均,且使得基于B+的樹狀存儲結(jié)構(gòu)不平衡而降低查詢效率,不能夠 實(shí)現(xiàn)實(shí)時(shí)分析查詢。
【發(fā)明內(nèi)容】
[0009] 本發(fā)明實(shí)施例提供一種數(shù)據(jù)存儲方法及系統(tǒng),用于存儲海量的時(shí)空軌跡數(shù)據(jù),并 實(shí)現(xiàn)實(shí)時(shí)分析查詢存儲的時(shí)空軌跡數(shù)據(jù)。
[0010] 第一方面,本發(fā)明實(shí)施例提供一種數(shù)據(jù)存儲方法,包括:
[0011] 讀取待存儲的第一條數(shù)據(jù)元組;
[0012] 采用結(jié)構(gòu)化數(shù)據(jù)編碼方式將所述第一條數(shù)據(jù)元組編碼為至少H種不同結(jié)構(gòu)的結(jié) 構(gòu)化數(shù)據(jù);
[0013] 將所述至少H種不同結(jié)構(gòu)的結(jié)構(gòu)化數(shù)據(jù)存儲在高速緩沖存儲器中,W使所述高速 緩沖存儲器將所述結(jié)構(gòu)化數(shù)據(jù)寫入異構(gòu)分布式文件系統(tǒng)皿FS的節(jié)點(diǎn)中。
[0014] 結(jié)合第一方面,在第一種可能的實(shí)現(xiàn)方式中,采用結(jié)構(gòu)化數(shù)據(jù)編碼方式將所述第 一條數(shù)據(jù)元組編碼為至少H種不同結(jié)構(gòu)的結(jié)構(gòu)化數(shù)據(jù)的步驟之前,所述方法還包括:
[0015] 若所述高速緩沖存儲器中已經(jīng)緩存過與所述第一條數(shù)據(jù)元組關(guān)聯(lián)的第二條數(shù)據(jù) 元組,則查找與所述第一條數(shù)據(jù)元組關(guān)聯(lián)的第二條數(shù)據(jù)元組的存儲區(qū)域,所述第二條數(shù)據(jù) 元組為已經(jīng)存儲在所述異構(gòu)HDFS的節(jié)點(diǎn)中的數(shù)據(jù)元組;
[0016] 所述將所述至少H種不同結(jié)構(gòu)的結(jié)構(gòu)化數(shù)據(jù)存儲在高速緩沖存儲器中,W使所述 高速緩沖存儲器將所述結(jié)構(gòu)化數(shù)據(jù)寫入異構(gòu)皿FS的節(jié)點(diǎn)中,包括:
[0017] 將所述H種不同結(jié)構(gòu)的結(jié)構(gòu)化數(shù)據(jù)存儲在高速緩沖存儲器中,W使所述高速緩沖 存儲器將所述結(jié)構(gòu)化數(shù)據(jù)寫入所述第二條數(shù)據(jù)元組所在的存儲區(qū)域中;
[0018] 若所述高速緩沖存儲器中未緩存過與所述第一條數(shù)據(jù)元組關(guān)聯(lián)的第二條數(shù)據(jù)元 組,則設(shè)置所述結(jié)構(gòu)化數(shù)據(jù)的存儲位置;
[0019] 所述將所述至少H種不同結(jié)構(gòu)的結(jié)構(gòu)化數(shù)據(jù)存儲在高速緩沖存儲器中,W使所述 高速緩沖存儲器將所述結(jié)構(gòu)化數(shù)據(jù)寫入異構(gòu)皿FS的節(jié)點(diǎn)中,包括:
[0020] 將所述H種不同結(jié)構(gòu)的結(jié)構(gòu)化數(shù)據(jù)存儲在高速緩沖存儲器中,W使所述高速緩沖 存儲器將所述結(jié)構(gòu)化數(shù)據(jù)寫入所述設(shè)置的所述結(jié)構(gòu)化數(shù)據(jù)的存儲位置中。
[0021] 結(jié)合第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式 中,所述第一條數(shù)據(jù)元組包括:
[0022] 用戶標(biāo)識0W、與所述Oid對應(yīng)的時(shí)空軌跡點(diǎn)標(biāo)識Location ID,與所述Location ID對應(yīng)的時(shí)間信息Timestamp ;
[0023] 所述第一條數(shù)據(jù)元組還包括下述的一項(xiàng)或多項(xiàng):
[0024] 與所述Oid對應(yīng)的用戶狀態(tài)、與所述Location ID對應(yīng)的時(shí)空區(qū)域、與所述Oid對 應(yīng)的用戶設(shè)備代碼。
[0025] 結(jié)合第一方面的第一種可能的實(shí)現(xiàn)方式或第二種可能的實(shí)現(xiàn)方式,在第H種可 能的實(shí)現(xiàn)方式中,所述第一條數(shù)據(jù)元組與所述第二條數(shù)據(jù)元組關(guān)聯(lián),包括下述的一種或多 種:
[0026] 所述第一條數(shù)據(jù)元組的Oid與所述第二條數(shù)據(jù)元組的Oid相同;
[0027] 所述第一條數(shù)據(jù)元組的Location ID與所述第二條數(shù)據(jù)元組的Location ID相 同;
[0028] 所述第一條數(shù)據(jù)元組的Timestamp與所述第二條數(shù)據(jù)元組的Timestamp相同。
[0029] 結(jié)合第一方面的第二種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,
[0030] 所述至少H種不同結(jié)構(gòu)的結(jié)構(gòu)化數(shù)據(jù),包括:
[0031] W所述第一條數(shù)據(jù)元組中的OitLocation ID,Timestamp為索引值的第一種結(jié)構(gòu) 化數(shù)據(jù);
[0032] W所述第一條數(shù)據(jù)元組中的Location ID為索引值的第二種結(jié)構(gòu)化數(shù)據(jù);
[0033] W所述第一條數(shù)據(jù)元組中的Timestamp為索引值的第H種結(jié)構(gòu)化數(shù)據(jù)。
[0034] 結(jié)合第一方面的第四種可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,
[0035] 采用結(jié)構(gòu)化數(shù)據(jù)編碼方式將所述第一條數(shù)據(jù)元組編碼為第一種結(jié)構(gòu)化數(shù)據(jù),包 括:
[0036] 獲取所述第一條數(shù)據(jù)元組的桶區(qū)標(biāo)識Bucket ID,并將所述第一條數(shù)據(jù)元組中的 數(shù)據(jù)分配到與所述Bucket ID對應(yīng)的桶區(qū)Bucket中;
[0037] 根據(jù)所述時(shí)空軌跡點(diǎn)將每一Bucket內(nèi)的數(shù)據(jù)分為至少一個(gè)堆區(qū)Stack ;
[0038] 根據(jù)所述Stack內(nèi)數(shù)據(jù)的一維屬性將所述Stack內(nèi)的數(shù)據(jù)分為至少一個(gè)塊區(qū) Block ;
[0039] 根據(jù)Oid將所述Block中的數(shù)據(jù)分為至少一個(gè)文件,
[0040] 根據(jù)時(shí)間序列將所述至少一個(gè)文件中的數(shù)據(jù)排列得到列存儲隊(duì)列;
[0041]所述 Bucket、Stack、Block 中的數(shù)據(jù)組成 W所述 Oid、Location ID 和 Timestamp 為索引值的第一種結(jié)構(gòu)化數(shù)據(jù)。
[0042] 結(jié)合第一方面的第五種可能的實(shí)現(xiàn)方式,在第六種可能的實(shí)現(xiàn)方式中,所述獲取 所述第一條數(shù)據(jù)元組的Bucket ID,包括:
[0043] 根據(jù)下述公式一獲取所述Bucket ID;
[0044]
[004引其中,k為散列因子,t。為所述第一條數(shù)據(jù)元組的起始時(shí)間,5為Bucket的時(shí)間 跨度,r為第一條數(shù)據(jù)元組。
[0046] 結(jié)合第一方面的第四種可能的實(shí)現(xiàn)方式,在第走種可能的實(shí)現(xiàn)方式中,采用結(jié)構(gòu) 化數(shù)據(jù)編碼方式將所述第一條數(shù)據(jù)元組編碼為第二種結(jié)構(gòu)化數(shù)據(jù),包括:
[0047] 獲取所述第一條數(shù)據(jù)元組的Bucket ID,并將所述第一條數(shù)據(jù)元組中的數(shù)據(jù)分配 到與所述Bucket ID對應(yīng)的Bucket中;
[0048] 根據(jù)所述Timestamp將每一 Bucket內(nèi)的數(shù)據(jù)分為至少一個(gè)Stack;
[0049] 根據(jù)所述Stack內(nèi)數(shù)據(jù)的一維屬性將所述Stack內(nèi)的數(shù)據(jù)分為至少一個(gè)Block;
[0050] 根據(jù)所述Location ID將所述Block中的數(shù)據(jù)分為至少一個(gè)文件,
[0051] 根據(jù)時(shí)間序列和所述Oid將所述至少一個(gè)文件中的數(shù)據(jù)排列得到列存儲隊(duì)列;
[0052] 所述Bucket、Stack、Block中的數(shù)據(jù)組成W所述Location ID為索引值的第二種 結(jié)構(gòu)化數(shù)據(jù)。
[0053] 結(jié)合第一方面的第走種可能的實(shí)現(xiàn)方式,在第八種可能的實(shí)現(xiàn)方式中,
[0054] 所述獲取所述第一條數(shù)據(jù)元組的Bucket ID,包括:
[00巧]根據(jù)下述公式二獲取所述Bucket ID ;
[0056]
[0057]其中,k為散列因子,t。為所述第一條數(shù)據(jù)元組的起始時(shí)間,5為Bucket的時(shí)間 跨度,r為第一條數(shù)據(jù)元組。
[005引結(jié)合第一方面的第四種可能的實(shí)現(xiàn)方式,在第九種可能的實(shí)現(xiàn)方式中,
[0059] 采用結(jié)構(gòu)化數(shù)據(jù)編碼方式將所述第一條數(shù)據(jù)元組編碼為第H種結(jié)構(gòu)化數(shù)據(jù),包 括:
[0060] 獲取所述第一條數(shù)據(jù)元組的Bucket ID,并將所述第一條數(shù)據(jù)元組中的數(shù)據(jù)分配 到與所述Bucket ID對應(yīng)的Bucket中;
[0061] 根據(jù)所述時(shí)空軌跡點(diǎn)將每一Bucket內(nèi)的數(shù)據(jù)分為至少一個(gè)Stack ;
[0062] 根據(jù)所述Stack內(nèi)數(shù)據(jù)的一維屬性將所述Stack內(nèi)的數(shù)據(jù)分為至少一個(gè)Block ;
[0063] 根據(jù)所述Timestamp將所述Block中的數(shù)據(jù)分為至少一個(gè)文件,
[0064] 根據(jù)所述Location ID和所述Oid將所述至少一個(gè)文件中的數(shù)據(jù)排列得到列存儲 隊(duì)列;
[0065] 所述Bucket、Stack、Block中的數(shù)據(jù)組成W所述Timestamp為索引值的第H種結(jié) 構(gòu)化數(shù)據(jù)。
[0066] 結(jié)合第一方面的第九種可能的實(shí)現(xiàn)方式,在第十種可能的實(shí)現(xiàn)方式中,
[0067] 所述獲取所述第一條數(shù)據(jù)元組的Bucket ID,包括:
[0068] 根據(jù)下述公式H獲取所述Bucket ID ;
[0069] Bucketid (r) =hash (r. T (r. timestamp))mo化+hash (r. LocationID)mo化公式H
[0070] 其中,T(r.timestamp)=r.timestamp所在的時(shí)間序列的id, k為散列因子,r為第 一條數(shù)據(jù)元組。
[0071] 結(jié)合第一方面的上述所有可能的實(shí)現(xiàn)方式,在第十一種可能的實(shí)現(xiàn)方式中,所述 采用結(jié)構(gòu)化數(shù)據(jù)編碼方式將所述第一條數(shù)據(jù)元組編碼為至少H種不同結(jié)構(gòu)的結(jié)構(gòu)化數(shù)據(jù), 還包括:
[0072] 獲取所述結(jié)構(gòu)化數(shù)據(jù)的索引信息,所述索引信息用于實(shí)現(xiàn)與所述結(jié)構(gòu)化數(shù)據(jù)對應(yīng) 的數(shù)據(jù)元組的查詢。
[0073] 第二方面,本發(fā)明實(shí)施例提供一種數(shù)據(jù)存儲系統(tǒng),包括:
[0074] 讀取單元,用于讀取待存儲的第一條數(shù)據(jù)元組;
[00巧]異構(gòu)數(shù)據(jù)元組加載單元,用于采用結(jié)構(gòu)化數(shù)據(jù)編碼方式將所述第一條數(shù)據(jù)元組編 碼為至少H種不同結(jié)構(gòu)的結(jié)構(gòu)化數(shù)據(jù);
[0076] 存儲單元,用于將所述至少H種不同結(jié)構(gòu)的結(jié)構(gòu)化數(shù)據(jù)存儲在高速緩沖存儲器 中,W使所述高速緩沖存儲器將所述結(jié)構(gòu)化數(shù)據(jù)寫入異構(gòu)分布式文件系統(tǒng)皿FS的節(jié)點(diǎn)中。
[0077] 結(jié)合第二方面,在第一種可能的實(shí)現(xiàn)方式中,所述系統(tǒng)還包括;查找單元;
[0078] 所述查找單元,用于在所述異構(gòu)數(shù)據(jù)元組加載單元獲取所述結(jié)構(gòu)化數(shù)據(jù)之前,查 找所述高速緩沖存儲器中是否已經(jīng)緩存過與所述第一條數(shù)據(jù)元組關(guān)聯(lián)的第二條數(shù)據(jù)元 組;
[0079] 若所述查找單元查找到所述高速緩沖存儲器中已經(jīng)緩存過與所述第一條數(shù)據(jù)元 組關(guān)聯(lián)的第二條數(shù)據(jù)元組,則查找所述第二條數(shù)據(jù)元組的存儲區(qū)域,所述第二條數(shù)據(jù)元組 為已經(jīng)存儲在所述異構(gòu)皿FS的節(jié)點(diǎn)中的數(shù)據(jù)元組;
[0080] 所述存儲單元,具體用于將所述H種不同結(jié)構(gòu)的結(jié)構(gòu)化數(shù)據(jù)存儲在高速緩沖存儲 器中,W使所述高速緩沖存儲器將所述結(jié)構(gòu)化數(shù)據(jù)寫入所述第二條數(shù)據(jù)元組所在的存儲區(qū) 域中;
[0081] 若所述查找單元查找到所述高速緩沖存儲器中未緩存過與所述第一條數(shù)據(jù)元組 關(guān)聯(lián)的第二條數(shù)據(jù)元組,則所述系統(tǒng)還包括:
[0082] 設(shè)置單元,用于在所述查找單元未查找到所述高速緩沖存儲器中緩存過與所述第 一條數(shù)據(jù)元組關(guān)聯(lián)的第二條數(shù)據(jù)元組,則設(shè)置所述結(jié)構(gòu)化數(shù)據(jù)的存儲位置;
[0083] 所述存儲單元,具體用于將所述H種不同結(jié)構(gòu)的結(jié)構(gòu)化數(shù)據(jù)存儲在高速緩沖存儲 器中,W使所述高速緩沖存儲器根據(jù)所述設(shè)置單元設(shè)置的所述存儲位置將所述結(jié)構(gòu)化數(shù)據(jù) 寫入所述設(shè)置的所述結(jié)構(gòu)化數(shù)據(jù)的存儲位置中。
[0084] 結(jié)合第二方面或第二方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式 中,所述第一條數(shù)據(jù)元組包括:
[0085] 用戶標(biāo)識0W、與所述Oid對應(yīng)的時(shí)空軌跡點(diǎn)標(biāo)識Location ID,與所述Location ID對應(yīng)的時(shí)間信息Timestamp ;
[0086] 所述第一條數(shù)據(jù)元組還包括下述的一項(xiàng)或多項(xiàng):
[0087] 與所述Oid對應(yīng)的用戶狀態(tài)、與所述Location ID對應(yīng)的時(shí)空區(qū)域、與所述Oid對 應(yīng)的用戶設(shè)備代碼。
[0088] 結(jié)合第二方面的第一種可能的實(shí)現(xiàn)方式或第二種可能的實(shí)現(xiàn)方式,在第H種可 能的實(shí)現(xiàn)方式中,所述第一條數(shù)據(jù)元組與所述第二條數(shù)據(jù)元組關(guān)聯(lián),包括下述的一種或多 種:
[0089] 所述第一條數(shù)據(jù)元組的Oid與所述第二條數(shù)據(jù)元組的Oid相同;
[0090] 所述第一條數(shù)據(jù)元組的Location ID與所述第二條數(shù)據(jù)元組的Location ID相 同;
[0091] 所述第一條數(shù)據(jù)元組的Timestamp與所述第二條數(shù)據(jù)元組的Timestamp相同。
[0092] 結(jié)合第二方面的第二種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,所述至少 H種不同結(jié)構(gòu)的結(jié)構(gòu)化數(shù)據(jù),包括:
[0093]W所述第一條數(shù)據(jù)元組中的OitLocation ID,Timestamp為索引值的第一種結(jié)構(gòu) 化數(shù)據(jù);
[0094]W所述第一條數(shù)據(jù)元組中的Location ID為索引值的第二種結(jié)構(gòu)化數(shù)據(jù);
[0095] W所述第一條數(shù)據(jù)元組中的Timestamp為索引值的第H種結(jié)構(gòu)化數(shù)據(jù)。
[0096] 結(jié)合第二方面的第四種可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)