久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

詳解PHP優(yōu)化巨量關(guān)鍵詞的匹配

瀏覽:6日期:2022-09-07 11:17:27
目錄問(wèn)題由來(lái)原始 - grep設(shè)計(jì)代碼進(jìn)化 - 正則設(shè)計(jì)正則小坑代碼覺(jué)醒 - 拆詞設(shè)計(jì)代碼結(jié)果終級(jí) - Trie樹(shù)trie樹(shù)設(shè)計(jì)代碼結(jié)果他徑 - 多進(jìn)程設(shè)計(jì)結(jié)果總結(jié)問(wèn)題由來(lái)

前些天工作中遇到一個(gè)問(wèn)題:

有 60萬(wàn) 條短消息記錄日志,每條約 50 字,5萬(wàn) 關(guān)鍵詞,長(zhǎng)度 2-8 字,絕大部分為中文。要求將這 60萬(wàn) 條記錄中包含的關(guān)鍵詞全部提取出來(lái)并統(tǒng)計(jì)各關(guān)鍵詞的命中次數(shù)。

原始 - grep設(shè)計(jì)

一開(kāi)始接到任務(wù)的時(shí)候,我的小心思立刻轉(zhuǎn)了起來(lái),日志 + 關(guān)鍵詞 + 統(tǒng)計(jì),我沒(méi)有想到自己寫(xiě)代碼實(shí)現(xiàn),而是首先想到了 linux 下常用的日志統(tǒng)計(jì)命令 grep。

grep命令的用法不再多提,使用 grep ’keyword’ | wc -l 可以很方便地進(jìn)行統(tǒng)計(jì)關(guān)鍵詞命中的信息條數(shù),而php的 exec() 函數(shù)允許我們直接調(diào)用 linux 的 shell 命令,雖然這樣執(zhí)行危險(xiǎn)命令時(shí)會(huì)有安全隱患。

代碼

上偽代碼:

foreach ($word_list as $keyword) { $count = intval(exec('grep ’{$keyword}’ file.log | wc -l')); record($keyword, $count);}

在一臺(tái)老機(jī)器上跑的,話說(shuō)老機(jī)器效率真的差,跑了6小時(shí)。估計(jì)最新機(jī)器2-3小時(shí)吧,后面的優(yōu)化都使用的新機(jī)器,而且需求又有變動(dòng),正文才剛剛開(kāi)始。

原始,原始在想法和方法。

進(jìn)化 - 正則設(shè)計(jì)

交了差之后,第二天產(chǎn)品又提出了新的想法,說(shuō)以后想把某數(shù)據(jù)源接入進(jìn)來(lái),消息以數(shù)據(jù)流的形式傳遞,而不再是文件了。而且還要求了消息統(tǒng)計(jì)的實(shí)時(shí)性,一下把我想把數(shù)據(jù)寫(xiě)到文件再統(tǒng)計(jì)的想法也推翻了,為了方案的可擴(kuò)展性,現(xiàn)在的統(tǒng)計(jì)對(duì)象不再是一個(gè)整體,而是要考慮拿n個(gè)單條的消息來(lái)匹配了。

這時(shí),略懵的我只好祭出了最傳統(tǒng)的工具- 正則。正則的實(shí)現(xiàn)也不難,各個(gè)語(yǔ)言也都封裝好了正則匹配函數(shù),重點(diǎn)是模式(pattern)的構(gòu)建。

當(dāng)然這里的模式構(gòu)建也不難,/keyword1|keword2|.../,用|將關(guān)鍵詞連接起來(lái)即可。

正則小坑

這里介紹兩個(gè)使用中遇到的小坑:

1.正則模式長(zhǎng)度太長(zhǎng)導(dǎo)致匹配失敗:

PHP 的正則有回溯限制,以防止消耗掉所有的進(jìn)程可用堆棧, 最終導(dǎo)致 php 崩潰。太長(zhǎng)的模式會(huì)導(dǎo)致 PHP 檢測(cè)到回溯過(guò)多,中斷匹配,經(jīng)測(cè)試默認(rèn)設(shè)置時(shí)最大模式長(zhǎng)度為 32000 字節(jié) 左右。

php.ini 內(nèi) pcre.backtrack_limit 參數(shù)為最大回溯次數(shù)限制,默認(rèn)值為 1000000,修改或php.ini 或在腳本開(kāi)始時(shí)使用ini_set(‘pcre.backtrack_limit’, n); 將其設(shè)置為一個(gè)較大的數(shù)可以提高單次匹配最大模式長(zhǎng)度。當(dāng)然也可以將關(guān)鍵詞分批統(tǒng)計(jì)(我用了這個(gè)=_=)。

2.模式中含有特殊字符導(dǎo)致大量warning:

匹配過(guò)程中發(fā)現(xiàn) PHP 報(bào)出大量 warning:unknown modifier 亂碼,仔細(xì)檢查發(fā)現(xiàn)關(guān)鍵詞中有/字符,可以使用preg_quote()函數(shù)過(guò)濾一遍關(guān)鍵詞即可。

代碼

上偽代碼:

$end = 0;$step = 1500;$pattern = array();// 先將pattern 拆成多個(gè)小塊while ($end < count($word_list)) { $tmp_arr = array_slice($word_list, $end, $step); $end += $step; $item = implode(’|’, $tmp_arr); $pattern[] = preg_quote($item);}$content = file_get_contents($log_file);$lines = explode('n', $content);foreach ($lines as $line) { // 使用各小塊pattern分別匹配 for ($i = 0; $i < count($pattern); $i++) {preg_match_all('/{$pattern[$i]}/', $line, $match); } $match = array_unique(array_filter($match)); dealResult($match);}

為了完成任務(wù),硬著頭皮進(jìn)程跑了一夜。當(dāng)?shù)诙煳野l(fā)現(xiàn)跑了近十個(gè)小時(shí)的時(shí)候內(nèi)心是崩潰的。。。太慢了,完全達(dá)不到使用要求,這時(shí),我已經(jīng)開(kāi)始考慮改換方法了。

當(dāng)產(chǎn)品又改換了關(guān)鍵詞策略,替換了一些關(guān)鍵詞,要求重新運(yùn)行一遍,并表示還會(huì)繼續(xù)優(yōu)化關(guān)鍵詞時(shí),我完全否定了現(xiàn)有方案。絕對(duì)不能用關(guān)鍵詞去匹配信息,這樣一條一條用全部關(guān)鍵詞去匹配,效率實(shí)在是不可忍受。

進(jìn)化,需求和實(shí)現(xiàn)的進(jìn)化

覺(jué)醒 - 拆詞設(shè)計(jì)

我終于開(kāi)始意識(shí)到要拿信息去關(guān)鍵詞里對(duì)比。如果我用關(guān)鍵詞為鍵建立一個(gè) hash 表,用信息里的詞去 hash 表里查找,如果查到就認(rèn)為匹配命中,這樣不是能達(dá)到 O(1) 的效率了么?

可是一條短消息,我如何把它拆分為剛好的詞去匹配呢,分詞?分詞也是需要時(shí)間的,而且我的關(guān)鍵詞都是些無(wú)語(yǔ)義的詞,構(gòu)建詞庫(kù)、使用分詞工具又是很大的問(wèn)題,最終我想到 拆詞。

為什么叫拆詞呢,我考慮以蠻力將一句話拆分為所有可能的詞。如我是好人就可以拆成 我是、是好、好人、我是好、是好人、我是好人等詞,我的關(guān)鍵詞長(zhǎng)度為 2-8,所以可拆詞個(gè)數(shù)會(huì)隨著句子長(zhǎng)度迅速增加。不過(guò),可以用標(biāo)點(diǎn)符號(hào)、空格、語(yǔ)氣詞(如的、是等)作為分隔將句子拆成小短語(yǔ)再進(jìn)行拆詞,會(huì)大大減少拆出的詞量。

其實(shí)分詞并沒(méi)有完整實(shí)現(xiàn)就被后一個(gè)方法替代了,只是一個(gè)極具實(shí)現(xiàn)可能的構(gòu)想,寫(xiě)這篇文章時(shí)用偽代碼實(shí)現(xiàn)了一下,供大家參考,即使不用在匹配關(guān)鍵詞,用在其他地方也是有可能的。

代碼

$str_list = getStrList($msg);foreach ($str_list as $str) { $keywords = getKeywords($str); foreach ($keywords as $keyword) {// 直接通過(guò)PHP數(shù)組的哈希實(shí)現(xiàn)來(lái)進(jìn)行快速查找if (isset($word_list[$keyword])) { record($keyword);} }}/** * 從消息中拆出短句子 */function getStrList($msg) { $str_list = array(); $seperators = array(’,’, ’。’, ’的’, ...); $words = preg_split(’/(?<!^)(?!$)/u’, $msg); $str = array(); foreach ($words as $word) {if (in_array($word, $seperators)) { $str_list[] = $str; $str = array();} else { $str[] = $word;} } return array_filter($str_list);}/** * 從短句中取出各個(gè)詞 */function getKeywords($str) { if (count($str) < 2) {return array(); } $keywords = array(); for ($i = 0; $i < count($str); $i++) {for ($j = 2; $j < 9; $j++) { $keywords[] = array_slice($str, $i, $j); // todo 限制一下不要超過(guò)數(shù)組最大長(zhǎng)度} } return $keywords;}結(jié)果

我們知道一個(gè) utf-8 的中文字符要占用三個(gè)字節(jié),為了拆分出包含中英文的每一個(gè)字符,使用簡(jiǎn)單的 split() 函數(shù)是做不到的。

這里使用了 preg_split(’/(?<!^)(?!$)/u’, $msg) 是通過(guò)正則匹配到兩個(gè)字符之間的’’來(lái)將兩個(gè)字符拆散,而兩個(gè)括號(hào)里的 (?<!^)(?!$) 是分別用來(lái)限定捕獲組不是第一個(gè),也不是最后一個(gè)(不使用這兩個(gè)捕獲組限定符也是可以的,直接使用//作為模式會(huì)導(dǎo)致拆分結(jié)果在前后各多出一個(gè)空字符串項(xiàng))。 捕獲組的概念和用法可見(jiàn)我之前的博客 PHP正則中的捕獲組與非捕獲組

由于沒(méi)有真正實(shí)現(xiàn),也不知道效率如何。估算每個(gè)短句長(zhǎng)度約為 10 字左右時(shí),每條短消息約50字左右,會(huì)拆出 200 個(gè)詞。雖然它會(huì)拆出很多無(wú)意義的詞,但我相信效率絕不會(huì)低,由于其 hash 的高效率,甚至我覺(jué)得會(huì)可能比終極方法效率要高。

最終沒(méi)有使用此方案是因?yàn)樗鼘?duì)句子要求較高,拆詞時(shí)的分隔符也不好確定,最重要的是它不夠優(yōu)雅。。。這個(gè)方法我不太想去實(shí)現(xiàn),統(tǒng)計(jì)標(biāo)識(shí)和語(yǔ)氣詞等活顯得略為笨重,而且感覺(jué)拆出很多無(wú)意義的詞感覺(jué)效率浪費(fèi)得厲害。

覺(jué)醒,意識(shí)和思路的覺(jué)醒

終級(jí) - Trie樹(shù)trie樹(shù)

于是我又來(lái)找谷哥幫忙了,搜索大量數(shù)據(jù)匹配,有人提出了 使用 trie 樹(shù)的方式,沒(méi)想到剛學(xué)習(xí)的 trie 樹(shù)的就派上了用場(chǎng)。我上上篇文章剛介紹了 trie 樹(shù),在空間索引 - 四叉樹(shù) 里字典樹(shù)這一小節(jié),大家可以查看一下。

當(dāng)然也為懶人復(fù)制了一遍我當(dāng)時(shí)的解釋(看過(guò)的可以跳過(guò)這一小節(jié)了)。

字典樹(shù),又稱前綴樹(shù)或 trie 樹(shù),是一種有序樹(shù),用于保存關(guān)聯(lián)數(shù)組,其中的鍵通常是字符串。與二叉查找樹(shù)不同,鍵不是直接保存在節(jié)點(diǎn)中,而是由節(jié)點(diǎn)在樹(shù)中的位置決定。一個(gè)節(jié)點(diǎn)的所有子孫都有相同的前綴,也就是這個(gè)節(jié)點(diǎn)對(duì)應(yīng)的字符串,而根節(jié)點(diǎn)對(duì)應(yīng)空字符串。

我們可以類比字典的特性:我們?cè)谧值淅锿ㄟ^(guò)拼音查找晃(huang)這個(gè)字的時(shí)候,我們會(huì)發(fā)現(xiàn)它的附近都是讀音為huang的,可能是聲調(diào)有區(qū)別,再往前翻,我們會(huì)看到讀音前綴為huan的字,再往前,是讀音前綴為hua的字... 取它們的讀音前綴分別為 h qu hua huan huang。我們?cè)诓檎視r(shí),根據(jù) abc...xyz 的順序找到h前綴的部分,再根據(jù) ha he hu找到 hu 前綴的部分...最后找到 huang,我們會(huì)發(fā)現(xiàn),越往后其讀音前綴越長(zhǎng),查找也越精確,這種類似于字典的樹(shù)結(jié)構(gòu)就是字典樹(shù),也是前綴樹(shù)。

設(shè)計(jì)

那么 trie 樹(shù)怎么實(shí)現(xiàn)關(guān)鍵字的匹配呢? 這里以一幅圖來(lái)講解 trie 樹(shù)匹配的過(guò)程。

詳解PHP優(yōu)化巨量關(guān)鍵詞的匹配

其中要點(diǎn):

構(gòu)造trie樹(shù)

將關(guān)鍵詞用上面介紹的preg_split()函數(shù)拆分為單個(gè)字符。如科學(xué)家就拆分為科、學(xué)、家三個(gè)字符。在最后一個(gè)字符后添加一個(gè)特殊字符 `,此字符作為一個(gè)關(guān)鍵詞的結(jié)尾(圖中的粉紅三角),以此字符來(lái)標(biāo)識(shí)查到了一個(gè)關(guān)鍵詞(不然,我們不知道匹配到科、學(xué)兩個(gè)字符時(shí)算不算匹配成功)。檢查根部是否有第一個(gè)字符(科)節(jié)點(diǎn),如果有了此節(jié)點(diǎn),到步驟4。 如果還沒(méi)有,在根部添加值為科的節(jié)點(diǎn)。依次檢查并添加學(xué)、家 兩個(gè)節(jié)點(diǎn)。在結(jié)尾添加`節(jié)點(diǎn),并繼續(xù)下一個(gè)關(guān)鍵詞的插入。

匹配

然后我們以 這位科學(xué)家很了不起!為例來(lái)發(fā)起匹配。

首先我們將句子拆分為單個(gè)字符 這、位、...; 從根查詢第一個(gè)字符這,并沒(méi)有以這個(gè)字符開(kāi)頭的關(guān)鍵詞,將字符“指針”向后移,直到找到根下有的字符節(jié)點(diǎn)科; 接著在節(jié)點(diǎn)科下尋找值為 學(xué)節(jié)點(diǎn),找到時(shí),結(jié)果子樹(shù)的深度已經(jīng)到了2,關(guān)鍵詞的最短長(zhǎng)度是2,此時(shí)需要在學(xué)結(jié)點(diǎn)下查找是否有`,找到意味著匹配成功,返回關(guān)鍵詞,并將字符“指針”后移,如果找不到則繼續(xù)在此結(jié)點(diǎn)下尋找下一個(gè)字符。 如此遍歷,直到最后,返回所有匹配結(jié)果。代碼

完整代碼我已經(jīng)放到了GitHub上:Trie-GitHub-zhenbianshu,這里放上核心。

首先是數(shù)據(jù)結(jié)構(gòu)樹(shù)結(jié)點(diǎn)的設(shè)計(jì),當(dāng)然它也是重中之重:

$node = array( ’depth’ => $depth, // 深度,用以判斷已命中的字?jǐn)?shù) ’next’ => array($val => $node, // 這里借用php數(shù)組的哈希底層實(shí)現(xiàn),加速子結(jié)點(diǎn)的查找... ),);

然后是樹(shù)構(gòu)建時(shí)子結(jié)點(diǎn)的插入:

// 這里要往節(jié)點(diǎn)內(nèi)插入子節(jié)點(diǎn),所以將它以引用方式傳入private function insert(&$node, $words) { if (empty($words)) { return;}$word = array_shift($words);// 如果子結(jié)點(diǎn)已存在,向子結(jié)點(diǎn)內(nèi)繼續(xù)插入if (isset($node[’next’][$word])) { $this->insert($node[’next’][$word], $words);} else { // 子結(jié)點(diǎn)不存在時(shí),構(gòu)造子結(jié)點(diǎn)插入結(jié)果 $tmp_node = array(’depth’ => $node[’depth’] + 1,’next’ => array(), ); $node[’next’][$word] = $tmp_node; $this->insert($node[’next’][$word], $words);} }

最后是查詢時(shí)的操作:

// 這里也可以使用一個(gè)全局變量來(lái)存儲(chǔ)已匹配到的字符,以替換$matchedprivate function query($node, $words, &$matched) {$word = array_shift($words);if (isset($node[’next’][$word])) { // 如果存在對(duì)應(yīng)子結(jié)點(diǎn),將它放到結(jié)果集里 array_push($matched, $word); // 深度到達(dá)最短關(guān)鍵詞時(shí),即可判斷是否到詞尾了 if ($node[’next’] > 1 && isset($node[’next’][$word][’next’][’`’])) {return true; } return $this->query($node[’next’][$word], $words, $matched);} else { $matched = array(); return false;} }結(jié)果

結(jié)果當(dāng)然是喜人的,如此匹配,處理一千條數(shù)據(jù)只需要3秒左右。找了 Java 的同事試了下,Java 處理一千條數(shù)據(jù)只需要1秒。

這里來(lái)分析一下為什么這種方法這么快:

正則匹配:要用所有的關(guān)鍵詞去信息里匹配匹配次數(shù)是 key_len * msg_len,當(dāng)然正則會(huì)進(jìn)行優(yōu)化,但基礎(chǔ)這樣,再優(yōu)化效率可想而知。 而 trie 樹(shù)效率最差的時(shí)候是 msg_len * 9(最長(zhǎng)關(guān)鍵詞長(zhǎng)度 + 1個(gè)特殊字符)次 hash 查找,即最長(zhǎng)關(guān)鍵詞類似 AAA,信息內(nèi)容為 AAA...時(shí),而這種情況的概率可想而知。

至此方法的優(yōu)化到此結(jié)束,從每秒鐘匹配 10 個(gè),到 300 個(gè),30 倍的性能提升還是巨大的。

終級(jí),卻不一定是終極

他徑 - 多進(jìn)程設(shè)計(jì)

匹配方法的優(yōu)化結(jié)束了,開(kāi)頭說(shuō)的優(yōu)化到十分鐘以內(nèi)的目標(biāo)還沒(méi)有實(shí)現(xiàn),這時(shí)候就要考慮一些其他方法了。

我們一提到高效,必然想到的是 并發(fā),那么接下來(lái)的優(yōu)化就要從并發(fā)說(shuō)起。PHP 是單線程的(雖然也有不好用的多線程擴(kuò)展),這沒(méi)啥好的解決辦法,并發(fā)方向只好從多進(jìn)程進(jìn)行了。

那么一個(gè)日志文件,用多個(gè)進(jìn)程怎么讀呢?這里當(dāng)然也提供幾個(gè)方案:

進(jìn)程內(nèi)添加日志行數(shù)計(jì)數(shù)器,各個(gè)進(jìn)程支持傳入?yún)?shù) n,進(jìn)程只處理第 行數(shù) % n = n 的日志,這種 hack 的反向分布式我已經(jīng)用得很熟練了,哈哈。

這種方法需要進(jìn)程傳參數(shù),還需要每個(gè)進(jìn)程都分配讀取整個(gè)日志的的內(nèi)存,而且也不夠優(yōu)雅。

使用 linux 的 split -l n file.log output_pre 命令,將文件分割為每份為 n 行的文件,然后用多個(gè)進(jìn)程去讀取多個(gè)文件。

此方法的缺點(diǎn)就是不靈活,想換一下進(jìn)程數(shù)時(shí)需要重新切分文件。

使用 Redis 的 list 隊(duì)列臨時(shí)存儲(chǔ)日志,開(kāi)啟多個(gè)進(jìn)程消費(fèi)隊(duì)列。

此方法需要另外向 Redis 內(nèi)寫(xiě)入數(shù)據(jù),多了一個(gè)步驟,但它擴(kuò)展靈活,而且代碼簡(jiǎn)單優(yōu)雅。

最終使用了第三種方式來(lái)進(jìn)行。

結(jié)果

這種方式雖然也會(huì)有瓶頸,最后應(yīng)該會(huì)落在 Redis 的網(wǎng)絡(luò) IO 上。我也沒(méi)有閑心開(kāi) n 個(gè)進(jìn)程去挑戰(zhàn)公司 Redis 的性能,運(yùn)行 10 個(gè)進(jìn)程三四分鐘就完成了統(tǒng)計(jì)。即使再加上 Redis 寫(xiě)入的耗時(shí),10分鐘以內(nèi)也妥妥的。

一開(kāi)始產(chǎn)品對(duì)匹配速度已經(jīng)有了小時(shí)級(jí)的定位了,當(dāng)我 10 分鐘就拿出了新的日志匹配結(jié)果,看到產(chǎn)品驚訝的表情,心里也是略爽的,哈哈~

他徑,也能幫你走得更遠(yuǎn)

總結(jié)

解決問(wèn)題的方法有很多種,我認(rèn)為在解決各種問(wèn)題之前,要了解很多種知識(shí),即使只知道它的作用。就像一個(gè)工具架,你要先把工具盡量擺得多,才能在遇到問(wèn)題時(shí)選取一個(gè)最合適的。接著當(dāng)然要把這些工具用是純熟了,這樣才能使用它們?nèi)ソ鉀Q一些怪異問(wèn)題。

工欲善其事,必先利其器,要想解決性能問(wèn)題,掌握系統(tǒng)級(jí)的方法還略顯不夠,有時(shí)候換一種數(shù)據(jù)結(jié)構(gòu)或算法,效果可能會(huì)更好。感覺(jué)自己在這方面還略顯薄弱,慢慢加強(qiáng)吧,各位也共勉。

以上就是詳解PHP優(yōu)化巨量關(guān)鍵詞的匹配的詳細(xì)內(nèi)容,更多關(guān)于PHP優(yōu)化巨量關(guān)鍵詞的匹配的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 99精品国产高清一区二区麻豆 | 亚洲网站免费 | 日韩中文字幕在线视频 | 国产日韩精品一区 | 久久成人国产精品 | 亚洲久草在线 | 精品九九九 | 亚洲欧美一级 | 国产深夜视频在线观看 | 久久久久久99| 在线观看视频一区 | 亚洲成人一区二区三区 | 国产成人精品一区二区在线 | 欧美理伦片在线播放 | 久久欧美高清二区三区 | av在线免费播放 | 亚洲一区二区三区免费 | 欧美日韩亚洲国产综合 | 日韩在线精品 | 欧美精品成人 | 久久www免费人成看片高清 | 一级片在线播放 | av免费在线观看网站 | 国产男女免费视频 | 精品二区视频 | 免费观看电视在线高清视频 | 国产成人综合一区 | 日韩国产欧美精品 | 日产久久 | 日韩一区二区在线观看 | av黄色在线免费观看 | 91精品入口蜜桃 | av不卡在线播放 | 伊人免费在线观看高清版 | 欧美日韩一区二区三区四区 | 国产大学生援交视频在线观看 | 欧美日韩第一 | 亚洲视频在线免费观看 | 亚洲成人免费在线 | 在线亚洲一区 | 伊人电影综合 | 羞羞视频在线免费观看 | 日韩久久在线 | 精品视频久久久 | 国产99久久精品一区二区永久免费 | 午夜精品一区二区三区免费视频 | 日本一区二区在线视频 | 成人在线| 99久久婷婷国产精品综合 | 国产精品亚洲一区二区三区在线 | 日韩免费精品 | 国产精品久久精品 | 国产精品国产精品国产专区不片 | 成人免费crm一区二区 | 日韩电影a | 久久久久9999国产精品 | 欧美a区 | 欧美成a | av三级在线观看 | 国产一区二区日韩 | 国产精品日韩欧美 | 黄视频入口 | 亚洲精品一区二三区 | 蜜桃av一区二区三区 | 91免费在线播放 | 干干干操操操 | 国产精品美女在线观看 | 精品国产乱码久久久久久1区2区 | 亚洲成人一区 | 国产精品18久久久久久首页狼 | 狠狠操操| 麻豆一区| 97国产超碰 | www.欧美| 精久久久 | 国产a级毛片 | a久久| 国产九九精品视频 | 色综合社区 | 国产精品禁久久精品 | 成人在线免费观看 | 日韩午夜影院 | 国产淫片在线观看 | 国产成人欧美一区二区三区的 | 国产午夜小视频 | 奇米精品一区二区三区在线观看 | 亚洲精品一区二区三区蜜桃久 | 欧美电影一区 | 亚洲一区中文 | 亚洲网站免费观看 | 国产午夜精品一区二区 | 福利久久| 日韩精品免费视频 | 久久久999精品视频 五月天婷婷在线视频 | 色综合天天天天做夜夜夜夜做 | 国产精品久久久久久久久污网站 | 91豆花视频 | 欧美日韩精品一区二区三区在线观看 | 欧美综合久久 | 中文字幕国产区 | 六月婷婷综合 | 成人欧美一区二区三区在线观看 | 精品一区免费 | 亚洲精品自拍 | 成年人网站在线免费观看 | 女人夜夜春| 亚洲精品日韩在线 | 亚洲网站在线观看 | 久久国产精品视频 | 欧美激情伊人 | 在线欧美日韩 | 亚洲精品一区二区网址 | 欧美二区在线观看 | 一区二区三区日韩精品 | 午夜视频精品 | 一级毛片免费完整视频 | 欧美一区二区在线 | 成人影音 | 91精品麻豆日日躁夜夜躁 | 日韩精品在线视频观看 | 高清一区二区三区 | 99在线精品视频 | 亚洲精品视频在线 | 人人干人人干人人干 | 欧美精品免费在线观看 | 欧美一区二区三区视频在线观看 | 久久久久国产一区二区三区 | 99精品视频免费 | 欧美日韩一区电影 | 成人亚洲视频 | 876av国产精品电影 | 国产精品久久久久久吹潮 | 国产亚洲一区二区三区在线 | 在线一区视频 | 亚洲一区二区三区高清 | 五月激情综合网 | 一级一级毛片 | 国产欧美日韩综合精品一区二区 | 日日操日日操 | 黄色av网站在线免费观看 | 免费国产在线视频 | 日本中文字幕在线播放 | 青青草国产成人av片免费 | 久久久久久免费精品 | 亚洲成人精品在线观看 | 久久夜夜 | 欧美黄色一级毛片 | 国产精品久久久久久久久久大牛 | julia中文字幕久久一区二区 | 精品久久久久久久久久久久久久 | 久久在线视频 | 国产综合精品一区二区三区 | 精品人成 | 国产成人一区二区三区 | 精品国产青草久久久久福利 | 欧美一级片免费在线观看 | 中文字幕在线视频观看 | 91精品国产91久久久久久黑人 | 99re6在线视频精品免费 | 亚洲精品视频免费 | 久久成人国产精品 | 国产香蕉97碰碰久久人人九色 | 精品久久久久久久久久久久久久 | 三区在线观看 | a级在线观看免费 | 最新中文字幕视频 | 米奇成人网 | 欧洲成人在线 | 国产精品国产精品国产专区不片 | 伊人精品在线 | 日韩在线视频观看 | 日韩素人在线 | 一区二区在线不卡 | 国产黄色大片 | 岛国精品 | 中文字幕在线免费 | 日本一区二区三区四区 | 中文字幕在线观看av | 99久久视频 | 国产精品免费观看 | 伊人久麻豆社区 | 操久在线| 国产成人精品午夜 | 色视频网站在线观看一=区 日韩一二三区 | 欧美日韩一区在线观看 | 青娱乐网| 日韩精品 | 欧美日本一区 | 91精品久久久久久久久入口 | 国外成人在线视频网站 | 欧美日韩精品久久久 | 久一区二区三区 | 日本一区二区高清视频 | 亚洲精品视 | 在线观看中文 | 韩日在线视频 | 国产在线中文字幕 | 一色视频 | 久久久免费视频看看 | 日韩一区精品 | 国产九九精品视频 | 精品乱子伦一区二区三区 | 国产亚洲精品美女久久久久久久久久 | 色视频久久 | 国产日韩精品视频 | 国产传媒在线视频 | www婷婷av久久久影片 | 欧美日韩中文在线观看 | 成人在线h | 欧美一级性 | 日日干夜夜操 | 久久精品免费观看 | 日韩精品免费观看 | 日韩另类 | 亚洲免费视频网 | 亚洲一区二区在线看 | 在线视频二区 | 一区二区亚洲 | 一区二区观看 | 欧美 日韩 国产 一区 | 亚洲欧美自拍视频 | 毛片特级| 一区二区国产精品 | 国产伦精品久久久一区二区三区 | 国产欧美日韩综合精品一区二区 | 日操 | 日韩电影中文字幕 | 欧美日韩高清不卡 | 91免费观看国产 | 久久九 | 欧洲毛片 | 日本久久久一区二区三区 | 日韩天堂 | 国产精品国产三级国产aⅴ 精品91 | 久久久久久久久久久久国产精品 | 淫片一级国产 | 亚洲精选久久 | 国产精品久久久久久久久免费桃花 | 日日夜夜精品网站 | 亚洲成人三级 | 午夜播影院 | 国产精品久久久久久久久岛 | 99久久免费视频在线观看 | 日韩欧美在线观看视频 | 五月婷综合 | 一级免费黄视频 | 欧美黑人一级爽快片淫片高清 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 精品天堂 | 九色在线视频 | 91社区在线播放 | 人人玩人人干 | 欧美日韩三区 | 天天干天天操 | 精精国产xxxx视频在线 | 欧美国产精品 | 不卡视频一区 | 日韩精品在线播放 | 久久精品亚洲精品 | cao视频| 欧美精品在线视频 | 一区二区三区四区不卡视频 | 97精品在线 | 91精品国产一区二区 | 国产一区二区精品 | av久久 | 毛片久久久 | 免费成人av网 | 亚洲精品一区在线观看 | 黄色网亚洲 | 国产精品一区二区在线观看 | 国产精品三级久久久久久电影 | 日韩精品免费看 | 日韩精品视频免费在线观看 | 蜜月久综合久久综合国产 | 亚洲欧洲日本国产 | 中文字幕一区二区三区免费视频 | 亚洲国产一区二区在线 | 久久国产精品久久久久久 | 亚洲一区二区免费 | 一区国产精品 | 久久777 | 久久久久久久香蕉 | 国产一级一级特黄女人精品毛片 | 色视频www在线播放国产人成 | 久久综合九色综合欧美狠狠 | 亚洲美女网站 | 亚洲男人天堂网 | 美日韩一区二区三区 | 日韩欧美一区二区在线观看 | 亚洲欧洲一区二区 | 91精品国产日韩91久久久久久 | 国产三级在线免费观看 | 在线一区二区三区 | 奇米影视77| 97久久久 | 免费成人小视频 | 天天久 | 奇米色777欧美一区二区 | 久久久久久亚洲 | 欧美free性 | 先锋资源中文字幕 | 国产天天操 | 免费一级黄色电影 | 国产福利在线视频 | 国产欧美精品区一区二区三区 | 国产特一级黄色片 | 91精品久久久久久久久久入口 | 久久久成人精品 | 成人免费视频一区二区 | 亚洲精品3区 | 欧美日韩综合 | 成人免费一区二区三区 | 一区二区三区四区 | 国产精品视频一二三区 | 欧美在线播放一区 | 久久青青视频 | 成人a在线视频 | 欧美aaaaa | 高清日韩av | 日韩免费一区 | 台湾av片 | 国产一区国产二区在线观看 | 一区视频在线 | 91中文字幕在线观看 | 激情久久久久 | 亚洲精品视频在线观看免费 | 人人澡人人草 | 国产中文在线 | 久久免费精品视频 | 亚洲www视频 | 91大神免费观看 | 在线欧美 | 国产性一级片 | 中文字字幕在线 | 中文字幕在线观看 | 日韩在线观看中文字幕 | 久久大陆 | 国产精品日韩欧美一区二区三区 | 亚洲精品一区二区三区蜜桃久 | 福利视频网址导航 | 97色在线视频 | 成人免费一区二区三区视频网站 | 国产成人影院 | 国产视频中文字幕 | 国产www精品 | 亚洲在线免费观看 | 东北一级毛片 | 日本在线免费 | 欧美一级黄色片免费看 | 久久国产精品亚洲 | 成人精品久久久 | 欧美日韩视频第一页 | 亚洲一区影院 | 五月激情站 | 在线观看国产一级片 | 国产成人一区 | 久久一区二区三区四区 | 国产免费av一区二区三区 | 亚洲精品欧美 | 国产一区二区三区网站 | 人人爱夜夜爽日日视频 | 日韩精品视频网 | 91p在线观看| 国产日韩视频在线观看 | 欧美黄视频在线观看 | 精品一区二区三区免费毛片 | 人人草人人干 | 国产精品久久久精品 | 久久国产精品免费一区二区三区 | 亚洲视频中文字幕 | 成人a毛片 | 久草青青 | 盗摄精品av一区二区三区 | 一区二区三区在线播放视频 | 亚洲中午字幕 | 波多野结衣中文字幕在线视频 | 夜夜天天操 | 欧美成人一区二区三区片免费 | 精品国产三级 | 在线国产一区二区 | 性人久久久 | 亚洲乱码一区二区三区在线观看 | 亚洲黄色一区二区 | 成人在线视频一区 | 日韩专区中文字幕 | 国产成人免费网站 | 欧美成人h版在线观看 | 亚洲精品九九 | 成人欧美一区二区三区在线观看 | 欧美乱码久久久久久蜜桃 | 亚洲视频中文字幕 | 久久久久国产一区二区三区 | 国产一区二区精品在线 | 久久综合一区二区三区 | 欧美一区二区在线观看 | 欧美xxxx片| 欧美在线视频不卡 | 国产精品视频 | 91在线观看免费 | 精品一区二区久久久久久久网站 | 欧美中文字幕在线观看 | 簧片毛片 | 亚洲美女视频 | 国产视频精品一区二区三区 | 日本在线视 | 亚洲精品久久久久久一区二区 | 亚洲国产视频一区 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 亚洲国产欧美在线 | 亚洲国内精品 | 九九热最新地址 | 蜜月久综合久久综合国产 | 色婷婷精品国产一区二区三区 | 九九热精| 亚洲精品一区二三区不卡 | 日韩素人在线 | 在线观看国产视频 | 国产精品久久精品 | 美女久久 | 国产精品久久久久久一区二区三区 | 国产综合精品 | 无毒黄网 | 亚洲精品国偷拍自产在线观看 | 久久久夜夜夜 | 国产伦精品一区二区 | 亚洲精品国产setv | 日本在线免费看 | 亚洲二区视频 | 日本久久www成人免 成人久久久久 | 欧美日本国产一区 | 老熟女毛片 | 成人av综合 | 99精品视频免费 | 最新国产成人 | 91亚洲日本aⅴ精品一区二区 | 99re国产精品视频 | 久久av综合网 | 国产精品网站在线观看 | 欧美国产激情 | 男女国产网站 | 免费看的毛片 | 成人在线小视频 | 91色乱码一区二区三区 | 一级做a爰性色毛片免费1 | 三a毛片 | 日本99精品 | 午夜私人视频 | 国产区视频在线观看 | 国产伦精品一区二区三区照片91 | 中文精品在线 | 在线观看亚洲专区 | 欧美日韩激情一区二区三区 | 国产精品久久久久久久9999 | 精品一区二区三区在线观看 | 精品色区| 成人免费网站在线观看 | 欧美亚洲综合久久 | 亚洲高清免费视频 | 日韩久久精品一区二区 | 久久久久久国产精品美女 | 国产区日韩区欧美区 | av中文字幕在线观看 | 国内精品视频一区二区三区 | 亚洲精品一区二区网址 | 日韩精品一区二区三区中文字幕 | 久久精品欧美 | 爱爱网址 | 色优久久 | 国产一区二区久久久 | 亚洲一区二区三区免费 | 91久久91久久精品免观看 | 日日干天天干 | 欧美一区二区三区在线视频 | 天天操天天草 | 午夜夜 | 久久中文字幕一区 | 91在线精品一区二区 | 欧美性一区二区三区 | 91午夜精品一区二区三区 | 亚洲一级黄色 | 国产福利91精品一区二区 | 亚洲xx视频 | www.中文字幕.com| 精品福利在线视频 | 在线免费中文字幕 | 亚洲一区二区三区四区在线 | 91中文在线| 成人精品 | 欧美视频在线观看不卡 | 日韩精品一区二区三区 | 日日操夜夜操天天操 | 在线视频日韩 | 日韩视频在线一区 | 青春草在线观看 | 国产乱xxxxx97国语对白 | 亚洲一区二区三区免费视频 | 国产精品国产精品国产专区不片 | 97国产一区二区精品久久呦 | 啊v在线视频 | 欧美激情一区二区三区在线观看 | 久久亚洲国产精品 | 黄色成人av | 日韩成人片 | 久久久久久久久成人 | www日批| 久久久久亚洲一区二区三区 | 亚洲视频在线免费观看 | 国产色婷婷 | 亚洲自拍在线观看 | 影音先锋中文字幕在线 | 一区二区三区视频在线播放 | 国产免费观看一区二区三区 | 在线播放国产一区二区三区 | 国产精品久久久久久亚洲调教 | 久草在线视频免费播放 | 一区二区三区久久 | 久草毛片 | 国产高清在线观看 | 特a级片| 国产精品欧美一区二区三区 | 亚洲最色视频 | 欧洲精品视频在线观看 | 国产h在线| 成人99| 一区二区色 | 国产欧精精久久久久久久 | 欧美精品欧美精品系列 | 国产精品久久久久久久一区探花 | 欧美一级二级视频 | 欧美黄色一区 | 欧美性猛片 | 91视频在线 | 久久久中文字幕 | 日本黄色一级电影 | 欧美精品在线观看 | 精品国产91乱码一区二区三区 | 亚洲三级在线看 | 国产成人毛片 | 亚洲成人在线视频播放 | 久草热8精品视频在线观看 黄色片网站视频 | 精品国产99 | 视频在线一区二区三区 | 成人在线观看免费视频 | 国产精品久久久久久久久免费丝袜 | 亚洲欧美日韩一区 | 激情久久久久 | 久久久99精品免费观看 | 福利精品视频 | 天堂在线中文 | 国产电影一区二区 | 久久亚洲精品综合 | 国产激情精品一区二区三区 | 日韩美一级 | 亚洲第一天堂无码专区 | 久久久香蕉 | 三级视频在线 | 国产免费久久 | 免费看性生交大片 | 丰满少妇久久久久久久 | 午夜影院久久 | 国产精品久久 | 日韩成人免费视频 | 99国产精品99久久久久久 | 中文字幕一区二区三区在线视频 | 欧美在线播放一区二区三区 | 亚洲系列| 久久久精品综合 | 爱色av| 韩国精品一区二区 | 婷婷色国产偷v国产偷v小说 | 亚洲国产一区在线 | 黄色电影在线免费观看 | 国产精品视频一区二区三区四蜜臂 | 欧美成人伊人 | 久久精品久久久久电影 | 99热激情| 伊人草 | 精国产品一区二区三区四季综 | 99爱在线观看 | aaaaaa黄色片 | 久久国产欧美一区二区三区精品 | 99久久精品免费 | 精品国产一区二区三区小蝌蚪 | 国产精品久久久久一区二区三区 | 欧美 日韩 国产 一区 | 一区二区免费视频 | 成人免费crm一区二区 | 国产成人免费在线观看 | 欧美激情 | 亚洲精品国产剧情久久9191 | 噜噜噜在线 | 国产无套丰满白嫩对白 | 无码少妇一区二区三区 | 欧洲成人一区 | 欧美一级网站 | 中文字幕av一区二区 | 欧美激情国产日韩精品一区18 | 啪啪免费网站 | 午夜激情免费在线观看 | 久久精品欧美一区二区三区麻豆 | 日韩午夜在线 | 欧美在线激情 | 国产精品永久免费自在线观看 | 亚洲每日更新 | 国产一区二区在线电影 | 欧美第一视频 | 日韩精品一区二区三区中文在线 | 久久精品国产亚洲一区二区三区 | 亚洲一区二区三区四区五区中文 | 久久成人av | www.99热这里只有精品 | 欧美日韩精品一区二区三区 | 国产激情精品一区二区三区 | 91麻豆产精品久久久久久 |