diff options
author | Pierre Schmitz <pierre@archlinux.de> | 2015-12-18 06:00:00 +0100 |
---|---|---|
committer | Pierre Schmitz <pierre@archlinux.de> | 2015-12-18 06:00:00 +0100 |
commit | 15e69f7b20b6596b9148030acce5b59993b95a45 (patch) | |
tree | 7b828b8920b0e222dc2a2c97dde933c9c4864fab /vendor/ruflin/elastica/test/benchmark/TransportTest.php | |
parent | 9e06a62f265e3a2aaabecc598d4bc617e06fa32d (diff) |
Update to MediaWiki 1.25.4
Diffstat (limited to 'vendor/ruflin/elastica/test/benchmark/TransportTest.php')
-rw-r--r-- | vendor/ruflin/elastica/test/benchmark/TransportTest.php | 252 |
1 files changed, 252 insertions, 0 deletions
diff --git a/vendor/ruflin/elastica/test/benchmark/TransportTest.php b/vendor/ruflin/elastica/test/benchmark/TransportTest.php new file mode 100644 index 00000000..42d6ac0c --- /dev/null +++ b/vendor/ruflin/elastica/test/benchmark/TransportTest.php @@ -0,0 +1,252 @@ +<?php + +use Elastica\Client; +use Elastica\Request; +use Elastica\Document; +use Elastica\Query; +use Elastica\Type\Mapping; +use Elastica\Query\MatchAll as MatchAllQuery; +use Elastica\Filter\Term as TermFilter; + +class TransportTest extends \PHPUnit_Framework_TestCase +{ + protected $_max = 1000; + + protected $_maxData = 20; + + static protected $_results = array(); + + public static function setUpBeforeClass() + { + if (!defined('DEBUG')) { + define('DEBUG', true); + } else if (false == DEBUG) { + self::markTestIncomplete('DEBUG const is set to false, it prevents query time measuring.'); + } + } + + public static function tearDownAfterClass() + { + self::printResults(); + } + + /** + * @param array $config + * @return \Elastica\Type + */ + protected function getType(array $config) + { + $client = new Client($config); + $index = $client->getIndex('test'); + return $index->getType('test'); + } + + /** + * @dataProvider providerTransport + */ + public function testAddDocument(array $config, $transport) + { + $type = $this->getType($config); + $index = $type->getIndex(); + $index->create(array(), true); + + $times = array(); + for ($i = 0; $i < $this->_max; $i++) { + $data = $this->getData($i); + $doc = new Document($i, $data); + $result = $type->addDocument($doc); + $times[] = $result->getQueryTime(); + $this->assertTrue($result->isOk()); + } + + $index->refresh(); + + self::logResults('insert', $transport, $times); + } + + /** + * @depends testAddDocument + * @dataProvider providerTransport + */ + public function testRandomRead(array $config, $transport) + { + $type = $this->getType($config); + + $type->search('test'); + + $times = array(); + for ($i = 0; $i < $this->_max; $i++) { + $test = rand(1, $this->_max); + $query = new Query(); + $query->setQuery(new MatchAllQuery()); + $query->setFilter(new TermFilter(array('test' => $test))); + $result = $type->search($query); + $times[] = $result->getResponse()->getQueryTime(); + } + + self::logResults('random read', $transport, $times); + } + + /** + * @depends testAddDocument + * @dataProvider providerTransport + */ + public function testBulk(array $config, $transport) + { + $type = $this->getType($config); + + $times = array(); + for ($i = 0; $i < $this->_max; $i++) { + $docs = array(); + for ($j = 0; $j < 10; $j++) { + $data = $this->getData($i . $j); + $docs[] = new Document($i, $data); + } + + $result = $type->addDocuments($docs); + $times[] = $result->getQueryTime(); + } + + self::logResults('bulk', $transport, $times); + } + + /** + * @dataProvider providerTransport + */ + public function testGetMapping(array $config, $transport) + { + $client = new Client($config); + $index = $client->getIndex('test'); + $index->create(array(), true); + $type = $index->getType('mappingTest'); + + // Define mapping + $mapping = new Mapping(); + $mapping->setParam('_boost', array('name' => '_boost', 'null_value' => 1.0)); + $mapping->setProperties(array( + 'id' => array('type' => 'integer', 'include_in_all' => FALSE), + 'user' => array( + 'type' => 'object', + 'properties' => array( + 'name' => array('type' => 'string', 'include_in_all' => TRUE), + 'fullName' => array('type' => 'string', 'include_in_all' => TRUE) + ), + ), + 'msg' => array('type' => 'string', 'include_in_all' => TRUE), + 'tstamp' => array('type' => 'date', 'include_in_all' => FALSE), + 'location'=> array('type' => 'geo_point', 'include_in_all' => FALSE), + '_boost' => array('type' => 'float', 'include_in_all' => FALSE) + )); + + $type->setMapping($mapping); + $index->refresh(); + + $times = array(); + for ($i = 0; $i < $this->_max; $i++) { + $response = $type->request('_mapping', Request::GET); + $times[] = $response->getQueryTime(); + } + self::logResults('get mapping', $transport, $times); + } + + public function providerTransport() + { + return array( + array( + array( + 'transport' => 'Http', + 'host' => 'localhost', + 'port' => 9200, + 'persistent' => false, + ), + 'Http:NotPersistent' + ), + array( + array( + 'transport' => 'Http', + 'host' => 'localhost', + 'port' => 9200, + 'persistent' => true, + ), + 'Http:Persistent' + ), + array( + array( + 'transport' => 'Thrift', + 'host' => 'localhost', + 'port' => 9500, + 'config' => array( + 'framedTransport' => false, + ), + ), + 'Thrift:Buffered' + ), + ); + } + + /** + * @param string $test + * @return array + */ + protected function getData($test) + { + $data = array( + 'test' => $test, + 'name' => array(), + ); + for ($i = 0; $i < $this->_maxData; $i++) { + $data['name'][] = uniqid(); + } + return $data; + } + + /** + * @param $name + * @param $transport + * @param array $times + */ + protected static function logResults($name, $transport, array $times) + { + self::$_results[$name][$transport] = array( + 'count' => count($times), + 'max' => max($times) * 1000, + 'min' => min($times) * 1000, + 'mean' => (array_sum($times) / count($times)) * 1000, + ); + } + + protected static function printResults() + { + echo sprintf( + "\n%-12s | %-20s | %-12s | %-12s | %-12s | %-12s\n\n", + 'NAME', + 'TRANSPORT', + 'COUNT', + 'MAX', + 'MIN', + 'MEAN', + '%' + ); + foreach (self::$_results as $name => $values) { + $means = array(); + foreach ($values as $times) { + $means[] = $times['mean']; + } + $minMean = min($means); + foreach ($values as $transport => $times) { + $perc = (($times['mean'] - $minMean) / $minMean) * 100; + echo sprintf( + "%-12s | %-20s | %-12d | %-12.2f | %-12.2f | %-12.2f | %+03.2f\n", + $name, + $transport, + $times['count'], + $times['max'], + $times['min'], + $times['mean'], + $perc + ); + } + echo "\n"; + } + } +} |