這篇文章給大家分享的是有關(guān)Elasticsearch 500萬索引批量存儲php的示例分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
成都創(chuàng)新互聯(lián)長期為上千多家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為華安企業(yè)提供專業(yè)的網(wǎng)站設(shè)計、成都做網(wǎng)站,華安網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
dict.txt.cache.json, pinyin.php 云盤下載地址:
http://pan.baidu.com/s/1c1W6fQC
單條索引生成,速度較慢 elastic.php
build(); $dict = array_map(function($str){ return str_ireplace('.', '', $str);}, array_keys(json_decode(file_get_contents('./dict.txt.cache.json'), true) ) ); $a = 1; do { $params = [ 'index' => 'my_index', 'type' => 'my_type', 'id' => $a, 'body' => [ 'user_id' => mt_rand(100000000, 2000000000).'@qq.com', 'name' => $tmpname = $dict[mt_rand(1000,360000)], 'py' => \Utils\Pinyin::conv($tmpname), 'phone' => array_rand(array_flip([13,15,17,18])) . mt_rand(100000000, 999999999), 'mail' => substr( str_shuffle( "0123456789abcdefghijklmnopqrstuvwxyz"), 0, mt_rand(5,20) ) . '@' . array_rand( array_flip( [ '163.com', '126.com', 'yeah.net', 'qq.com', 'foxmail.com', 'gmail.com', 'yahoo.com', 'hotmail.com', 'sina.com', 'sina.cn', 'sina.com.cn' ] ) ), 'appoint' => implode( '-', array_map(function() use($dict) { return $dict[mt_rand(1000,360000)] . (mt_rand(0,100) > 60 ? $dict[mt_rand(1000,360000)] : '') . (mt_rand(0,100) > 80 ? $dict[mt_rand(1000,360000)] : '');}, array_pad([], mt_rand(2,5), '') ) ), ] ]; //創(chuàng)建索引 $response = $client->index($params); $a = isset($a) ? ++$a : 1; $a % 50 === 0 ? print(($b = isset($b) ? ++$b : 1).'%'.PHP_EOL) : ''; } while ($a <= 5000); $end = "結(jié)束時間:" . time() . PHP_EOL; echo $end; echo "耗時:" . ($end - $start);
批量索引生成 elasticBulk.php
setRetries(10)//重試次數(shù),默認(rèn)重試次數(shù)為集群節(jié)點數(shù) ->setConnectionPool($connectionPool) ->setSelector($selector) ->build(); $dict = array_map(function($str){ return str_ireplace('.', '', $str);}, array_keys(json_decode(file_get_contents('./dict.txt.cache.json'), true) ) ); echo $start = "開始時間:" . time() . PHP_EOL; createData($client, $dict); echo $end = "結(jié)束時間:" . time() . PHP_EOL; echo "耗時:" . $end - $start; function createData($client, $dict){ $bulk = array('index'=>'my_index4','type'=>'my_type4'); //bulk批量生成 for($j = 0;$j <= 99; $j++) { for($i = $j * 50000 + 1; $i <= $j * 50000 + 50000; $i ++) { $bulk['body'][]=array( 'index' => array( '_id'=>$i ), 'type' => 'blocking' ); $bulk['body'][] = [ 'user_id' => mt_rand(100000000, 2000000000).'@qq.com', 'name' => $tmpname = $dict[mt_rand(1000,360000)], 'py' => \Utils\Pinyin::conv($tmpname), 'phone' => array_rand(array_flip([13,15,17,18])) . mt_rand(100000000, 999999999), 'mail' => substr( str_shuffle( "0123456789abcdefghijklmnopqrstuvwxyz"), 0, mt_rand(5,20) ) . '@' . array_rand( array_flip( [ '163.com', '126.com', 'yeah.net', 'qq.com', 'foxmail.com', 'gmail.com', 'yahoo.com', 'hotmail.com', 'sina.com', 'sina.cn', 'sina.com.cn' ] ) ), 'appoint' => implode( '-', array_map(function() use($dict) { return $dict[mt_rand(1000,360000)] . (mt_rand(0,100) > 60 ? $dict[mt_rand(1000,360000)] : '') . (mt_rand(0,100) > 80 ? $dict[mt_rand(1000,360000)] : '');}, array_pad([], mt_rand(2,5), '') ) ), ]; } $client->bulk($bulk); //進度統(tǒng)計 print($j + 1).'%'.PHP_EOL; } }
1.單條性能約100條/s , 批量性能約5000條/s
2.單節(jié)點批量處理一次性bulk數(shù)據(jù)上限35萬,否則報錯:PHP Fatal error: Uncaught exception 'Elasticsearch\Common\Exceptions\NoNodesAvailableException' with message 'No alive nodes found in your cluster
3. 500萬全真模擬數(shù)據(jù)占空間2G
4.查詢性能:
第一次稍慢,但在1秒以內(nèi)
第二次極速
感謝各位的閱讀!關(guān)于“Elasticsearch 500萬索引批量存儲php的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!