两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種字符串的搜索系統(tǒng)及方法與流程

文檔序號:11406882閱讀:325來源:國知局
一種字符串的搜索系統(tǒng)及方法與流程

本發(fā)明涉及數(shù)據(jù)搜索技術領域,尤其涉及一種字符串的搜索系統(tǒng)及方法。



背景技術:

在企業(yè)大數(shù)據(jù)中,85%的數(shù)據(jù)是非結構化的文本日志數(shù)據(jù)。在這類數(shù)據(jù)中快速查找、搜索信息對企業(yè)決策至關重要,例如在社交網(wǎng)上分析消費者的走向和趨勢可直接指導如何發(fā)放產(chǎn)品廣告,金融分析可能會在茫茫的大數(shù)據(jù)中尋找“我買了房子”,公安部門在反恐過程中可能會尋找并分析有關穆斯林極端分子的某些術語等等。在沒有預先設計好的以關鍵字為索引的結構數(shù)據(jù)的情況下,隨機字符串的搜索還是以掃描整個文件的方式來找,主要的掃描搜索工具有grep和awk,但這些軟件工具的數(shù)度很慢,用最快的服務器運行,最快也只能達到100-300mbps,遠遠落后于如今最基本的網(wǎng)絡數(shù)度和存儲數(shù)度。最近,密齒根大學的科研人員提出了附在cpu旁的硬件加速器來完成在文件里的字符搜索,大大地提高了掃描的數(shù)度。

但是,如果利用目前的掃描工具查找字符串,則需要把數(shù)據(jù)一一從存儲系統(tǒng)調(diào)到內(nèi)存,然后服務器的cpu用類似grep的軟件工具掃描、查找,要花幾個小時的時間,并且占用了大量的服務器資源;而硬件加速器雖然提高了純軟件的掃描數(shù)度,但是還是要首先將大量的數(shù)據(jù)從存儲系統(tǒng)讀進內(nèi)存然后進行掃描搜索,其存儲瓶頸以及存儲與cpu的瓶頸問題依然沒有解決。

因此,需要一種速度快、能夠避免存儲瓶頸的字符串的搜索系統(tǒng)。



技術實現(xiàn)要素:

本發(fā)明所要解決的技術問題在于提供了一種字符串的搜索系統(tǒng)及方法,該搜索系統(tǒng)大大地減輕了服務器cpu的負載、提高了搜索查詢速度。

為解決上述技術問題,本發(fā)明采用以下技術方案:

一方面,提供了一種字符串的搜索系統(tǒng),該搜索系統(tǒng)包括:re搜索引擎,及位于固態(tài)硬盤上的cpu核、flash控制器和flash陣列;所述re搜索引擎包括re編譯器和re處理器,所述re處理器設于固態(tài)硬盤上;

所述re編譯器用于獲取用戶輸入的正則表達式和待匹配文件信息,將所述正則表達式編譯成指令序列,把所述指令序列發(fā)送給re處理器,把所述待匹配文件信息發(fā)送給cpu核;

所述re處理器用于接收所述指令序列,及接收flash控制器發(fā)送的根據(jù)cpu核的數(shù)據(jù)獲取請求從flash陣列中獲取的待匹配數(shù)據(jù),從所述待匹配數(shù)據(jù)中搜索符合所述指令序列的數(shù)據(jù),并將搜索結果返回給re編譯器;所述數(shù)據(jù)獲取請求由cpu核根據(jù)所述待匹配文件信息向flash控制器發(fā)送。

其中,所述re編譯器包括編譯預處理模塊、詞法分析模塊、語法分析模塊和隨機數(shù)產(chǎn)生模塊,編譯預處理模塊用于對用戶輸入的正則表達式進行輸入合法性檢查和優(yōu)化處理;詞法分析模塊和語法分析模塊用于將經(jīng)過優(yōu)化的正則表達式翻譯成指令序列;re編譯器還包括隨機數(shù)產(chǎn)生模塊,用于產(chǎn)生在預置數(shù)值范圍的預置個數(shù)的隨機數(shù),作為re處理器中的初始隨機種子。

其中,所述re處理器包括數(shù)據(jù)過濾模塊、多路調(diào)度模塊、運算模塊和多級歸并排序模塊:

所述數(shù)據(jù)過濾模塊用于根據(jù)所述指令序列中的前綴匹配規(guī)則,結合正則表達式的字邊界規(guī)則或一位負向零寬斷言對所述待匹配數(shù)據(jù)進行過濾;

所述多路調(diào)度模塊用于利用所述初始隨機種子采用偽隨機洗牌算法得到運算模塊中的運算單元的調(diào)度結果;

所述運算模塊包括若干個的運算單元,用于根據(jù)調(diào)度結果按照指令序列中的指令編碼和操作數(shù)完成過濾后的待匹配數(shù)據(jù)的搜索運算;

所述多級歸并排序模塊對搜索運算產(chǎn)生的結果按照偏移地址從小到大的順序排列得到搜索結果,并把所述搜索結果返回給re編譯器。

其中,所述re編譯器位于主機上或所述固態(tài)硬盤的cpu核上,主機與固態(tài)硬盤通過pcie接口進行數(shù)據(jù)傳輸。

其中,所述re編譯器在主機上由c語言實現(xiàn)。

其中,所述re處理器基于fpga由硬件描述語言verilog或vhdl實現(xiàn)。

其中,所述運算模塊包括16個運算單元。

其中,所述多級歸并排序模塊由級聯(lián)的多路歸并排序算法實現(xiàn)。

其中,所述編譯與處理模塊還用于將正則表達式中的重復操作進行展開,語法錯誤檢查,對于純字符的匹配快速生成指令序列。

另一方面,提供了一種字符串的搜索方法,該搜索方法包括:

re編譯器獲取用戶輸入的正則表達式和待匹配文件信息,將用戶輸入的正則表達式編譯成指令序列,把所述指令序列發(fā)送給re處理器,把所述待匹配文件信息發(fā)送給cpu核;

cpu核根據(jù)所述待匹配文件信息向flash控制器發(fā)送數(shù)據(jù)獲取請求;

flash控制器根據(jù)所述數(shù)據(jù)獲取請求從flash陣列中獲取待匹配數(shù)據(jù),把所述待匹配數(shù)據(jù)發(fā)送給re處理器;

re處理器接收所述指令序列和所述待匹配數(shù)據(jù),從所述待匹配數(shù)據(jù)中搜索符合所述指令序列的數(shù)據(jù),并將搜索結果返回給re編譯器。

與現(xiàn)有技術相比,本發(fā)明的有益效果為:本發(fā)明搜索和查詢是在離數(shù)據(jù)最近的存儲設備或存儲系統(tǒng)進行,無需將大量的數(shù)據(jù)調(diào)到服務器cpu內(nèi)存,大大地減輕了服務器cpu的負載、提高了搜索查詢速度,接近總線傳輸速度,與現(xiàn)有技術相比,查找速度可提高數(shù)十倍、甚至上百倍,從根本上解決了在大數(shù)據(jù)查找分析的存儲瓶頸和存儲系統(tǒng)與cpu接口的瓶頸問題。

附圖說明

為了更清楚地說明本發(fā)明實施例中的技術方案,下面將對本發(fā)明實施例描述中所需要使用的附圖作簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)本發(fā)明實施例的內(nèi)容和這些附圖獲得其他的附圖。

圖1是本發(fā)明具體實施方式中提供的一種字符串的搜索系統(tǒng)的實施例的結構框圖。

圖2是本發(fā)明具體實施方式中提供的re編譯器的實施例的結構框圖。

圖3是本發(fā)明具體實施方式中提供的re處理器的實施例的結構框圖。

圖4是本發(fā)明具體實施方式中提供的一種字符串的搜索方法的實施例的方法流程圖。

具體實施方式

為使本發(fā)明解決的技術問題、采用的技術方案和達到的技術效果更加清楚,下面將結合附圖對本發(fā)明實施例的技術方案作進一步的詳細描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領域技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。

下面結合附圖1~3對本發(fā)明實施例作進一步的詳細描述。請參考圖1,其是本發(fā)明具體實施方式中提供的一種字符串的搜索系統(tǒng)的實施例的方法流程圖,如圖1所示,在一些實施例中,該搜索系統(tǒng)包括:re(regularexpression,正則表達式)搜索引擎,及位于固態(tài)硬盤2上的cpu核21、flash控制器23和flash陣列24;re搜索引擎包括re編譯器11和re處理器22,所述re處理器22設于固態(tài)硬盤2上;re編譯器11用于用于獲取用戶輸入的正則表達式和待匹配文件信息,將所述正則表達式編譯成指令序列,把所述指令序列發(fā)送給re處理器22,把所述待匹配文件信息發(fā)送給cpu核21;re處理器22用于接收所述指令序列,及接收flash控制器23發(fā)送的根據(jù)cpu核21的數(shù)據(jù)獲取請求從flash陣列24中獲取的待匹配數(shù)據(jù),從所述待匹配數(shù)據(jù)中搜索符合所述指令序列的數(shù)據(jù),并將搜索結果返回給re編譯器11;所述數(shù)據(jù)獲取請求由cpu核21根據(jù)所述待匹配文件信息向flash控制器23發(fā)送。用戶通過主機輸入正則表達式和待匹配文件信息,re編譯器11獲取用戶輸入的正則表達式和待匹配文件信息,re處理器22完成搜索之后將搜索結果返回給re編譯器11,re編譯器11對搜索結果進行處理,并通過主機呈現(xiàn)給用戶,用戶便可操作主機從re編譯器中獲取搜索結果對應的數(shù)據(jù)。

本發(fā)明實施例提供的搜索系統(tǒng)搜索和查詢由設于離數(shù)據(jù)最近的固態(tài)硬盤的re處理器進行,flash控制器將待匹配數(shù)據(jù)發(fā)送給re處理器,re處理器從待匹配數(shù)據(jù)中搜索符合所述指令序列的數(shù)據(jù),在離數(shù)據(jù)最近的存儲設備或存儲系統(tǒng)進行搜索和查詢,無需將大量的數(shù)據(jù)調(diào)到服務器cpu內(nèi)存,大大地減輕了服務器cpu的負載、提高了搜索查詢速度,接近總線傳輸速度,與現(xiàn)有技術相比,查找速度可提高數(shù)十倍、甚至上百倍,從根本上解決了在大數(shù)據(jù)查找分析的存儲瓶頸和存儲系統(tǒng)與cpu接口的瓶頸問題。

圖2是本發(fā)明具體實施方式中提供的re編譯器的實施例的結構框圖,如圖2所示,在一些實施例中,re編譯器11包括編譯預處理模塊112、詞法分析模塊113、語法分析模塊114和隨機數(shù)產(chǎn)生模塊111,編譯預處理模塊112用于對用戶輸入的正則表達式進行輸入合法性檢查和優(yōu)化處理;詞法分析模塊113和語法分析模塊114用于將經(jīng)過優(yōu)化的正則表達式翻譯成指令序列;隨機數(shù)產(chǎn)生模塊111用于產(chǎn)生在預置數(shù)值范圍的預置個數(shù)的隨機數(shù),作為re處理器中的初始隨機種子。

在一些優(yōu)選的實施例中,所述編譯與處理模塊還用于將正則表達式中的重復操作進行展開,語法錯誤檢查,對于純字符的匹配快速生成指令序列。

圖3是本發(fā)明具體實施方式中提供的re處理器的實施例的結構框圖,如圖3所示,在一些優(yōu)選的實施例中,re處理器22包括數(shù)據(jù)過濾模塊221、多路調(diào)度模塊222、運算模塊223和多級歸并排序模塊224:數(shù)據(jù)過濾模塊221用于根據(jù)所述指令序列中的前綴匹配規(guī)則,結合正則表達式的字邊界規(guī)則或一位負向零寬斷言對所述待匹配數(shù)據(jù)進行過濾;多路調(diào)度模塊222用于利用所述初始隨機種子采用偽隨機洗牌算法得到運算模塊223中的運算單元的調(diào)度結果;運算模塊223包括若干個的運算單元2231~223n,用于根據(jù)調(diào)度結果按照指令序列中的指令編碼和操作數(shù)完成過濾后的待匹配數(shù)據(jù)的搜索運算;多級歸并排序模塊224對搜索運算產(chǎn)生的結果按照偏移地址從小到大的順序排列得到搜索結果,并把所述搜索結果返回給re編譯器11。

數(shù)據(jù)過濾模塊221根據(jù)所述指令序列中的前綴匹配規(guī)則,結合正則表達式的字邊界規(guī)則或一位負向零寬斷言對待匹配數(shù)據(jù)進行過濾,使得搜索系統(tǒng)可根據(jù)用戶的需求查找100%的匹配、部分匹配、帶有通配符的字符串、變長的字符串、帶有特殊字符的字符串等等,數(shù)據(jù)過濾221加載字符串的同時對待匹配數(shù)據(jù)進行過濾,將前綴匹配的字符地址傳給re處理器22,不保存前綴不匹配的字符的地址,支持向前一位的零寬斷言過濾,用戶可配置,這一步驟大大減輕re處理器22的壓力。

多路調(diào)度模塊222采用偽隨機洗牌算法得到運算單元2231~223n的調(diào)度結果,使運算單元2231~223n根據(jù)調(diào)度結果按照指令序列中的指令編碼和操作數(shù)完成過濾后的待匹配數(shù)據(jù)的搜索運算,采用偽隨機洗牌算法可以避免由于待匹配數(shù)據(jù)固定格式造成單路繁忙問題,每個地址按調(diào)度結果傳給n個運算單元,n為2的n次方,n為正整數(shù)。作為一個優(yōu)選的實施例,運算模塊包括16個運算單元,16個運算單元并行處理,各個運算單元相互獨立地執(zhí)行指令系列,大大提高了搜索查詢速度。n取16,與選擇的總線寬度匹配,有利于提高搜索查詢速度。作為一個優(yōu)選的實施例,n也可為其他2的n次方,如32、64等。

其中,采用偽隨機洗牌算法每一時刻都隨機產(chǎn)生一個0~15的排列,例如某一時刻產(chǎn)生的隨機排列為(14,8,9,2,10,5,13,0,4,15,7,1,6,11,12),每個數(shù)出現(xiàn)且僅出現(xiàn)一次,即實現(xiàn)0~15的隨機洗牌算法,實現(xiàn)對16個運算單元的調(diào)度。作為一個優(yōu)選的實施例,re編譯器內(nèi)部的隨機數(shù)產(chǎn)生模塊產(chǎn)生32個互不相同的1~255的隨機數(shù),其中4個隨機數(shù)為1組,用來計算一個0~23的隨機數(shù)。計算方法如下:每個隨機數(shù)在fpga中作為lfsr(線性反饋移位寄存器)的初始狀態(tài),在每個時鐘到來的時候會產(chǎn)生1個0~31的隨機數(shù)。每個lfsr模塊產(chǎn)生的隨機數(shù)在0~23的概率為0.875,在24~31之間的概率為0.125。因此4個lfsr中產(chǎn)生的4個隨機數(shù)中至少有一個隨機數(shù)在0~23范圍內(nèi)的概率為0.996。當隨機數(shù)都不在0~23之間時,默認數(shù)值為0。這樣8個0~23的隨機數(shù)用來產(chǎn)生0~15的排列。如果是0~32的隨機序列則需要32+16個隨機數(shù),這和具體算法有關,但整體框架不變,都是由re編譯器產(chǎn)生初始隨機種子,再由fpga上的re運算器產(chǎn)生隨機數(shù)。

在一些優(yōu)選的實施例中,re編譯器11設置于主機1上,如圖1所示。作為另一個優(yōu)選的實施例re編譯器11也可設置于固態(tài)硬盤2的cpu核21上。在一些優(yōu)選的實施例中,主機1與固態(tài)硬盤2通過pcie接口3進行數(shù)據(jù)傳輸,通過axi(advancedextensibleinterface)總線傳輸數(shù)據(jù)。在一些優(yōu)選的實施例中,re編譯器11在主機1上由c語言實現(xiàn),re處理器22在固態(tài)硬盤2上基于fpga(field-programmablegatearray,現(xiàn)場可編程門陣列)由硬件描述語言verilog或vhdl(very-high-speedintegratedcircuithardwaredescriptionlanguage,超高速集成電路硬件描述語言)等實現(xiàn)。

在一些優(yōu)選的實施例中,所述多級歸并排序模塊224由級聯(lián)的多路歸并排序算法實現(xiàn),將搜索結果按照在文本中的偏移地址從小到大的順序進行排列,并將最后結果返回給re編譯器11,返回結果的格式為:{行號+偏移地址+長度}。re編譯器對返回的結果進行處理,并通過主機呈現(xiàn)給用戶。

本發(fā)明實施提供的搜索系統(tǒng)搜索和查詢由設于離數(shù)據(jù)最近的固態(tài)硬盤的re處理器進行,flash控制器將待匹配數(shù)據(jù)發(fā)送給re處理器,re處理器從待匹配數(shù)據(jù)中搜索符合所述指令序列的數(shù)據(jù),在離數(shù)據(jù)最近的存儲設備或存儲系統(tǒng)進行搜索和查詢,無需將大量的數(shù)據(jù)調(diào)到服務器cpu內(nèi)存,大大地減輕了服務器cpu的負載、提高了搜索查詢速度,接近總線傳輸速度,與現(xiàn)有技術相比,查找速度可提高數(shù)十倍、甚至上百倍,從根本上解決了在大數(shù)據(jù)查找分析的存儲瓶頸和存儲系統(tǒng)與cpu接口的瓶頸問題,而且可根據(jù)用戶的需求查找100%的匹配、部分匹配、帶有通配符的字符串、變長的字符串、帶有特殊字符的字符串等等,該搜索系統(tǒng)具有并行和流水線的特殊設計,有效提高了搜索查詢速度,具有反向查找功能,根據(jù)字母出現(xiàn)的頻率,在所查找的字符串內(nèi)任意一點開始搜索,能快速在非結構化的數(shù)據(jù)里查找隨機任意字符串。

以下是本發(fā)明具體實施方式中提供的一種字符串的搜索方法的實施例,系統(tǒng)的實施例基于上述的一種字符串的搜索系統(tǒng)的實施例實現(xiàn),在搜索方法中未盡的描述,請參考前述搜素系統(tǒng)的實施例。

請參考圖4,其是本發(fā)明具體實施方式中提供的一種字符串的搜索方法的實施例的方法流程圖,如圖4所示,在一些優(yōu)選的實施例中,該搜索方法包括:

步驟s101:re編譯器獲取用戶輸入的正則表達式和待匹配文件信息,將所述正則表達式編譯成指令序列,把所述指令序列發(fā)送給re處理器,把所述待匹配文件信息發(fā)送給cpu核。

步驟s102:cpu核根據(jù)所述待匹配文件信息向flash控制器發(fā)送數(shù)據(jù)獲取請求。

步驟s103:flash控制器根據(jù)所述數(shù)據(jù)獲取請求從flash陣列中獲取待匹配數(shù)據(jù),把所述待匹配數(shù)據(jù)發(fā)送給re處理器。

步驟s104:re處理器接收和所述待匹配數(shù)據(jù),從所述待匹配數(shù)據(jù)中搜索符合所述指令序列的數(shù)據(jù),并將搜索結果返回給re編譯器。

用戶可操作主機從re編譯器中獲取搜索結果對應的數(shù)據(jù),以搜索美國電話號碼為例,對搜索系統(tǒng)的搜索流程做進一步說明。如美國電話號碼的正則表達式如下:(?<=\s)\d{3}[-.]?\d{3}[-.]?\d{4},其中“(?<=\s)”表示匹配串的前面必須是空格字符,但是該空格字符不計入匹配串的長度;“\d”表示0-9的數(shù)字,后面的{3}表示前面的元素重復3次;“[-.]”表示“-”或“.”,后面的“?”表示前面的元素,即“[-.]”出現(xiàn)0次或1次。以此類推,該正表達式匹配的內(nèi)容如下加黑部分所示:

p:444-555-1234f:246.555.8888m:1235554567

具體處理流程如下:

(1)re編譯器將用戶輸入的正則表達式編譯成指令序列,將指令序列發(fā)送給re處理器,并將用戶輸入的待匹配文件信息發(fā)送給cpu核。示例的正則表達式產(chǎn)生的指令序列如表1所示:

表1指令序列

其中“l(fā)split”表示循環(huán)開始,后面參數(shù)依次為循環(huán)次數(shù)上限、下限和循環(huán)結束的下一條指令地址;“prange48,57”表示匹配ascii碼介于48到57之間的字符;“l(fā)jmp”表示循環(huán)結束,后面的參數(shù)依次為循環(huán)次數(shù)上限、下限和循環(huán)起始指令地址;“ppair45,46”表示匹配ascii碼為54或46的字符;“match”表示匹配結束。

(2)cpu核根據(jù)待匹配文件信息向flash控制器發(fā)送數(shù)據(jù)獲取請求。

(3)flash控制器根據(jù)數(shù)據(jù)獲取請求從flash陣列中獲取待匹配數(shù)據(jù),將待匹配數(shù)據(jù)發(fā)送給re運算器。

(4)re處理器接收所述指令序列、及所述待匹配數(shù)據(jù),根據(jù)所述指令序列從所述待匹配數(shù)據(jù)中搜索符合指令序列的數(shù)據(jù),并將搜索結果返回給re編譯器。若運算器包括16個運算單元,具體過程如下:

a)前綴檢查:每16b數(shù)據(jù)為一組,因此輸入數(shù)據(jù)分為三組“p:_444-555-1234”、“f:_246.555.8888”和“m:_1235554567”。過濾器按照“\d”規(guī)則對前綴進行匹配,只有偏移為3的“4”、偏移為19的“2”和偏移為35的“1”符合要求(見下劃線處)。

b)多路調(diào)度器產(chǎn)生為三組數(shù)據(jù)分別產(chǎn)生三組16個偽隨機洗牌的結果,因此偏移3、19、35分別進入不同的運算單元。否則,由于3、19、35除以16的余數(shù)均為3,則都會被發(fā)送給運算單元3,造成運算單元3繁忙,其他運算器空閑的狀態(tài)。

b)以偏移為3為例,運算單元n根據(jù)指令序列依次對后續(xù)“246.555.8888”進行匹配,結果為匹配成功。

c)多級歸并排序模塊采用歸并排序算法對16個運算單元的搜索結果進行排序。歸并排序分為二級,{0,1,2,3}分為一組進行歸并排序,以此類推,16個運算單元會得到4個結果,再將這個結果進行歸并排序,系統(tǒng)最終輸出的搜索結果({行號,偏移地址,長度})為:{0,3,12},{0,19,12},{0,35,10}。

d)re處理器把搜索結果返回給re編譯器。re編譯器對搜索結果進行處理,并通過主機呈現(xiàn)給用戶。

本發(fā)明實施搜索和查詢是在離數(shù)據(jù)最近的存儲設備或存儲系統(tǒng)進行,無需將大量的數(shù)據(jù)調(diào)到服務器cpu內(nèi)存,大大地減輕了服務器cpu的負載、提高了搜索查詢速度,接近總線傳輸速度,與現(xiàn)有技術相比,查找速度可提高數(shù)十倍、甚至上百倍,從根本上解決了在大數(shù)據(jù)查找分析的存儲瓶頸和存儲系統(tǒng)與cpu接口的瓶頸問題,而且可根據(jù)用戶的需求查找100%的匹配、部分匹配、帶有通配符的字符串、變長的字符串、帶有特殊字符的字符串等等,該搜索系統(tǒng)具有并行和流水線的特殊設計,有效提高了搜索查詢速度,具有反向查找功能,根據(jù)字母出現(xiàn)的頻率,在所查找的字符串內(nèi)任意一點開始搜索,能快速在非結構化的數(shù)據(jù)里查找隨機任意字符串。

以上結合具體實施例描述了本發(fā)明的技術原理。這些描述只是為了解釋本發(fā)明的原理,而不能以任何方式解釋為對本發(fā)明保護范圍的限制。基于此處的解釋,本領域的技術人員不需要付出創(chuàng)造性的勞動即可聯(lián)想到本發(fā)明的其它具體實施方式,這些方式都將落入本發(fā)明的保護范圍之內(nèi)。

當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
乳山市| 仁化县| 涡阳县| 苏尼特右旗| 偏关县| 凤城市| 安丘市| 罗江县| 潼关县| 马关县| 金寨县| 宝山区| 镇康县| 潼南县| 五河县| 仁怀市| 商丘市| 马龙县| 咸阳市| 化州市| 庄浪县| 金昌市| 周口市| 富顺县| 陇西县| 兴宁市| 萨嘎县| 普格县| 德庆县| 都匀市| 吴江市| 太仓市| 新昌县| 乐山市| 唐河县| 手机| 乳源| 湟中县| 宜黄县| 阿勒泰市| 金溪县|