最新的毛片基地免费,国产国语一级毛片,免费国产成人高清在线电影,中天堂国产日韩欧美,中国国产aa一级毛片,国产va欧美va在线观看,成人不卡在线

云詳單查詢(xún)管理系統(tǒng)及方法與流程

文檔序號(hào):11155278閱讀:350來(lái)源:國(guó)知局
本發(fā)明屬于詳單管理查詢(xún)
技術(shù)領(lǐng)域
:,具體涉及一種云詳單查詢(xún)管理系統(tǒng)及方法。
背景技術(shù)
::隨著3G、4G技術(shù)的普及,運(yùn)營(yíng)商數(shù)據(jù)業(yè)務(wù)的飛速發(fā)展,移動(dòng)終端時(shí)刻通過(guò)通信網(wǎng)絡(luò)產(chǎn)生流量詳單,詳單規(guī)模較傳統(tǒng)語(yǔ)音短信詳單呈現(xiàn)爆炸式增長(zhǎng),如何精確而實(shí)時(shí)地記錄詳單信息,解決海量詳單數(shù)據(jù)環(huán)境下的數(shù)據(jù)插入、更新、查詢(xún)等操作的性能問(wèn)題,提高用戶(hù)滿(mǎn)意度,已成為電信企業(yè)越來(lái)越嚴(yán)峻的考驗(yàn)。目前,各運(yùn)營(yíng)商廣泛采用傳統(tǒng)的基于小型機(jī)+商業(yè)關(guān)系型數(shù)據(jù)庫(kù)集群+集中存儲(chǔ)的技術(shù)架構(gòu)來(lái)存儲(chǔ)和管理詳單信息,此方案在2G時(shí)代可很好地支持語(yǔ)音及短信業(yè)務(wù)的詳單信息管理查詢(xún)。然而,在數(shù)據(jù)業(yè)務(wù)爆發(fā)的時(shí)代,傳統(tǒng)的詳單存儲(chǔ)架構(gòu)具有系統(tǒng)性能低下,查詢(xún)效率低,硬件成本高等問(wèn)題,且系統(tǒng)不具有橫向擴(kuò)展能力,致使無(wú)法滿(mǎn)足業(yè)務(wù)的快速發(fā)展需求,降低了用戶(hù)的查詢(xún)體驗(yàn)。為解決上述問(wèn)題,部分省級(jí)運(yùn)營(yíng)商采用了互聯(lián)網(wǎng)hadoop大數(shù)據(jù)技術(shù),但hadoop本身為大數(shù)據(jù)分析計(jì)算而生,并不適合單純的詳單信息管理和查詢(xún),在數(shù)據(jù)導(dǎo)入等方式上,需定期執(zhí)行集群運(yùn)算,存在詳單信息更新不及時(shí)等問(wèn)題,且基于此類(lèi)解決方案的系統(tǒng)管理維護(hù)非常復(fù)雜,無(wú)異于將傳統(tǒng)解決方案的硬件成本轉(zhuǎn)移到了維護(hù)成本上,出現(xiàn)問(wèn)題難以解決,系統(tǒng)存在風(fēng)險(xiǎn),亦非針對(duì)詳單業(yè)務(wù)的最佳解決方案??梢?jiàn),如何有效解決當(dāng)前存在的用戶(hù)詳單延時(shí)、查詢(xún)速度慢等問(wèn)題,向用戶(hù)提供高效的詳單信息查詢(xún)服務(wù),具有重要意義。技術(shù)實(shí)現(xiàn)要素:針對(duì)現(xiàn)有技術(shù)存在的缺陷,本發(fā)明提供一種云詳單查詢(xún)管理系統(tǒng)及方法,可有效解決上述問(wèn)題。本發(fā)明采用的技術(shù)方案如下:本發(fā)明提供一種云詳單查詢(xún)管理系統(tǒng),包括:詳單文件管理模塊、接口服務(wù)模塊、數(shù)據(jù)路由模塊和數(shù)據(jù)存儲(chǔ)模塊;詳單文件管理模塊,用于接收外部系統(tǒng)上傳的新的詳單文件,讀取到所述新的詳單文件的詳單文件內(nèi)容;然后,向所述接口服務(wù)模塊發(fā)送數(shù)據(jù)寫(xiě)入指令;其中,所述數(shù)據(jù)寫(xiě)入指令中攜帶有所述詳單文件內(nèi)容;接口服務(wù)模塊,分別與所述詳單文件管理模塊以及外部詳單查詢(xún)系統(tǒng)對(duì)接,用于接收所述詳單文件管理模塊下發(fā)的數(shù)據(jù)寫(xiě)入指令,解析到需要被寫(xiě)入的詳單文件內(nèi)容;然后,根據(jù)所述詳單文件內(nèi)容生成詳單寫(xiě)入請(qǐng)求,將所述詳單寫(xiě)入請(qǐng)求下發(fā)到所述數(shù)據(jù)路由模塊;或者,用于接收所述外部詳單查詢(xún)系統(tǒng)發(fā)送的詳單查詢(xún)指令,從所述詳單查詢(xún)指令中解析到詳單查詢(xún)參數(shù),根據(jù)所述詳單查詢(xún)參數(shù)生成詳單查詢(xún)請(qǐng)求,并將所述詳單查詢(xún)請(qǐng)求下發(fā)到所述數(shù)據(jù)路由模塊;數(shù)據(jù)路由模塊,用于預(yù)制定數(shù)據(jù)路由策略,接收來(lái)自于所述接口服務(wù)模塊的詳單操作指令;其中,所述詳單操作指令包括詳單寫(xiě)入請(qǐng)求或詳單查詢(xún)請(qǐng)求;然后,根據(jù)所述數(shù)據(jù)路由策略,對(duì)所述詳單操作指令中的數(shù)據(jù)進(jìn)行數(shù)據(jù)特征提取,并根據(jù)數(shù)據(jù)特征查找到對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)模塊,最后將詳單操作指令傳輸給相對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)模塊;數(shù)據(jù)存儲(chǔ)模塊,用于接收來(lái)自于所述數(shù)據(jù)路由模塊的詳單操作指令,并執(zhí)行對(duì)應(yīng)的操作;即:當(dāng)接收到來(lái)自于所述數(shù)據(jù)路由模塊的詳單寫(xiě)入請(qǐng)求時(shí),寫(xiě)入并存儲(chǔ)詳單數(shù)據(jù);當(dāng)接收到來(lái)自于所述數(shù)據(jù)路由模塊的詳單查詢(xún)請(qǐng)求時(shí),根據(jù)所述詳單查詢(xún)參數(shù),查詢(xún)到對(duì)應(yīng)的詳單數(shù)據(jù),并將查詢(xún)到的詳單數(shù)據(jù)返回給所述外部詳單查詢(xún)系統(tǒng)。優(yōu)選的,所述外部系統(tǒng)為詳單計(jì)費(fèi)系統(tǒng)。優(yōu)選的,所述接口服務(wù)模塊還用于:在接收到所述詳單文件管理模塊下發(fā)的數(shù)據(jù)寫(xiě)入指令,或者,在接收到所述外部詳單查詢(xún)系統(tǒng)發(fā)送的詳單查詢(xún)指令時(shí),首先進(jìn)行安全性驗(yàn)證,只有安全驗(yàn)證通過(guò)后,再進(jìn)行后續(xù)數(shù)據(jù)解析操作。優(yōu)選的,所述安全性驗(yàn)證包括兩種:第一種,對(duì)來(lái)源地址和身份進(jìn)行合法性驗(yàn)證;第二種,針對(duì)特定來(lái)源設(shè)定接口調(diào)用的頻度限制,然后,驗(yàn)證特定來(lái)源接口調(diào)用的頻度是否超過(guò)設(shè)定值,如果超過(guò),則為頻繁異常的調(diào)用,進(jìn)行屏蔽處理;如果未超過(guò),則通過(guò)驗(yàn)證。優(yōu)選的,所述詳單文件管理模塊、所述接口服務(wù)模塊、所述數(shù)據(jù)路由模塊和所述數(shù)據(jù)存儲(chǔ)模塊均可作為獨(dú)立的服務(wù)運(yùn)行于不同的服務(wù)器節(jié)點(diǎn),也可支持部署在同一臺(tái)服務(wù)器上;所述詳單文件管理模塊、所述接口服務(wù)模塊、所述數(shù)據(jù)路由模塊和所述數(shù)據(jù)存儲(chǔ)模塊均可運(yùn)行于物理x86服務(wù)器環(huán)境,也可運(yùn)行于虛擬化/云服務(wù)器環(huán)境;所述詳單文件管理模塊、所述接口服務(wù)模塊、所述數(shù)據(jù)路由模塊和所述數(shù)據(jù)存儲(chǔ)模塊均支持多節(jié)點(diǎn)同時(shí)部署運(yùn)行,支持系統(tǒng)冗余備份;所述詳單文件管理模塊、所述接口服務(wù)模塊、所述數(shù)據(jù)路由模塊和所述數(shù)據(jù)存儲(chǔ)模塊在進(jìn)行多節(jié)點(diǎn)部署時(shí),在前端配置負(fù)載均衡設(shè)備,負(fù)載均衡設(shè)備根據(jù)各個(gè)節(jié)點(diǎn)的負(fù)載,分發(fā)詳單操作指令。優(yōu)選的,所述數(shù)據(jù)存儲(chǔ)模塊的靜態(tài)主體結(jié)構(gòu)包括內(nèi)存表、不變內(nèi)存表、log文件以及CCTable文件;其中,所述內(nèi)存表和所述不變內(nèi)存表位于內(nèi)存中;所述log文件以及所述CCTable文件位于磁盤(pán)上;所述數(shù)據(jù)存儲(chǔ)模塊采用以下方法寫(xiě)入數(shù)據(jù):(1)當(dāng)所述數(shù)據(jù)存儲(chǔ)模塊需要寫(xiě)入一條Key:Value記錄的時(shí)候,所述數(shù)據(jù)存儲(chǔ)模塊首先將所述Key:Value記錄寫(xiě)入到所述log文件;(2)所述內(nèi)存表中KV對(duì)是根據(jù)Key大小有序存儲(chǔ)的,因此,在將Key:Value記錄成功寫(xiě)入到所述log文件后,所述數(shù)據(jù)存儲(chǔ)模塊再將所述Key:Value記錄寫(xiě)入到所述內(nèi)存表中的對(duì)應(yīng)位置,以保證所述內(nèi)存表中存儲(chǔ)數(shù)據(jù)的有序性;(3)如此不斷循環(huán),實(shí)現(xiàn)所述內(nèi)存表和所述log文件的一致性;當(dāng)所述內(nèi)存表寫(xiě)入的數(shù)據(jù)占用內(nèi)存到達(dá)設(shè)定界限后,所述數(shù)據(jù)存儲(chǔ)模塊生成新的Log文件和新的內(nèi)存表;原先的內(nèi)存表轉(zhuǎn)為不變內(nèi)存表,所述不變內(nèi)存表指:只能進(jìn)行讀操作,不能進(jìn)行寫(xiě)入操作或者刪除操作;后續(xù)當(dāng)需要寫(xiě)入新的Key:Value記錄時(shí),將新的Key:Value記錄分別被寫(xiě)入所述新的Log文件和新的內(nèi)存表;(4)數(shù)據(jù)存儲(chǔ)模塊將所述不變內(nèi)存表中存儲(chǔ)的數(shù)據(jù)導(dǎo)出到所述磁盤(pán)并進(jìn)行壓縮操作后,形成一個(gè)新的CCTable文件;其中,所述CCTable文件為層級(jí)結(jié)構(gòu),第一層為L(zhǎng)evel0、第二層為L(zhǎng)evel1、依此類(lèi)推,其層級(jí)逐漸增高;所述CCTable文件所存儲(chǔ)的記錄是根據(jù)記錄的Key由小到大排列的;所述數(shù)據(jù)存儲(chǔ)模塊采用以下方法查詢(xún)數(shù)據(jù):(1)所述數(shù)據(jù)存儲(chǔ)模塊首先查看內(nèi)存中的內(nèi)存表,判斷所述內(nèi)存表中是否包含key及其對(duì)應(yīng)的value,如果包含,則返回value值即可;如果不包含,則執(zhí)行步驟(2);(2)所述數(shù)據(jù)存儲(chǔ)模塊查看內(nèi)存中的不變內(nèi)存表,判斷所述不變內(nèi)存表中是否包含key及其對(duì)應(yīng)的value,如果包含,則返回value值即可;如果不包含,則執(zhí)行步驟(3);(3)所述數(shù)據(jù)存儲(chǔ)模塊查看磁盤(pán)中的多個(gè)CCTable文件,對(duì)于每個(gè)CCTable文件,由于其為層級(jí)結(jié)構(gòu),因此,首先查找屬于level0的文件,如果查找到所需的key及其對(duì)應(yīng)的value,則返回value值即可;如果未查找到,則查找屬于level1的文件,如此循環(huán)往復(fù),直到在某層CCTable文件中查找到所需要的key及其對(duì)應(yīng)的value為止。優(yōu)選的,所述數(shù)據(jù)存儲(chǔ)模塊查詢(xún)數(shù)據(jù)時(shí),當(dāng)所述內(nèi)存表和所述不變內(nèi)存表中均不存在需要查詢(xún)的key及其對(duì)應(yīng)的value時(shí),采用以下方法查詢(xún):(a)所述數(shù)據(jù)存儲(chǔ)模塊預(yù)建立Table緩存和Block緩存;其中,所述Block緩存用于緩存上一次返回給用戶(hù)的key及其對(duì)應(yīng)的value;所述Table緩存用于緩存分別指向CCTable文件中不同block區(qū)域的文件指針以及Block緩存的位置信息;(b)當(dāng)所述數(shù)據(jù)存儲(chǔ)模塊接收到用戶(hù)發(fā)出的讀取請(qǐng)求時(shí),所述讀取請(qǐng)求中攜帶有目標(biāo)key;(c)所述數(shù)據(jù)存儲(chǔ)模塊首先查詢(xún)所述Block緩存,判斷所述Block緩存中是否存在所述目標(biāo)key,如果存在,則查找到與所述目標(biāo)key對(duì)應(yīng)的目標(biāo)value,并向所述用戶(hù)返回所述目標(biāo)value,結(jié)束流程;如果不存在,則執(zhí)行步驟d;(d)所述數(shù)據(jù)存儲(chǔ)模塊查詢(xún)所述Table緩存中的文件指針,獲得包含所述目標(biāo)key的文件指針,然后,根據(jù)所述文件指針的指向,查找到所述CCTable文件中對(duì)應(yīng)的一個(gè)block區(qū)域數(shù)據(jù);然后,所述數(shù)據(jù)存儲(chǔ)模塊根據(jù)所述Table緩存中的Block緩存的位置信息,定位到Block緩存,再將所述block區(qū)域數(shù)據(jù)傳輸?shù)剿鯞lock緩存;(e)所述數(shù)據(jù)存儲(chǔ)模塊查詢(xún)所述Block緩存,判斷所述Block緩存中是否存在所述目標(biāo)key,如果存在,則查找到與所述目標(biāo)key對(duì)應(yīng)的目標(biāo)value,并向所述用戶(hù)返回所述目標(biāo)value,結(jié)束流程;如果不存在,則執(zhí)行步驟f;(f)所述數(shù)據(jù)存儲(chǔ)模塊從磁盤(pán)的CCTable文件中查找與所述目標(biāo)key對(duì)應(yīng)的目標(biāo)value,然后,將所述目標(biāo)key及對(duì)應(yīng)的所述目標(biāo)value插入到Block緩存;(g)返回步驟c。本發(fā)明還提供一種云詳單查詢(xún)管理方法,包括數(shù)據(jù)存儲(chǔ)流程和數(shù)據(jù)查詢(xún)流程;所述數(shù)據(jù)存儲(chǔ)流程包括以下步驟:步驟1.1,用戶(hù)產(chǎn)生通信行為后,計(jì)費(fèi)系統(tǒng)產(chǎn)生詳單文件,并通過(guò)網(wǎng)絡(luò)調(diào)用的方式向詳單文件管理模塊發(fā)送數(shù)據(jù)寫(xiě)入的通知消息;步驟1.2,詳單文件管理模塊在接收到數(shù)據(jù)寫(xiě)入的通知消息時(shí),讀取計(jì)費(fèi)系統(tǒng)產(chǎn)生的詳單文件的詳單文件內(nèi)容;然后,向接口服務(wù)模塊發(fā)送數(shù)據(jù)寫(xiě)入指令;其中,所述數(shù)據(jù)寫(xiě)入指令中攜帶有所述詳單文件內(nèi)容;步驟1.3,接口服務(wù)模塊在接收到所述數(shù)據(jù)寫(xiě)入指令時(shí),首先進(jìn)行安全性驗(yàn)證,在驗(yàn)證通過(guò)后,解析需要被寫(xiě)入的詳單文件內(nèi)容,生成詳單數(shù)據(jù)關(guān)鍵參數(shù);然后,將詳單數(shù)據(jù)關(guān)鍵參數(shù)以及詳細(xì)的詳單文件內(nèi)容以詳單寫(xiě)入請(qǐng)求的方式發(fā)送給數(shù)據(jù)路由模塊;步驟1.4,數(shù)據(jù)路由模塊預(yù)制定數(shù)據(jù)路由策略,接收來(lái)自于所述接口服務(wù)模塊的詳單數(shù)據(jù)關(guān)鍵參數(shù)以及詳細(xì)的詳單文件內(nèi)容;然后,數(shù)據(jù)路由模塊基于數(shù)據(jù)路由策略對(duì)所述詳單數(shù)據(jù)關(guān)鍵參數(shù)進(jìn)行分析,匹配到最佳的數(shù)據(jù)存儲(chǔ)模塊,并將所述詳單文件內(nèi)容發(fā)送到所述數(shù)據(jù)存儲(chǔ)模塊;步驟1.5,所述數(shù)據(jù)存儲(chǔ)模塊保存詳細(xì)的所述詳單文件內(nèi)容;所述數(shù)據(jù)查詢(xún)流程包括以下步驟:步驟2.1,接口服務(wù)模塊接收用戶(hù)通過(guò)門(mén)戶(hù)系統(tǒng)發(fā)送的用戶(hù)詳單查詢(xún)指令;其中,所述用戶(hù)詳單查詢(xún)指令中攜帶有詳單查詢(xún)參數(shù);步驟2.2,接口服務(wù)模塊首先進(jìn)行安全性驗(yàn)證,在驗(yàn)證通過(guò)后,根據(jù)所述詳單查詢(xún)參數(shù)生成詳單查詢(xún)請(qǐng)求,并將所述詳單查詢(xún)請(qǐng)求下發(fā)到所述數(shù)據(jù)路由模塊;步驟2.3,數(shù)據(jù)路由模塊預(yù)制定數(shù)據(jù)路由策略,并對(duì)所述詳單查詢(xún)請(qǐng)求進(jìn)行解析,得到詳單查詢(xún)參數(shù)和詳單標(biāo)識(shí);然后,數(shù)據(jù)路由模塊基于數(shù)據(jù)路由策略對(duì)所述詳單查詢(xún)參數(shù)和詳單標(biāo)識(shí)進(jìn)行分析,匹配到存儲(chǔ)有對(duì)應(yīng)詳單的數(shù)據(jù)存儲(chǔ)模塊,并將所述詳單查詢(xún)請(qǐng)求下發(fā)到對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)模塊;步驟2.4,所述數(shù)據(jù)存儲(chǔ)模塊提取符合本次詳單查詢(xún)條件的詳單文件,并將提取到的詳單文件返回給用戶(hù)。優(yōu)選的,步驟1.5,所述數(shù)據(jù)存儲(chǔ)模塊保存詳細(xì)的所述詳單文件內(nèi)容,具體為:每個(gè)所述數(shù)據(jù)存儲(chǔ)模塊作為一個(gè)數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),從而構(gòu)成輕量級(jí)分布式基于kv的Nosql數(shù)據(jù)存儲(chǔ)體系;所述基于kv的Nosql數(shù)據(jù)存儲(chǔ)體系的存儲(chǔ)關(guān)鍵字為:用戶(hù)標(biāo)識(shí)、日期和詳單類(lèi)型;步驟1.4中,所述詳單數(shù)據(jù)關(guān)鍵參數(shù)為:用戶(hù)標(biāo)識(shí)、日期和詳單類(lèi)型;步驟2.3中,所述詳單標(biāo)識(shí)為:用戶(hù)標(biāo)識(shí)、日期和詳單類(lèi)型。優(yōu)選的,步驟1.3和步驟2.2中,所述安全性驗(yàn)證包括兩種:第一種,對(duì)來(lái)源地址和身份進(jìn)行合法性驗(yàn)證;第二種,針對(duì)特定來(lái)源設(shè)定接口調(diào)用的頻度限制,然后,驗(yàn)證特定來(lái)源接口調(diào)用的頻度是否超過(guò)設(shè)定值,如果超過(guò),則為頻繁異常的調(diào)用,進(jìn)行屏蔽處理;如果未超過(guò),則通過(guò)驗(yàn)證。本發(fā)明提供的云詳單查詢(xún)管理系統(tǒng)及方法具有以下優(yōu)點(diǎn):本發(fā)明提供的云詳單查詢(xún)管理系統(tǒng)及方法,采用專(zhuān)門(mén)針對(duì)詳單業(yè)務(wù)特點(diǎn)而設(shè)計(jì)的輕量級(jí)分布式Nosql數(shù)據(jù)存儲(chǔ)體系,系統(tǒng)采用x86服務(wù)架構(gòu),無(wú)需商業(yè)數(shù)據(jù)庫(kù)和集中存儲(chǔ)支持,能夠有效降低系統(tǒng)硬件成本,且能夠在每天數(shù)十億詳單信息的快速插入的業(yè)務(wù)環(huán)境下,提供高效的詳單信息查詢(xún)服務(wù),具有用戶(hù)詳單更新速度快以及查詢(xún)速度快的優(yōu)點(diǎn),全面提高用戶(hù)查詢(xún)體驗(yàn)。附圖說(shuō)明圖1為本發(fā)明提供的云詳單查詢(xún)管理系統(tǒng)的架構(gòu)原理圖;圖2為本發(fā)明提供的詳單數(shù)據(jù)存儲(chǔ)流程圖;圖3為本發(fā)明提供的詳單數(shù)據(jù)查詢(xún)流程圖;圖4為本發(fā)明提供的數(shù)據(jù)存儲(chǔ)模塊的結(jié)構(gòu)圖;圖5為本發(fā)明提供的日志文件的結(jié)構(gòu)示意圖;圖6為本發(fā)明提供的CCTable文件的文件結(jié)構(gòu)示意圖;圖7為本發(fā)明提供的CCTable文件的邏輯布局示意圖;圖8為本發(fā)明提供的寫(xiě)入操作示意圖;圖9為本發(fā)明提供的讀操作示意圖。具體實(shí)施方式為了使本發(fā)明所解決的技術(shù)問(wèn)題、技術(shù)方案及有益效果更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。本發(fā)明涉及電信服務(wù)的詳單管理技術(shù),特別是針對(duì)百億級(jí)海量詳單信息的云化架構(gòu)管理系統(tǒng)及方法。采用本發(fā)明提供的支持云化架構(gòu)的詳單信息管理、高并發(fā)查詢(xún)系統(tǒng)及方法,可解決現(xiàn)有詳單數(shù)據(jù)量爆炸式增長(zhǎng)環(huán)境下系統(tǒng)操作效率的問(wèn)題。為方便對(duì)本發(fā)明理解,首先對(duì)與本發(fā)明主題最相關(guān)的術(shù)語(yǔ)解釋?zhuān)涸攩危哼\(yùn)營(yíng)商根據(jù)用戶(hù)使用情況產(chǎn)生的包括語(yǔ)音、短信、數(shù)據(jù)流量等業(yè)務(wù)的費(fèi)用清單;云詳單:通過(guò)云化架構(gòu)設(shè)計(jì)實(shí)現(xiàn)的詳單系統(tǒng),實(shí)時(shí)性及擴(kuò)展性顯著高于傳統(tǒng)詳單系統(tǒng)實(shí)現(xiàn)方式,且性能更好,成本更低;詳單查詢(xún):用戶(hù)通過(guò)營(yíng)業(yè)廳、電話、短信、網(wǎng)廳、自助終端等方式對(duì)詳單進(jìn)行實(shí)時(shí)檢索;詳單系統(tǒng):管理和存儲(chǔ)詳單信息的系統(tǒng),對(duì)外提供詳單數(shù)據(jù)的插入、更新、刪除、查詢(xún)等能力。參考圖1,本發(fā)明提供的云詳單查詢(xún)管理系統(tǒng),包括:詳單文件管理模塊、接口服務(wù)模塊、數(shù)據(jù)路由模塊和數(shù)據(jù)存儲(chǔ)模塊。(一)詳單文件管理模塊詳單文件管理模塊,用于接收外部系統(tǒng),例如,計(jì)費(fèi)系統(tǒng)上傳的新的詳單文件,讀取到所述新的詳單文件的詳單文件內(nèi)容;然后,向所述接口服務(wù)模塊發(fā)送數(shù)據(jù)寫(xiě)入指令,滿(mǎn)足系統(tǒng)間的數(shù)據(jù)交互需要;其中,所述數(shù)據(jù)寫(xiě)入指令中攜帶有所述詳單文件內(nèi)容。(二)接口服務(wù)模塊接口服務(wù)模塊,對(duì)外提供操作接口,分別與所述詳單文件管理模塊以及外部詳單查詢(xún)系統(tǒng)對(duì)接,用于接收所述詳單文件管理模塊下發(fā)的數(shù)據(jù)寫(xiě)入指令,解析到需要被寫(xiě)入的詳單文件內(nèi)容;然后,根據(jù)所述詳單文件內(nèi)容生成詳單寫(xiě)入請(qǐng)求,將所述詳單寫(xiě)入請(qǐng)求下發(fā)到所述數(shù)據(jù)路由模塊;或者,用于接收所述外部詳單查詢(xún)系統(tǒng)發(fā)送的詳單查詢(xún)指令,從所述詳單查詢(xún)指令中解析到詳單查詢(xún)參數(shù),根據(jù)所述詳單查詢(xún)參數(shù)生成詳單查詢(xún)請(qǐng)求,并將所述詳單查詢(xún)請(qǐng)求下發(fā)到所述數(shù)據(jù)路由模塊。此外,接口服務(wù)模塊還支持身份驗(yàn)證、頻率控制等安全功能,即:在接收到所述詳單文件管理模塊下發(fā)的數(shù)據(jù)寫(xiě)入指令,或者,在接收到所述外部詳單查詢(xún)系統(tǒng)發(fā)送的詳單查詢(xún)指令時(shí),首先進(jìn)行安全性驗(yàn)證,只有安全驗(yàn)證通過(guò)后,再進(jìn)行后續(xù)數(shù)據(jù)解析操作。所述安全性驗(yàn)證包括兩種:第一種,對(duì)來(lái)源地址和身份進(jìn)行合法性驗(yàn)證;第二種,針對(duì)特定來(lái)源設(shè)定接口調(diào)用的頻度限制,然后,驗(yàn)證特定來(lái)源接口調(diào)用的頻度是否超過(guò)設(shè)定值,如果超過(guò),則為頻繁異常的調(diào)用,進(jìn)行屏蔽處理;如果未超過(guò),則通過(guò)驗(yàn)證。(三)數(shù)據(jù)路由模塊數(shù)據(jù)路由模塊,用于預(yù)制定數(shù)據(jù)路由策略,接收來(lái)自于所述接口服務(wù)模塊的詳單操作指令;其中,所述詳單操作指令包括詳單寫(xiě)入請(qǐng)求或詳單查詢(xún)請(qǐng)求;然后,根據(jù)所述數(shù)據(jù)路由策略,對(duì)所述詳單操作指令中的數(shù)據(jù)進(jìn)行數(shù)據(jù)特征提取,并根據(jù)數(shù)據(jù)特征查找到對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)模塊,最后將詳單操作指令傳輸給相對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)模塊。(四)數(shù)據(jù)存儲(chǔ)模塊作為海量詳單數(shù)據(jù)的支撐管理查詢(xún)平臺(tái),數(shù)據(jù)存儲(chǔ)模塊包括一套存儲(chǔ)核心系統(tǒng)以及在這套存儲(chǔ)系統(tǒng)上提供的操作接口。在整個(gè)系統(tǒng)正在運(yùn)行過(guò)程中(不斷插入刪除讀取數(shù)據(jù)),給數(shù)據(jù)存儲(chǔ)模塊照相,從照片可以看到之前系統(tǒng)的數(shù)據(jù)在內(nèi)存和磁盤(pán)中是如何分布的,處于什么狀態(tài)。數(shù)據(jù)存儲(chǔ)模塊,用于接收來(lái)自于所述數(shù)據(jù)路由模塊的詳單操作指令,并執(zhí)行對(duì)應(yīng)的操作;即:當(dāng)接收到來(lái)自于所述數(shù)據(jù)路由模塊的詳單寫(xiě)入請(qǐng)求時(shí),寫(xiě)入并存儲(chǔ)詳單數(shù)據(jù);當(dāng)接收到來(lái)自于所述數(shù)據(jù)路由模塊的詳單查詢(xún)請(qǐng)求時(shí),根據(jù)所述詳單查詢(xún)參數(shù),查詢(xún)到對(duì)應(yīng)的詳單數(shù)據(jù),并將查詢(xún)到的詳單數(shù)據(jù)返回給所述外部詳單查詢(xún)系統(tǒng)。數(shù)據(jù)存儲(chǔ)模塊用于存儲(chǔ)和管理具體的詳單數(shù)據(jù),支持保存多個(gè)字段信息以滿(mǎn)足用戶(hù)詳單查詢(xún)的需求。具體的,參考圖4,為數(shù)據(jù)存儲(chǔ)模塊的結(jié)構(gòu)圖。所述數(shù)據(jù)存儲(chǔ)模塊的靜態(tài)主體結(jié)構(gòu)包括內(nèi)存表、不變內(nèi)存表、log文件以及CCTable文件;其中,所述內(nèi)存表和所述不變內(nèi)存表位于內(nèi)存中;所述Current文件、所述Manifest文件、所述log文件以及所述CCTable文件位于磁盤(pán)上;數(shù)據(jù)存儲(chǔ)模塊的靜態(tài)結(jié)構(gòu)的包括4個(gè)主要部分:內(nèi)存表、不變內(nèi)存表、log文件以及CCTable文件。還可以進(jìn)一步包括Current文件和Manifest文件。其中,所述內(nèi)存表和所述不變內(nèi)存表位于內(nèi)存中;所述Current文件、所述Manifest文件、所述log文件以及所述CCTable文件位于磁盤(pán)上;數(shù)據(jù)存儲(chǔ)模塊除了以上六個(gè)主要部分,還具有其他一些輔助的文件,但是以上六個(gè)文件和數(shù)據(jù)結(jié)構(gòu)是數(shù)據(jù)存儲(chǔ)模塊的主體構(gòu)成元素。(4.1)日志文件其中,Log文件和內(nèi)存表是一致的,當(dāng)應(yīng)用寫(xiě)入一條Key:Value記錄的時(shí)候,數(shù)據(jù)存儲(chǔ)模塊會(huì)首先向log文件里寫(xiě)入,寫(xiě)入成功后,再將記錄插進(jìn)內(nèi)存表中,這樣基本就算完成了寫(xiě)入操作,因?yàn)橐淮螌?xiě)入操作只涉及一次磁盤(pán)順序?qū)懞鸵淮蝺?nèi)存寫(xiě)入,所以,數(shù)據(jù)存儲(chǔ)模塊寫(xiě)入速度非???。Log文件(日志文件)在系統(tǒng)中的作用主要是:用于系統(tǒng)崩潰恢復(fù)而不丟失數(shù)據(jù)。數(shù)據(jù)存儲(chǔ)模塊在寫(xiě)入內(nèi)存前,首先將操作記錄到Log文件中,然后再記入內(nèi)存中。因此,即使系統(tǒng)崩潰,內(nèi)存表中的數(shù)據(jù)沒(méi)有來(lái)得及轉(zhuǎn)存到磁盤(pán)的CCTable文件,數(shù)據(jù)存儲(chǔ)模塊也可以根據(jù)log文件恢復(fù)內(nèi)存的內(nèi)存表數(shù)據(jù)結(jié)構(gòu)內(nèi)容,不會(huì)造成系統(tǒng)丟失數(shù)據(jù)。如圖5所示,為日志文件的結(jié)構(gòu)示意圖。在具體實(shí)現(xiàn)上,對(duì)于一個(gè)log文件,數(shù)據(jù)存儲(chǔ)模塊會(huì)將其切割成以32K為單位的物理Block,每次讀取的單位以一個(gè)Block作為基本讀取單位,在圖5中,log文件由3個(gè)Block構(gòu)成,所以從物理布局來(lái)講,一個(gè)log文件就是由連續(xù)的32K大小Block構(gòu)成的。在應(yīng)用的視野里是看不到這些Block的,應(yīng)用看到的是一系列的Key:Value對(duì),在數(shù)據(jù)存儲(chǔ)模塊內(nèi)部,會(huì)將一個(gè)Key:Value對(duì)看做一條記錄的數(shù)據(jù),另外在這個(gè)數(shù)據(jù)前增加一個(gè)記錄頭,用來(lái)記載一些管理信息,以方便內(nèi)部處理。(4.2)CCTable文件數(shù)據(jù)存儲(chǔ)模塊中存在不同層級(jí)的很多CCTable文件,所有CCTable文件內(nèi)部布局都是一樣的。CCTable文件內(nèi)部是根據(jù)記錄的Key由小到大排列的。每個(gè)Block分為三個(gè)部分,如圖6所示,為CCTable文件的文件結(jié)構(gòu)示意圖。包括:數(shù)據(jù)存儲(chǔ)區(qū)、Type區(qū)和CRC區(qū);其中,Type區(qū)用于標(biāo)識(shí)數(shù)據(jù)存儲(chǔ)區(qū)是否采用了數(shù)據(jù)壓縮算法,CRC部分則是數(shù)據(jù)校驗(yàn)碼,用于判別數(shù)據(jù)是否在生成和傳輸中出錯(cuò)。如圖7所示,為CCTable文件的邏輯布局示意圖。從大的方面講,可以將CCTable文件劃分為數(shù)據(jù)存儲(chǔ)區(qū)和數(shù)據(jù)管理區(qū),其中,數(shù)據(jù)存儲(chǔ)區(qū)存放實(shí)際的Key:Value數(shù)據(jù),數(shù)據(jù)管理區(qū)則提供一些索引指針等管理數(shù)據(jù),目的是更快速便捷的查找相應(yīng)的記錄。兩個(gè)區(qū)域都是在上述的分塊基礎(chǔ)上的,就是說(shuō),文件的前面若干塊實(shí)際存儲(chǔ)KV數(shù)據(jù),后面數(shù)據(jù)管理區(qū)存儲(chǔ)管理數(shù)據(jù)。管理數(shù)據(jù)又分為四種不同類(lèi)型:MetaBlock、MetaBlock索引和數(shù)據(jù)索引塊以及一個(gè)文件尾部塊。(4.3)內(nèi)存表和不變內(nèi)存表數(shù)據(jù)存儲(chǔ)模塊,所有KV數(shù)據(jù)都是存儲(chǔ)在內(nèi)存表、不變內(nèi)存表和CCTable中的,不變內(nèi)存表從結(jié)構(gòu)上講和內(nèi)存表是完全一樣的,區(qū)別僅僅在于其是只讀的,不允許寫(xiě)入操作,而內(nèi)存表則是允許寫(xiě)入和讀取的。當(dāng)內(nèi)存表寫(xiě)入的數(shù)據(jù)占用內(nèi)存到達(dá)指定數(shù)量,則自動(dòng)轉(zhuǎn)換為不變內(nèi)存表,等待轉(zhuǎn)存到磁盤(pán)中,系統(tǒng)會(huì)自動(dòng)生成新的內(nèi)存表供寫(xiě)操作寫(xiě)入新數(shù)據(jù)。數(shù)據(jù)存儲(chǔ)模塊的內(nèi)存表提供了將KV數(shù)據(jù)寫(xiě)入、刪除以及讀取KV記錄的操作接口,但是事實(shí)上,內(nèi)存表并不存在真正的刪除操作,刪除某個(gè)Key的Value在內(nèi)存表內(nèi)是作為插入一條記錄實(shí)施的,但是會(huì)打上一個(gè)Key的刪除標(biāo)記。數(shù)據(jù)存儲(chǔ)模塊的內(nèi)存表中KV對(duì)是根據(jù)Key大小有序存儲(chǔ)的,在系統(tǒng)插入新的KV時(shí),數(shù)據(jù)存儲(chǔ)模塊要把這個(gè)KV插到合適的位置上以保持這種Key有序性。因此,當(dāng)內(nèi)存表插入的數(shù)據(jù)占用內(nèi)存到了一個(gè)界限后,需要將內(nèi)存的記錄導(dǎo)出到外存文件中,數(shù)據(jù)存儲(chǔ)模塊會(huì)生成新的Log文件和內(nèi)存表,原先的內(nèi)存表就成為不變內(nèi)存表,只能讀不能寫(xiě)入或者刪除。新到來(lái)的數(shù)據(jù)被記入新的Log文件和內(nèi)存表,數(shù)據(jù)存儲(chǔ)模塊后臺(tái)調(diào)度會(huì)將不變內(nèi)存表的數(shù)據(jù)導(dǎo)出到磁盤(pán),形成一個(gè)新的CCTable文件。CCTable文件就是由內(nèi)存中的數(shù)據(jù)不斷導(dǎo)出并進(jìn)行壓縮操作后形成的,而且CCTable的所有文件是一種層級(jí)結(jié)構(gòu),第一層為L(zhǎng)evel0,第二層為L(zhǎng)evel1,層級(jí)逐漸增高。(4.4)Current文件Current文件:用于記載當(dāng)前的manifest文件名。因?yàn)樵跀?shù)據(jù)存儲(chǔ)模塊的運(yùn)行過(guò)程中,隨著壓縮的進(jìn)行,CCTable文件會(huì)發(fā)生變化,會(huì)有新的文件產(chǎn)生,老文件被廢棄,Manifest也會(huì)跟著反映這種變化,此時(shí)新生成Manifest文件用于記載這種變化,而Current文件則用來(lái)指出哪個(gè)Manifest文件才是我們關(guān)心的那個(gè)Manifest文件。(五)寫(xiě)入和刪除操作設(shè)計(jì)插入一條KV記錄或者刪除一條KV記錄。數(shù)據(jù)存儲(chǔ)模塊的更新操作速度是非??斓模从谄鋬?nèi)部機(jī)制決定了這種更新操作的簡(jiǎn)單性。如圖8所示,為寫(xiě)入操作示意圖。所述數(shù)據(jù)存儲(chǔ)模塊采用以下方法寫(xiě)入數(shù)據(jù):(1)當(dāng)所述數(shù)據(jù)存儲(chǔ)模塊需要寫(xiě)入一條Key:Value記錄的時(shí)候,所述數(shù)據(jù)存儲(chǔ)模塊首先將所述Key:Value記錄寫(xiě)入到所述log文件;(2)所述內(nèi)存表中KV對(duì)是根據(jù)Key大小有序存儲(chǔ)的,因此,在將Key:Value記錄成功寫(xiě)入到所述log文件后,所述數(shù)據(jù)存儲(chǔ)模塊再將所述Key:Value記錄寫(xiě)入到所述內(nèi)存表中的對(duì)應(yīng)位置,以保證所述內(nèi)存表中存儲(chǔ)數(shù)據(jù)的有序性;(3)如此不斷循環(huán),實(shí)現(xiàn)所述內(nèi)存表和所述log文件的一致性;當(dāng)所述內(nèi)存表寫(xiě)入的數(shù)據(jù)占用內(nèi)存到達(dá)設(shè)定界限后,所述數(shù)據(jù)存儲(chǔ)模塊生成新的Log文件和新的內(nèi)存表;原先的內(nèi)存表轉(zhuǎn)為不變內(nèi)存表,所述不變內(nèi)存表指:只能進(jìn)行讀操作,不能進(jìn)行寫(xiě)入操作或者刪除操作;后續(xù)當(dāng)需要寫(xiě)入新的Key:Value記錄時(shí),將新的Key:Value記錄分別被寫(xiě)入所述新的Log文件和新的內(nèi)存表;(4)數(shù)據(jù)存儲(chǔ)模塊將所述不變內(nèi)存表中存儲(chǔ)的數(shù)據(jù)導(dǎo)出到所述磁盤(pán)并進(jìn)行壓縮操作后,形成一個(gè)新的CCTable文件;其中,所述CCTable文件為層級(jí)結(jié)構(gòu),第一層為L(zhǎng)evel0、第二層為L(zhǎng)evel1、依此類(lèi)推,其層級(jí)逐漸增高;所述CCTable文件所存儲(chǔ)的記錄是根據(jù)記錄的Key由小到大排列的。在具體實(shí)現(xiàn)上,對(duì)于一個(gè)寫(xiě)入操作,包含兩個(gè)具體步驟:首先是將這條KV記錄以順序?qū)懙姆绞阶芳拥街敖榻B過(guò)的log文件末尾,這是一個(gè)磁盤(pán)讀寫(xiě)操作,文件的順序追加寫(xiě)入效率是很高的,所以并不會(huì)導(dǎo)致寫(xiě)入速度的降低;第二個(gè)步驟是:保障寫(xiě)入log文件成功,將這條KV記錄插入內(nèi)存中的內(nèi)存表中,內(nèi)存表只是一層封裝,其內(nèi)部其實(shí)是一個(gè)Key有序的列表,先查找合適的插入位置,然后修改相應(yīng)的鏈接指針將新記錄插入。完成這一步,寫(xiě)入記錄就完成了,一個(gè)插入記錄操作涉及一次磁盤(pán)文件追加寫(xiě)和內(nèi)存插入操作,因此,數(shù)據(jù)存儲(chǔ)模塊寫(xiě)入速度非常高效。(六)讀取操作設(shè)計(jì)如圖9所示,為讀取操作示意圖。所述數(shù)據(jù)存儲(chǔ)模塊采用以下方法查詢(xún)數(shù)據(jù):(1)所述數(shù)據(jù)存儲(chǔ)模塊首先查看內(nèi)存中的內(nèi)存表,判斷所述內(nèi)存表中是否包含key及其對(duì)應(yīng)的value,如果包含,則返回value值即可;如果不包含,則執(zhí)行步驟(2);(2)所述數(shù)據(jù)存儲(chǔ)模塊查看內(nèi)存中的不變內(nèi)存表,判斷所述不變內(nèi)存表中是否包含key及其對(duì)應(yīng)的value,如果包含,則返回value值即可;如果不包含,則執(zhí)行步驟(3);(3)所述數(shù)據(jù)存儲(chǔ)模塊查看磁盤(pán)中的多個(gè)CCTable文件,對(duì)于每個(gè)CCTable文件,由于其為層級(jí)結(jié)構(gòu),因此,首先查找屬于level0的文件,如果查找到所需的key及其對(duì)應(yīng)的value,則返回value值即可;如果未查找到,則查找屬于level1的文件,如此循環(huán)往復(fù),直到在某層CCTable文件中查找到所需要的key及其對(duì)應(yīng)的value為止。其中,所述數(shù)據(jù)存儲(chǔ)模塊查詢(xún)數(shù)據(jù)時(shí),當(dāng)所述內(nèi)存表和所述不變內(nèi)存表中均不存在需要查詢(xún)的key及其對(duì)應(yīng)的value時(shí),采用以下方法查詢(xún):(a)所述數(shù)據(jù)存儲(chǔ)模塊預(yù)建立Table緩存和Block緩存;其中,所述Block緩存用于緩存上一次返回給用戶(hù)的key及其對(duì)應(yīng)的value;所述Table緩存用于緩存分別指向CCTable文件中不同block區(qū)域的文件指針以及Block緩存的位置信息;(b)當(dāng)所述數(shù)據(jù)存儲(chǔ)模塊接收到用戶(hù)發(fā)出的讀取請(qǐng)求時(shí),所述讀取請(qǐng)求中攜帶有目標(biāo)key;(c)所述數(shù)據(jù)存儲(chǔ)模塊首先查詢(xún)所述Block緩存,判斷所述Block緩存中是否存在所述目標(biāo)key,如果存在,則查找到與所述目標(biāo)key對(duì)應(yīng)的目標(biāo)value,并向所述用戶(hù)返回所述目標(biāo)value,結(jié)束流程;如果不存在,則執(zhí)行步驟d;(d)所述數(shù)據(jù)存儲(chǔ)模塊查詢(xún)所述Table緩存中的文件指針,獲得包含所述目標(biāo)key的文件指針,然后,根據(jù)所述文件指針的指向,查找到所述CCTable文件中對(duì)應(yīng)的一個(gè)block區(qū)域數(shù)據(jù);然后,所述數(shù)據(jù)存儲(chǔ)模塊根據(jù)所述Table緩存中的Block緩存的位置信息,定位到Block緩存,再將所述block區(qū)域數(shù)據(jù)傳輸?shù)剿鯞lock緩存;(e)所述數(shù)據(jù)存儲(chǔ)模塊查詢(xún)所述Block緩存,判斷所述Block緩存中是否存在所述目標(biāo)key,如果存在,則查找到與所述目標(biāo)key對(duì)應(yīng)的目標(biāo)value,并向所述用戶(hù)返回所述目標(biāo)value,結(jié)束流程;如果不存在,則執(zhí)行步驟f;(f)所述數(shù)據(jù)存儲(chǔ)模塊從磁盤(pán)的CCTable文件中查找與所述目標(biāo)key對(duì)應(yīng)的目標(biāo)value,然后,將所述目標(biāo)key及對(duì)應(yīng)的所述目標(biāo)value插入到Block緩存;(g)返回步驟c。上述設(shè)計(jì)的原理為:當(dāng)需要讀取數(shù)據(jù)時(shí),數(shù)據(jù)存儲(chǔ)模塊首先會(huì)去查看內(nèi)存中的內(nèi)存表,如果內(nèi)存表中包含key及其對(duì)應(yīng)的value,則返回value值即可;如果在內(nèi)存表沒(méi)有讀到key,則接下來(lái)到同樣處于內(nèi)存中的不變內(nèi)存表中去讀取,如果讀到就返回,若是沒(méi)有讀到,從磁盤(pán)中的大量CCTable文件中查找。由于CCTable數(shù)量較多,而且分成多個(gè)Level??偟淖x取原則是:首先從屬于level0的文件中查找,如果找到則返回對(duì)應(yīng)的value值,如果沒(méi)有找到,那么到level1中的文件中去找,如此循環(huán)往復(fù),直到在某層CCTable文件中找到這個(gè)key對(duì)應(yīng)的value為止。由于內(nèi)存表存儲(chǔ)的是最新鮮的KV對(duì);不變內(nèi)存表中存儲(chǔ)的KV數(shù)據(jù)對(duì)的新鮮程度次之;而所有CCTable文件中的KV數(shù)據(jù)新鮮程度一定不如內(nèi)存中的內(nèi)存表和不變內(nèi)存表的。對(duì)于CCTable文件來(lái)說(shuō),如果同時(shí)在levelL和LevelL+1找到同一個(gè)key,levelL的信息一定比levelL+1的要新。列出的查找路徑就是按照數(shù)據(jù)新鮮程度排列出來(lái)的,越新鮮的越先查找。CCTable文件很多,level0和其它level中查找某個(gè)key的過(guò)程是不一樣的。因?yàn)閘evel0下的不同文件可能key的范圍有重疊,數(shù)據(jù)存儲(chǔ)模塊的策略是先找出level0中哪些文件包含這個(gè)key,之后按照文件的新鮮程度排序,新的文件排在前面,之后依次查找,讀出key對(duì)應(yīng)的value。數(shù)據(jù)存儲(chǔ)模塊中引入了兩個(gè)不同的Cache:TableCache和BlockCache。在TableCache中,key值是CCTable的文件名稱(chēng),Value部分包含兩部分,一個(gè)是指向磁盤(pán)打開(kāi)的CCTable文件的文件指針,這是為了方便讀取內(nèi)容;另外一個(gè)是指向內(nèi)存中這個(gè)CCTable文件對(duì)應(yīng)的BlockCache結(jié)構(gòu)指針,table結(jié)構(gòu)在內(nèi)存中,保存了CCTable的index內(nèi)容以及用來(lái)指示blockcache用的cache_id。其中,Block緩存是可以根據(jù)用戶(hù)需要,選配組件,即在配置文件中指定是否打開(kāi)這個(gè)功能。數(shù)據(jù)存儲(chǔ)模塊一般會(huì)先在內(nèi)存中的BlockCache中查找是否包含這個(gè)文件的緩存記錄,如果包含,則從緩存中讀??;如果不包含,則打開(kāi)CCTable文件,同時(shí)將這個(gè)文件的索引部分加載到內(nèi)存中并放入BlockCache中。這樣BlockCache里面就有了這個(gè)CCTable的緩存項(xiàng),但是只有索引部分在內(nèi)存中,之后數(shù)據(jù)存儲(chǔ)模塊根據(jù)索引可以定位到哪個(gè)內(nèi)容Block會(huì)包含這條key,從文件中讀出這個(gè)Block的內(nèi)容,在根據(jù)記錄一一比較,如果找到則返回結(jié)果,如果沒(méi)有找到,那么說(shuō)明這個(gè)level的CCTable文件并不包含這個(gè)key,所以到下一級(jí)別的CCTable中去查找。在讀取操作中,數(shù)據(jù)存儲(chǔ)模塊確定了key在某個(gè)level下某個(gè)文件A的keyrange范圍內(nèi),那么需要判斷是不是文件A真的包含這個(gè)KV。此時(shí),數(shù)據(jù)存儲(chǔ)模塊會(huì)首先查找TableCache,看這個(gè)文件是否在緩存里,如果找到了,那么根據(jù)index部分就可以查找是哪個(gè)block包含這個(gè)key。如果沒(méi)有在緩存中找到文件,那么打開(kāi)CCTable文件,將其index部分讀入內(nèi)存,然后插入Cache里面,去index里面定位哪個(gè)block包含這個(gè)Key。如果確定了文件哪個(gè)block包含這個(gè)key,那么需要讀入block內(nèi)容,這是第二次讀取。BlockCache是為了加快這個(gè)過(guò)程的,其中的key是文件的cache_id加上這個(gè)block在文件中的起始位置block_offset。而value則是這個(gè)Block的內(nèi)容。數(shù)據(jù)存儲(chǔ)模塊發(fā)現(xiàn)這個(gè)block在blockcache中,那么可以避免讀取數(shù)據(jù),直接在cache里的block內(nèi)容里面查找key的value就行,如果沒(méi)找到,那么讀入block內(nèi)容并把它插入blockcache中。數(shù)據(jù)存儲(chǔ)模塊就是這樣通過(guò)兩個(gè)cache來(lái)加快讀取速度的。本發(fā)明中,參考圖1,為云詳單查詢(xún)管理系統(tǒng)的架構(gòu)圖,所述詳單文件管理模塊、所述接口服務(wù)模塊、所述數(shù)據(jù)路由模塊和所述數(shù)據(jù)存儲(chǔ)模塊均可作為獨(dú)立的服務(wù)運(yùn)行于不同的服務(wù)器節(jié)點(diǎn),也可支持部署在同一臺(tái)服務(wù)器上;所述詳單文件管理模塊、所述接口服務(wù)模塊、所述數(shù)據(jù)路由模塊和所述數(shù)據(jù)存儲(chǔ)模塊均可運(yùn)行于物理x86服務(wù)器環(huán)境,也可運(yùn)行于虛擬化/云服務(wù)器環(huán)境;所述詳單文件管理模塊、所述接口服務(wù)模塊、所述數(shù)據(jù)路由模塊和所述數(shù)據(jù)存儲(chǔ)模塊均支持多節(jié)點(diǎn)同時(shí)部署運(yùn)行,支持系統(tǒng)冗余備份;所述詳單文件管理模塊、所述接口服務(wù)模塊、所述數(shù)據(jù)路由模塊和所述數(shù)據(jù)存儲(chǔ)模塊在進(jìn)行多節(jié)點(diǎn)部署時(shí),在前端配置負(fù)載均衡設(shè)備,負(fù)載均衡設(shè)備可采用現(xiàn)有負(fù)載均衡硬件設(shè)備,或采用Linux負(fù)載集群方案,負(fù)載均衡設(shè)備根據(jù)各個(gè)節(jié)點(diǎn)的負(fù)載,分發(fā)詳單操作指令。本發(fā)明還提供一種云詳單查詢(xún)管理方法,以滿(mǎn)足數(shù)據(jù)分片存儲(chǔ)和高并發(fā)查詢(xún)的需求,包括數(shù)據(jù)存儲(chǔ)流程和數(shù)據(jù)查詢(xún)流程;所述數(shù)據(jù)存儲(chǔ)流程包括以下步驟:步驟1.1,用戶(hù)產(chǎn)生通信行為后,計(jì)費(fèi)系統(tǒng)產(chǎn)生詳單文件,并通過(guò)網(wǎng)絡(luò)調(diào)用的方式向詳單文件管理模塊發(fā)送數(shù)據(jù)寫(xiě)入的通知消息,通知詳單文件管理模塊進(jìn)行詳單文件的解析和數(shù)據(jù)錄入;步驟1.2,詳單文件管理模塊在接收到數(shù)據(jù)寫(xiě)入的通知消息時(shí),讀取計(jì)費(fèi)系統(tǒng)產(chǎn)生的詳單文件的詳單文件內(nèi)容;然后,調(diào)用接口服務(wù)模塊發(fā)送數(shù)據(jù)寫(xiě)入指令;其中,所述數(shù)據(jù)寫(xiě)入指令中攜帶有所述詳單文件內(nèi)容;步驟1.3,接口服務(wù)模塊在接收到所述數(shù)據(jù)寫(xiě)入指令時(shí),首先進(jìn)行安全性驗(yàn)證,在驗(yàn)證通過(guò)后,解析需要被寫(xiě)入的詳單文件內(nèi)容,生成詳單數(shù)據(jù)關(guān)鍵參數(shù);然后,將詳單數(shù)據(jù)關(guān)鍵參數(shù)以及詳細(xì)的詳單文件內(nèi)容以詳單寫(xiě)入請(qǐng)求的方式發(fā)送給數(shù)據(jù)路由模塊;步驟1.4,數(shù)據(jù)路由模塊預(yù)制定數(shù)據(jù)路由策略,接收來(lái)自于所述接口服務(wù)模塊的詳單數(shù)據(jù)關(guān)鍵參數(shù)以及詳細(xì)的詳單文件內(nèi)容;然后,數(shù)據(jù)路由模塊基于數(shù)據(jù)路由策略對(duì)所述詳單數(shù)據(jù)關(guān)鍵參數(shù)進(jìn)行分析,匹配到最佳的數(shù)據(jù)存儲(chǔ)模塊,并將所述詳單文件內(nèi)容發(fā)送到所述數(shù)據(jù)存儲(chǔ)模塊;步驟1.5,所述數(shù)據(jù)存儲(chǔ)模塊保存詳細(xì)的所述詳單文件內(nèi)容。具體為:數(shù)據(jù)存儲(chǔ)模塊將詳單信息持久化到本地nosql存儲(chǔ)中,并向上層反饋操作結(jié)果信息,整個(gè)詳單寫(xiě)入操作完成。所述數(shù)據(jù)查詢(xún)流程包括以下步驟:步驟2.1,接口服務(wù)模塊接收用戶(hù)通過(guò)門(mén)戶(hù)系統(tǒng)發(fā)送的用戶(hù)詳單查詢(xún)指令;其中,所述用戶(hù)詳單查詢(xún)指令中攜帶有詳單查詢(xún)參數(shù);門(mén)戶(hù)系統(tǒng)包括但不限于:電話、短信、人工座席、網(wǎng)廳、智能終端等系統(tǒng)。步驟2.2,接口服務(wù)模塊首先進(jìn)行安全性驗(yàn)證,在驗(yàn)證通過(guò)后,根據(jù)所述詳單查詢(xún)參數(shù)生成詳單查詢(xún)請(qǐng)求,并將所述詳單查詢(xún)請(qǐng)求下發(fā)到所述數(shù)據(jù)路由模塊;步驟2.3,數(shù)據(jù)路由模塊預(yù)制定數(shù)據(jù)路由策略,并對(duì)所述詳單查詢(xún)請(qǐng)求進(jìn)行解析,得到詳單查詢(xún)參數(shù)和詳單標(biāo)識(shí);然后,數(shù)據(jù)路由模塊基于數(shù)據(jù)路由策略對(duì)所述詳單查詢(xún)參數(shù)和詳單標(biāo)識(shí)進(jìn)行分析,匹配到存儲(chǔ)有對(duì)應(yīng)詳單的數(shù)據(jù)存儲(chǔ)模塊,并將所述詳單查詢(xún)請(qǐng)求下發(fā)到對(duì)應(yīng)的數(shù)據(jù)存儲(chǔ)模塊;步驟2.4,所述數(shù)據(jù)存儲(chǔ)模塊提取符合本次詳單查詢(xún)條件的詳單文件,并將提取到的詳單文件返回給用戶(hù),整個(gè)查詢(xún)完畢。其中,步驟1.5,所述數(shù)據(jù)存儲(chǔ)模塊保存詳細(xì)的所述詳單文件內(nèi)容,具體為:每個(gè)所述數(shù)據(jù)存儲(chǔ)模塊作為一個(gè)數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn),從而構(gòu)成輕量級(jí)分布式基于kv的Nosql數(shù)據(jù)存儲(chǔ)體系;所述基于kv的Nosql數(shù)據(jù)存儲(chǔ)體系的存儲(chǔ)關(guān)鍵字為:用戶(hù)標(biāo)識(shí)、日期和詳單類(lèi)型;步驟1.4中,所述詳單數(shù)據(jù)關(guān)鍵參數(shù)為:用戶(hù)標(biāo)識(shí)、日期和詳單類(lèi)型;步驟2.3中,所述詳單標(biāo)識(shí)為:用戶(hù)標(biāo)識(shí)、日期和詳單類(lèi)型。下面介紹本發(fā)明一個(gè)具體實(shí)施例:如圖1所示,本發(fā)明提供的云詳單查詢(xún)管理系統(tǒng),包括:詳單文件管理模塊、接口服務(wù)模塊、數(shù)據(jù)路由模塊和數(shù)據(jù)存儲(chǔ)模塊。其中,該系統(tǒng)所有模塊均可支持多個(gè)節(jié)點(diǎn)同時(shí)部署,每個(gè)模塊均采用無(wú)狀態(tài)化服務(wù)設(shè)計(jì),可更好地適應(yīng)前端負(fù)載分發(fā)來(lái)的請(qǐng)求。(1)接口服務(wù)模塊接口服務(wù)模塊對(duì)外提供REST接口,以JSON為數(shù)據(jù)交互格式,使用基于TOKEN的安全驗(yàn)證,并可針對(duì)特定來(lái)源設(shè)定接口調(diào)用的頻度限制,對(duì)頻繁異常的調(diào)用進(jìn)行屏蔽處理。(2)數(shù)據(jù)路由模塊數(shù)據(jù)路由模塊負(fù)責(zé)提取詳單數(shù)據(jù)特征,并根據(jù)詳單數(shù)據(jù)特征進(jìn)行數(shù)據(jù)存儲(chǔ)結(jié)點(diǎn)的分配。具體地,詳單數(shù)據(jù)特征主要通過(guò)用戶(hù)標(biāo)識(shí)+日期+詳單類(lèi)型這幾個(gè)關(guān)鍵信息來(lái)實(shí)現(xiàn);其中:用戶(hù)標(biāo)識(shí)主要采用用戶(hù)的MSISDN號(hào)碼,詳單類(lèi)型采用特殊字符指代具體的語(yǔ)音、短信、數(shù)據(jù)、增值服務(wù)等類(lèi)型。(3)數(shù)據(jù)存儲(chǔ)模塊數(shù)據(jù)存儲(chǔ)模塊使用基于kv的nosql存儲(chǔ)技術(shù),在本系統(tǒng)中,key的形式與數(shù)據(jù)路由模塊的詳單數(shù)據(jù)特征相匹配。如:數(shù)據(jù)存儲(chǔ)模塊的key為+8613900000001:SMS:201502XXXXXXXXXXX,通過(guò)使用這種標(biāo)識(shí)技術(shù),可快速地在多個(gè)數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)中定位用戶(hù)所需的詳單數(shù)據(jù),將數(shù)據(jù)分布于多個(gè)數(shù)據(jù)節(jié)點(diǎn)中,減輕單個(gè)節(jié)點(diǎn)的數(shù)據(jù)存儲(chǔ)量,因此數(shù)據(jù)寫(xiě)入或查詢(xún)效率非常高。(4)詳單文件管理模塊詳單文件管理模塊負(fù)責(zé)原始詳單信息的監(jiān)控、數(shù)據(jù)采集及數(shù)據(jù)存儲(chǔ)工作,支持通過(guò)FTP、TCP等多種方式進(jìn)行詳單文件的推送接收,滿(mǎn)足現(xiàn)有計(jì)費(fèi)系統(tǒng)的對(duì)接需求。參考圖2,詳單信息寫(xiě)入流程為:(1)用戶(hù)產(chǎn)生通信行為后,計(jì)費(fèi)系統(tǒng)及時(shí)生成詳單文件,并通知云詳單查詢(xún)管理系統(tǒng)的詳單文件管理模塊。具體的,每個(gè)詳單文件的大小默認(rèn)為1MB,且支持配置,當(dāng)有新的詳單文件生成時(shí),系統(tǒng)通過(guò)FTP的方式將詳單文件上傳至詳單文件管理模塊;為了提高運(yùn)轉(zhuǎn)效率,系統(tǒng)支持TCP通知的方式激活詳單文件更新操作。此外,詳單信息按照詳單類(lèi)型進(jìn)行分類(lèi)保存,并通過(guò)詳單文件名進(jìn)行區(qū)分。(2)詳單文件管理模塊在接收到計(jì)費(fèi)系統(tǒng)的通知后,讀取詳單文件內(nèi)容,并調(diào)用接口服務(wù)模塊REST接口,將數(shù)據(jù)提交至詳單查詢(xún)管理系統(tǒng)的接口服務(wù)模塊處理。(3)接口服務(wù)模塊接收到上述請(qǐng)求,并對(duì)來(lái)源地址和身份進(jìn)行合法性驗(yàn)證,然后解析詳單數(shù)據(jù)中每個(gè)字段數(shù)據(jù),并生成詳單數(shù)據(jù)key,格式為:MSISDN:TYPE:TIME,并將詳單數(shù)據(jù)key及對(duì)應(yīng)詳單數(shù)據(jù)傳遞給數(shù)據(jù)路由模塊。(4)數(shù)據(jù)路由模塊查詢(xún)接受到的詳單數(shù)據(jù)key,并根據(jù)路由策略將數(shù)據(jù)傳遞給后端具體的數(shù)據(jù)存儲(chǔ)模塊。(5)后端數(shù)據(jù)存儲(chǔ)模塊保存詳單數(shù)據(jù)。參考圖3,詳單查詢(xún)流程包括:(1)當(dāng)用戶(hù)需要查詢(xún)?cè)攩涡畔r(shí),用戶(hù)在門(mén)戶(hù)完成身份認(rèn)證并進(jìn)行詳單查詢(xún),查詢(xún)條件可包括:詳單類(lèi)型(語(yǔ)音、短信、增值服務(wù)、數(shù)據(jù)服務(wù)等)、查詢(xún)?nèi)掌趨^(qū)間等;(2)門(mén)戶(hù)將用戶(hù)請(qǐng)求轉(zhuǎn)至接口服務(wù)模塊;(3)接口服務(wù)模塊接收詳單查詢(xún)請(qǐng)求,并進(jìn)行安全性和頻度策略檢測(cè)后,根據(jù)用戶(hù)查詢(xún)條件生成查詢(xún)請(qǐng)求,并將查詢(xún)請(qǐng)求轉(zhuǎn)至數(shù)據(jù)路由模塊。具體地,數(shù)據(jù)查詢(xún)請(qǐng)求參數(shù)應(yīng)針對(duì)用戶(hù)輸入生成首尾兩個(gè)key,如用戶(hù)13900000001查詢(xún)2015年3月的短信詳單,則接口服務(wù)模塊生成的查詢(xún)參數(shù)為:param1=13900000001:SMS:20150301000000000,param2=13900000001:SMS:20150331999999999,并將param1和param2傳送至數(shù)據(jù)路由模塊;(4)數(shù)據(jù)路由模塊根據(jù)數(shù)據(jù)查詢(xún)請(qǐng)求參數(shù)確定數(shù)據(jù)路由策略,選擇保存有該數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)模塊節(jié)點(diǎn),并將請(qǐng)求發(fā)送至該節(jié)點(diǎn);(5)數(shù)據(jù)存儲(chǔ)模塊提取所查詢(xún)到的數(shù)據(jù)并返回,用戶(hù)看到詳單數(shù)據(jù)。本發(fā)明中,云詳單查詢(xún)管理系統(tǒng)采用x86架構(gòu),采用專(zhuān)門(mén)為詳單系統(tǒng)特性而設(shè)計(jì)的分布式keyvalue數(shù)據(jù)存儲(chǔ)系統(tǒng),可支持快速插入、實(shí)時(shí)更新和高并發(fā)查詢(xún)功能,而非大數(shù)據(jù)解決方案所擅長(zhǎng)的數(shù)據(jù)統(tǒng)計(jì)運(yùn)算。具體的,本發(fā)明采用MSISDN:TYPE:DATETIME的形式作為詳單數(shù)據(jù)標(biāo)識(shí);采用MSISDN:TYPE:DATETIME的形式制定數(shù)據(jù)路由,決定數(shù)據(jù)分片存儲(chǔ)的對(duì)應(yīng)節(jié)點(diǎn);采用MSISDN:TYPE:DATETIMESTART~MSISDN:TYPE:DATETIMESTOP進(jìn)行數(shù)據(jù)集的劃分,通過(guò)此方式支持任意時(shí)間段的詳單查詢(xún)。本發(fā)明提供的云詳單查詢(xún)管理系統(tǒng)及方法,具有以下優(yōu)點(diǎn):1、云詳單查詢(xún)管理系統(tǒng)采用x86架構(gòu),且無(wú)需集中存儲(chǔ)資源,相對(duì)傳統(tǒng)小型機(jī)+集中存儲(chǔ)+OracleRAC的解決方案,有效降低了成本,提高了查詢(xún)效率;2、使用分布式云化架構(gòu)設(shè)計(jì),可實(shí)現(xiàn)靈活通過(guò)添加服務(wù)器節(jié)點(diǎn),從而提升系統(tǒng)性能,滿(mǎn)足系統(tǒng)橫向擴(kuò)展的需求;3、使用專(zhuān)門(mén)針對(duì)詳單系統(tǒng)業(yè)務(wù)特性設(shè)計(jì)的Nosql存儲(chǔ)技術(shù),相對(duì)hadoop大數(shù)據(jù)解決方案,數(shù)據(jù)入庫(kù)和實(shí)時(shí)查詢(xún)性能更好、延遲更低、維護(hù)性更好,最重要的是,解決了數(shù)據(jù)不能更新的問(wèn)題;4、采用獨(dú)特的用戶(hù)標(biāo)識(shí)+日期+詳單類(lèi)型的數(shù)據(jù)標(biāo)識(shí)方法及數(shù)據(jù)路由策略,完美解決海量數(shù)據(jù)分片存儲(chǔ)和查詢(xún)的問(wèn)題;5、能夠支持十億級(jí)別的數(shù)據(jù)量處理,在這個(gè)數(shù)量級(jí)別下可以保持非常高的性能;6、模塊間操作接口簡(jiǎn)單,主要基礎(chǔ)操作包括寫(xiě)記錄,讀記錄和刪除記錄,支持多個(gè)操作組合的原子操作。以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本
技術(shù)領(lǐng)域
:的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視本發(fā)明的保護(hù)范圍。當(dāng)前第1頁(yè)1 2 3 當(dāng)前第1頁(yè)1 2 3 
當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1