?

基于元數據的分布式通用查詢系統研究與實現

2017-08-30 10:17王戰英王占宏
微型電腦應用 2017年8期
關鍵詞:頁面分布式關聯

王戰英, 王占宏

(上海眾恒信息產業股份有限公司,上海 200042)

基于元數據的分布式通用查詢系統研究與實現

王戰英, 王占宏

(上海眾恒信息產業股份有限公司,上海 200042)

信息查詢是所有信息系統中的基礎功能,不同的業務有不同的查詢要求和結果展示要求。傳統的解決方法是由程序員根據不同的業務要求定制開發不同的查詢模塊,造成了很多的重復工作,既降低了開發效率,又增加了開發成本。另一方面,傳統的查詢模塊大多是和業務系統共用一個數據庫,少部分有獨立的查詢、分析數據庫,基本都是集中式的關系型數據庫,隨著業務數據的快速增長,系統的性能就往往有明顯的下降,很難滿足用戶的實時性需求。針對這兩方面的問題,在長期實踐的基礎上,提出了基于元數據的分布式通用查詢系統研究,一方面使用模板引擎解析不同的元數據,自動適應不同的業務查詢需求,提高查詢的通用性;另一方面,基于分布式搜索引擎技術,利用全索引和并行計算提高系統的查詢性能。通過多個系統的開發實踐,該成果不僅能夠滿足不同行業、不同類型系統90%以上的查詢需求,且響應時間基本都在毫秒級,取得了較好的應用效果。

通用查詢; 元數據; 分布式搜索

0 引言

隨著信息化的快速,各領域都逐步建設了符合自己業務需求的信息化系統,這些系統都自成體系。伴隨信息化的深入發展,人們發現將一定范圍中的相關數據整合到一起,統一組織、開發、利用,才能使這些信息資源發揮更大的價值,實施這項工作的早期技術就是人們比較熟悉的數據倉庫技術,按應用主題把相關數據組織存儲在統一的數據庫中,既可以在各自的主題中快速查詢分析,也可以在主題之間關聯分析,消除了數據之間彼此隔離的障礙,使人們可以在更大范圍中充分發掘這些數據中蘊含的信息,為日常的輔助決策提供有力的數據支撐[1]。數據集中存儲、統一管理后,面對的最直接需求就是對這些數據進行檢索、查詢,以展示數據本來的面貌和數據之間的關聯關系。通常系統中的檢索、查詢功能都是根據不同的業務需求,針對不同的數據表定制開發,面對大型數據倉庫中的成千上萬的數據表,這種開發方式的工作量相當大,且也缺乏適應性、靈活性。因此,研發一套與業務無關但又能體現不同業務特點的檢索、查詢系統成為應對這個問題的關鍵。另一方面,隨著大數據時代的到來,數據呈爆炸式增長,人們很快發現,關系型、集中式數據倉庫技術面對大規模、超大規模數據的檢索請求,不僅響應速度慢,且經常因資源消耗大而造成宕機。因此,急需探索新的技術來應對大數據的挑戰。所以分布式存儲、分布式計算應運而生,分布式技術的核心思路是把超大規模的數據集分割成多個較小規模的數據集,這些較小規模的數據集分別存儲在不同的機器中,計算請求也被分發到相關的機器上,大量機器并行地在自己管理的小規模數據中快速的完成計算,最后把各自的結果匯總到客戶端形成最終結果[2]。針對以上兩方面問題,本文討論了采用分布式技術,以元數據為核心,通過靈活配置,以適應不同業務需求查詢功能的設計思路與實現方法。

1 查詢功能分析

1.1 查詢功能的內容

查詢功能是根據用戶輸入的查詢條件,查詢出滿足條件的數據記錄。此功能包含3個部分的內容,查詢條件的輸入與構造,查詢結果列表的展示,單條記錄詳細信息的展示以及關聯信息展示。

1.2 查詢功能的分類

查詢功能根據條件、操作靈活性、查詢結果的處理方式以及查詢數據的格式具有不同的分類方法。

(1) 根據查詢條件的匹配精度分

根據查詢條件的匹配精度,可以把查詢功能分為精確查詢和模糊查詢。精確查詢指的是用戶輸入的每個查詢字符串與數據庫中的相應字段值完全匹配才算命中;模糊查詢指的是用戶輸入的查詢字符串與數據庫中的相應字段值部分匹配就算命中;模糊查詢又可根據匹配范圍分為單字段模糊查詢和多字段模糊查詢。單字段模糊查詢是指,對單個表的單個字段進行前綴匹配、后綴匹配、包含匹配。多字段模糊查詢是指,對單個表的多個字段或多個表的多個字段進行前綴匹配、后綴匹配、包含匹配及相識度匹配。

(2) 根據查詢操作的靈活程度分

根據查詢操作的靈活程度,可以把查詢功能分為簡單固定條件查詢、復雜自定義條件查詢和全文檢索。簡單固定條件查詢,指的是針對單個業務表,給用戶提供幾個常用字段進行查詢,每個字段的條件一般為相等關系,也可以通過在輸入字符串中添加通配符實現模糊查詢,多個字段間一般為邏輯并的關系;復雜自定義條件查詢,指的是針對單個業務表,把表中可能需要查詢的所有字段都提供給用戶,由用戶在其中自己選擇用哪幾個字段來組合查詢條件,每個條件根據字段值的類型可以支持相等、不相等、大于、大于等于、小于、小于等于、包含、為空、不為空等比較運算,多個條件之間可以由用戶選擇邏輯并或者邏輯或關系,多個條件也可以通過添加括號來支持條件分組嵌套;全文檢索,指的是只給用戶提供一個條件輸入框,用戶可以在其中輸入用空格分隔的多個字符串,查詢是相對于整個庫的所有表的所有字段進行模糊匹配,也可以讓用戶選擇查詢范圍。

(3) 根據查詢結果的處理方式分

根據查詢結果的處理方式,可以把查詢功能分為簡單定位查詢和多級關聯查詢。簡單定位查詢,是指根據查詢條件得到單條或多條滿足條件的結果記錄,然后簡單地查看每條記錄本身的信息而不關注額外信息;多級關聯查詢,指的是除過查看滿足條件的記錄本身的信息外,也給用戶提供這條記錄其他的關聯信息,使用戶對結果了解地更清楚,并且用戶也能夠通過交互導航到其他相關信息。比如:對人口信息的查詢,先查詢到滿足條件的一個或多個人的信息,然后選中一個人進一步查看此人的更詳細的信息,在詳細信息中除過展示人的基本信息外,同時展示這個人的家庭成員、工作履歷等關聯信息,用戶也可以進一步查看此人的某個家庭成員而導航到另一個相關的目標,這種關聯查詢可以使用戶對查詢結果有更全面的理解。

(4) 根據查詢數據的形式分

根據查詢數據的形式,可以把查詢功能分為結構化數據查詢和非結構化數據查詢。結構化數據查詢,是指對關系型數據庫中,或來自其他數據源中可以用二維表格表達的數據進行查詢,這種查詢一般都是字段級的精確查詢;非結構化數查詢,指的是對網頁、文本文件、word、excel、ppt、pdf等文本型數據進行查詢,這種查詢一般都是文檔級的全文檢索。

1.3 通用查詢功能分析

(1) 通用查詢功能

通用查詢是指能夠滿足上述所分析的各類查詢功能要求。即能夠對各個行業的相關數據,進行滿足其業務特點的查詢要求。

(2) 通用查詢功能的特點

1) 與業務無關;各業務領域數據都能用此功能進行查詢操作。

2) 能夠體現不同業務的特點;根據不同業務的特點,支持不同的查詢方式及展示方式。

3) 能夠動態適應業務要求的變化;通過功能調整而非程序代碼來快速響應用戶需求的變化。

4) 能夠高效地響應結果;查詢一般都屬于在線操作,響應時間應控制在毫秒級。

2 基于元數據的通用查詢實現模型

元數據是“關于數據的數據”,它通過對信息資源的描述和限定,實現對資源的定位和管理,從而最終有助于實現對這種資源及相關數據的檢索[3]。

通用查詢功能既要與業務無關,又要體現不同業務的特點,從而動態適應其業務變化,必須對各種不同的物理數據表示給出相應抽象的邏輯表示,必須根據不同的描述信息對界面提供靈活的定制功能。要適應這些動態變化的要求,就要求程序邏輯不能固化,而要能夠根據一些描述性信息作出不同的變化。所以,描述性信息是實現通用性的核心、基礎,而描述性信息即元數據,描述數據的數據。通用查詢功能中的元數據我們分為兩類,描述數據結構的元數據和描述頁面展示的元數據。

2.1 描述數據結構的元數據

此類元數據用來描述不同業務數據的物理結構、邏輯結構以及數據之間的關聯關系。包括物理表、物理表字段、業務實體、業務實體屬性、關聯子實體、關聯子實體屬性六個方面的信息,他們之間的關系,如圖1所示。

圖1 通用查詢元數據邏輯結構圖

(1) 物理表

物理表描述系統中所有表,關鍵信息有表的存儲名稱、顯示名稱,還可以包含表的管理性信息,如表的類型(業務數據表、內部控制表等),表中數據的更新方式、更新周期等。

(2) 物理表字段

物理表字段描述構成物理表的字段信息,關鍵信息有字段的存儲名稱、字段的顯示名稱、字段的存儲類型、字段長度、是否為主鍵、是否為外鍵、是否唯一、是否可為空等。

(3) 業務實體

業務實體是從業務的角度來描述系統中數據單元,大多數情況下一個物理表對應一個業務實體信息,也有物理表中的數據存儲多個相似但不相同的業務邏輯的數據,比如,對一個城市的人口信息進行管理,所有的人信息都可以存儲在一張物理表中,但從業務管理上,可以把人分成常住人口、外來人口和境外人口,三類人口信息的管理方式不一樣,相關業務操作都有區別,如查詢字段、展示字段都有差別。對業務實體和業務實體所擁有的屬性描述是通用查詢功能的核心內容。從數據結構方面看,業務實體包含的關鍵信息有業務標識名稱、業務顯示名稱、業務所屬類別。

(4) 業務實體屬性

業務實體屬性是描述一個業務具體信息項的元數據,是用戶操作最多的數據項,也是業務差別最大的信息。因此,它是通用查詢功能處理的重點。從數據結構方面看,業務實體屬性包含的關鍵元數據有屬性表示名稱、屬性顯示名稱、屬性的類型、是否主鍵屬性、是否外鍵等。通常,一個業務實體屬性關聯一個物理表字段,也有根據業務的需要,關聯多個物理表字段,如地址信息,在物理表中可能會按城市、區縣、街道、路名、號、室等多個字段存儲,但查詢展示的時候可能需要把這些字段合并成一個地址屬性,這樣的屬性稱為虛擬屬性。

(5) 關聯子實體

關聯子實體是用來描述與一個實體有關聯關系的實體元數據,用來描述兩個業務實體之間的關系,關鍵信息有父實體ID、子實體ID、關聯類型(一對一、一對多、多對多)、關聯名稱,如果關聯類型為多對多,則還需要描述多對多關聯實體ID、多對多目標實體屬性、多對多關聯實體屬性。

(6) 關聯子實體屬性

關聯子實體屬性是用來描述兩個實體之間關聯條件的元數據,可以支持單條件關聯和多條件關聯,關鍵信息有子實體屬性ID、父實體屬性ID。

2.2 描述頁面展示的元數據

查詢功能是面向最終用戶的,它的所有功能都是靠界面來體現,根據需求及使用場景不同,查詢功能被分成很多種類,每一種都是通過不同的界面形式來表達。為了使實現的功能達到通用,就需要使用大量描述性元數據來定義頁面的不同元素。界面反映的都是業務需求,所以頁面展示的元數據都與描述數據結構元數據中的業務實體元數據和業務實體屬性元數據對應,都是對這兩個元數據的擴充。

(1) 查詢功能頁面結構分析

常用的查詢功能由輸入查詢條件界面、展示結果列表界面和展示單條結果詳細信息界面組成。

1) 輸入查詢條件界面

該界面需要考慮哪些業務屬性用作查詢條件;根據重要性及常用性,這些屬性的排列順序如何;根據界面大小,一行最多能夠擺放幾個查詢屬性;每一個查詢屬性的比較運算符是固定的還是可變化的;多個查詢條件之間的邏輯關系是固定的還是可變化的;每個查詢條件值的輸入方式如何適應不同屬性類型的變化。

2) 展示結果列表界面

該界面要考慮哪些業務屬性需要展示在結果列表中;這些屬性的排列順序如何;根據屬性值的可能長短如何控制不同屬性在列表中的寬度大??;表頭是否支持排序;每一行的哪個屬性值支持超鏈接關聯查詢。

3) 展示單條結果詳細信息界面

該界面要考慮哪些業務屬性需要展示在詳細信息界面中;這些屬性的排列順序如何;一般這個界面都是以表格方式進行排列,需要控制一行最多擺放幾個屬性,哪個屬性需要進行跨多列、跨多行擺放;哪個屬性需要支持超鏈接關聯查詢;哪些屬性應該歸為同一組,使展示更清楚;同時,此界面也會展示出當前業務的關聯信息,要考慮如何擺放這些關聯信息。

(2) 描述頁面展示的元數據

綜合考慮查詢功能的不同頁面要求,分別給業務實體和業務實體屬性擴充相關元數據。

業務實體包括查詢頁面列數、詳細頁面列數、查詢頁面模板、列表頁面模板、詳細頁面模板。

業務實體屬性包括查詢頁面序號、列表頁面序號、詳細頁面序號、輸入類型(單行文本、多行文本、單選下拉列表、多選下拉列表、選項字典、日期、日期時間、樹形單選、樹形多選)、頁面出現位置(查詢條件頁面、列表頁面、詳細頁面、自定義查詢頁面)、查詢頁面跨列數、詳細頁面跨列數、詳細頁面跨行數、列表顯示寬度、列表對齊方式(左對齊、右對齊、居中對齊)、默認查詢符號(等于、大于、小于、大于等于、小于等于、不等于、為空、不為空、模糊、包含、不包含、前綴、后綴)、屬性分組名稱、日期時間格式、超鏈接地址。

2.3 元數據解析模型

使用元數據的目的是使查詢功能能夠隨元數據的變化而變化,從而適應不同的業務需求,實現查詢功能的通用性,不同的查詢功能是通過不同的界面來體現的,界面是由元數據、業務數據、頁面布局和控件聯合生成,頁面布局也稱為頁面模板。因此,本文利用模板引擎來解析元數據,動態生成不同的查詢功能界面,如圖2所示。

圖2 通用查詢元數據解析模型圖

系統預先設計一組常用的、實現不同功能的頁面模板,并實現元數據的配置功能。針對不同的業務數據及查詢功能要求,通過選擇適當的頁面模板,配置不同的元數據,自動生成不同的查詢頁面,從而實現不同業務需求的通用查詢功能。

3 分布式搜索引擎

3.1 集中式關系型數據庫特點及局限性

傳統查詢功能都是基于集中式的關系型數據庫實現的,特別是對于結構化、有關聯關系的數據,關系型數據庫提供了很好的存儲支撐和標準的SQL查詢語言,可以很方便、高效地實現特定的查詢功能。對于特定條件的查詢,關系型數據庫可以通過對特定字段建立索引或對多個字段建立聯合索引來滿足高性能的查詢需求。另外,對于一定規模的數據的查詢,關系型數據庫也可以通過對數據提供分區存儲的技術,在一定程度上提高查詢效率,滿足應用要求。

但是,針對通用查詢,關系型數據庫遇到了難以克服的挑戰。首先,通用查詢會針對一個業務表的任何字段進行查詢,而關系型數據庫中當一張表中的數據達到千萬記錄時,如果對沒有創建索引的字段執行查詢時,響應時間是不可接受的。所以,為了面對任意字段查詢,就需要對每個字段都創建索引。關系型數據庫中的索引,分單列索引和多列復合索引,單列索引相對單條件查詢,多列復合索引相對多條件查詢,而且多列復合索引的順序也是固定的(與業務相關)。通用查詢既要查詢單列又要查詢多列,所以關系型數據庫中的索引機制是受限制的,不能滿足通用查詢的業務無關性要求。其次,通用查詢既要能夠針對小規模數據量查詢,也要能夠滿足一定的大規模數據量的查詢性能要求,關系型數據庫可以通過存儲分區的技術有限地解決特定場景的大數據查詢問題,它的分區是根據業務字段進行分區,如果查詢條件相對一個分區,查詢將是很高效的,但是有些查詢也是要求跨分區,那么查詢效率會受很大影響,也即這種分區技術是與業務相關的,滿足不了通用查詢的要求。受關系型數據庫這兩方面的限制,本文采用分布式搜索引擎作為通用查詢

功能的技術支撐。

3.2 分布式搜索引擎的優勢

分布式并行計算技術是當前解決大規模數據應用的最佳方案。分布式并行計算技術的核心思想是,把超大規模的數據集分片成多個較小規模的數據集,這些較小規模的數據集分別存儲在不同的物理機器中,計算請求被分發到相關的機器上,大量機器并行地在自己管理的小規模數據中快速的完成計算,最后把各自的結果匯總而形成最終結果。這里的數據分片對應關系型數據庫中的數據分區,但分布式計算中的數據分片是不與業務相關的,而是由分布式框架自動來管理,也自動實現跨分片計算,所以,不受業務限制,可以滿足通用查詢功能對業務無關性的要求。

其次,分布式技術通過為數據自動管理副本來提高數據的安全性和負載均衡,這可以解決通用查詢功能的可用性和高效性。最后,分布式技術也能夠自動對分布式集群中的計算節點進行管理,當數據規模不大,用戶并發不高的情況下,可以使用較小的集群來滿足查詢要求,隨著數據量的增大及并發量的提高,可以動態增加機器來提高計算能力來滿足查詢要求,這種能力可以滿足通用查詢對不同數據量、不同使用場景的應用要求。

全文搜索引擎[4]是通過專門的索引結構來實現高效率的文本查詢功能的技術。搜索引擎由索引引擎和查詢引擎組成,索引引擎對需要查詢的文本內容進行適當的分詞切割,使長文本變成多個可能被用戶用來檢索的詞語,把這些詞語按一定的索引結構存儲起來,以便高效檢索查詢。查詢引擎對用戶輸入的查詢關鍵字也是先進行分詞,然后用這些短的詞語通過高效的匹配算法在索引中查找,最終定位到索引所指向的原始數據,從而返回最終結果給用戶。因此全文搜索引擎是通過對所有數據建立索引來提高查詢效率,這一特點正好與通用查詢功能中可能對所有字段進行查詢的要求匹配,是用來提高通用查詢效率的最佳技術路線。

3.3 ElasticSearch搜索引擎

彈性搜索(ElasticSearch,簡稱ES),是一個基于Lucene構建的分布式搜索引擎,能夠實現實時、穩定、可靠的搜索功能[5]。(1)它是基于分布式架構的,包含分布式架構中的關鍵概念,集群、分片、副本、數據重新分配。(2)它是基于高效、通用的全文搜索庫Lucene構建的,Lucene是當前最受歡迎的開源Java信息檢索程序庫,提供靈活、高效的搜索能力。(3)它的內部是以Json格式來組織數據,因此可以存儲各種結構的文本數據,并且數據結構可以動態變化,這一點可以很好地滿足通用查詢業務無關性的要求。(4)它提供了簡單、一致的restfull Api接口,既可以用來創建索引,也可以用來檢索查詢,可以很好地兼容各種語言的開發需要。它既支持全文本檢索,也支持按字段精確或模糊查詢,也就是說它既支持非結構化文本內容的檢索,也支持結構化內容的查詢。所以,此工具是理想的實現通用查詢功能的技術支撐。

4 設計實現

基于上述分析的各項理論及技術,本人主導,基于JAVA語言、JAVAEE架構、SPRING框架實現了一套完整的通用查詢功能,整體架構,如圖3所示。

圖3 通用查詢參考實現架構圖

外部不同形式的數據通過ETL工具,根據元數據中的標識信息,形成需要搜索的數據輸入索引引擎,進而建立索引存儲在索引庫中。用戶請求特定業務的查詢功能,模板引擎解析相應業務的查詢頁面模板生成查詢頁面,用戶在查詢頁面中輸入查詢條件后執行查詢,由查詢控制器構造查詢語句提交到查詢引擎,返回命中的結果給查詢控制器,查詢控制器再根據查詢業務所配置的結果頁面模板由頁面模板引擎結合元數據生成查詢結果頁面展示給用戶。

4.1 簡單固定條件查詢頁面

如圖4所示。

圖4 簡單固定條件查詢頁面參考圖

每個業務實體都會歸屬到一個特定的資源目錄條目中,左邊為所有需要查詢的業務的目錄分類樹,用戶選擇一個業務,右邊展示出查詢條件的頁面和查詢結果的頁面,這兩部分都是根據配置的元數據自動生成。

4.2 復雜自定義條件查詢頁面

如圖5所示。

圖5 復雜自定義條件查詢頁面參考圖

左邊擺放的是一個業務的所有可能需要查詢的字段,可以通過拖動的方式把想要用來構造查詢條件的字段放到右邊的上半部分,對每個條件可以選擇不同的比較運算符,多個條件可以通過添加括號合并,可以選擇合并的邏輯符號,構造好查詢條件后執行查詢,在右邊的下半部分展示匹配到的查詢結果。

4.3 全文檢索頁面

如圖6所示。

圖6 全文檢索頁面參考圖

頁面上面為一個查詢框,在其中輸入檢索關鍵詞,多個關鍵詞用空格分隔,執行檢索,頁面下面的左邊展示的是所有匹配到的記錄在相應資源分類中的記錄數,通過選擇相應的業務資源,在右邊展示每個業務匹配到的具體記錄信息。

4.4 元數據配置頁面

如圖7所示。

圖7 元數據配置頁面參考圖

主要的元數據配置是業務實體元數據和業務實體屬性元數據,左邊維護業務實體列表,右邊是每個業務實體的屬性列表,業務實體屬性的描述元數據是配置的主要內容。

5 總結

本文對查詢功能做了詳細而全面的研究分析后,提出基于元數據的分布式通用查詢解決方案,既解決了查詢功能的多樣性、復雜性問題,也滿足了大規模數據下的查詢性能問題。

基于此方案開發了一套完整的通用查詢系統,并在多個行業的不同項目中得到了成功的應用,極大地節約了項目的開發、維護成本,系統的功能、性能也得到了使用者的一致好評。

[1] 王志海. 數據倉庫[M]. 北京:機械工業出版社, 2003.

[2] 劉麗,米振強,熊曾剛. 深入理解云計算:基本原理和應用程序編程技術[M]. 北京:機械工業出版社, 2015.

[3] 尹文燕. 元數據發展現狀及存在問題研究[D]. 北京:中國科學技術信息研究所, 2003. 1.

[4] 李永春,丁華福. Lucene的全文檢索的研究與應用[J]. 計算機技術與發展, 2010, 20(2): 12-15.

[5] 王占宏, 王戰英, 顧國強, 等. 分布式彈性搜索研究與實踐[J]. 微型電腦應用, 2014, 30(7): 9-12.

Research and Implementation of Distributed General Query System Based on Metadata

Wang Zhanying,Wang Zhanhong

(Shanghai Triman Information & Technology Co.,Ltd., Shanghai 200042)

Information query is a basic function of information systems. Different businesses have different requests of query and result presenting. A typical approach is to require that the programmer custom-develop query modules based on different business requirements. It causes a lot of duplicating efforts, reduces development efficiency and increases development cost. On the other hand, a typical query module and business systems share a same database. Few of them has independent query and analysis database, which basically is centralized relational database. With the rapid growth of business data, system performance decreases significantly, it is hardly to meet real-time requirement of users. In response to these two issues, after a long-term practice, this paper proposes a distributed general- query-system research, which is based on metadata. On one hand, different metadata are analyzed by using template engine. The system can automatically adapt to different business query needs, and improves the versatility. On the other hand, based on distributed search engine technique, it utilizes full index and parallel computing to improve query performance. Through multiple systems development practice, this achievement can meet more than 90% query needs of different industries and different types of systems, the response time is basically in the millisecond level, and it achieves good application effect.

General-query; Metadata; Distributed-search

王戰英(1978-),工程師,學士,研究方向:電子政務規劃。 王占宏(1975-),教授級高工,博士,研究方向:電子政務規劃,數據倉庫與數據挖掘。

1007-757X(2017)08-0046-05

TP311

A

2017.03.10)

猜你喜歡
頁面分布式關聯
刷新生活的頁面
不懼于新,不困于形——一道函數“關聯”題的剖析與拓展
答案
“一帶一路”遞進,關聯民生更緊
奇趣搭配
分布式光伏熱錢洶涌
分布式光伏:爆發還是徘徊
智趣
基于DDS的分布式三維協同仿真研究
西門子 分布式I/O Simatic ET 200AL
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合