Skip to content

Commit bf4f3a1

Browse files
committed
add bench_mark test
1 parent eddaf21 commit bf4f3a1

File tree

7 files changed

+306
-1
lines changed

7 files changed

+306
-1
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,4 @@
3030
*.exe
3131
*.out
3232
*.app
33+
vendor

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
ClickHouse PHP client
22
=====
33

4-
PHP client for [Yandex ClickHouse](https://clickhouse.yandex/),Based on [ClickHouse C++ client](https://github.com/artpaul/clickhouse-cpp)
4+
PHP client for [Yandex ClickHouse](https://clickhouse.yandex/),Based on [ClickHouse C++ client](https://github.com/aiwhj/clickhouse-cpp)
55

66
## ClickHouse
77
* [What is ClickHouse](https://clickhouse.yandex/docs/en/)
@@ -24,6 +24,9 @@ PHP client for [Yandex ClickHouse](https://clickhouse.yandex/),Based on [Click
2424
## Supported PHP version
2525
PHP 5.5+
2626

27+
## Performance
28+
![image](https://github.com/SeasX/SeasClick/raw/master/tests/bench_mark/bench_mark.png)
29+
2730
## Install
2831
```ssh
2932
git clone https://github.com/SeasX/SeasClick.git

tests/bench_mark/bench_mark.php

Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
<?php
2+
include_once 'vendor/autoload.php';
3+
4+
// $dataCount, $seletCount, $limit
5+
// edit this array
6+
$testDataSet = [
7+
[10000, 1, 10000],
8+
[100, 500, 100],
9+
[100, 2000, 100],
10+
];
11+
12+
foreach ($testDataSet as $key => $value) {
13+
list($dataCount, $seletCount, $limit) = $value;
14+
$insertData = initData($dataCount);
15+
16+
echo "\n##### dataCount: {$dataCount}, seletCount: {$seletCount}, limit: {$limit} #####\n";
17+
18+
$t0 = $t = start_test();
19+
testPhpClickhouse($insertData, $seletCount, $limit);
20+
$t = end_test($t, "PhpClickhouse");
21+
22+
testSeasClickNonCompression($insertData, $seletCount, $limit);
23+
$t = end_test($t, "SeasClickNonCompression");
24+
25+
testSeasClickCompression($insertData, $seletCount, $limit);
26+
$t = end_test($t, "SeasClickCompression");
27+
28+
total($t0, "Total");
29+
}
30+
31+
function start_test()
32+
{
33+
return getmicrotime();
34+
}
35+
36+
function getmicrotime()
37+
{
38+
$t = gettimeofday();
39+
40+
return ($t['sec'] + $t['usec'] / 1000000);
41+
}
42+
43+
function end_test($start, $name)
44+
{
45+
global $total;
46+
$end = getmicrotime();
47+
$total += $end - $start;
48+
$num = number_format($end - $start, 3);
49+
$pad = str_repeat(" ", 60 - strlen($name) - strlen($num));
50+
51+
echo $name . $pad . $num . "\n";
52+
53+
return getmicrotime();
54+
}
55+
56+
function total()
57+
{
58+
global $total;
59+
$pad = str_repeat("-", 32);
60+
echo $pad . "\n";
61+
$num = number_format($total, 3);
62+
$pad = str_repeat(" ", 32 - strlen("Total") - strlen($num));
63+
echo "Total" . $pad . $num . "\n";
64+
}
65+
66+
function testSeasClickNonCompression($insertData, $num, $limit)
67+
{
68+
$config = [
69+
"host" => "clickhouse",
70+
"port" => "9000",
71+
"compression" => false
72+
];
73+
74+
$db = new SeasClick($config);
75+
$db->execute("CREATE DATABASE IF NOT EXISTS test");
76+
77+
$db->execute('
78+
CREATE TABLE IF NOT EXISTS test.summing_url_views (
79+
event_date Date DEFAULT toDate(event_time),
80+
event_time DateTime,
81+
site_id Int32,
82+
site_key String,
83+
views Int32,
84+
v_00 Int32,
85+
v_55 Int32
86+
)
87+
ENGINE = SummingMergeTree(event_date, (site_id, site_key, event_time, event_date), 8192)
88+
');
89+
90+
$db->insert("test.summing_url_views",
91+
['event_time', 'site_key', 'site_id', 'views', 'v_00', 'v_55'],
92+
$insertData
93+
);
94+
95+
$a = $num;
96+
while ($a--) {
97+
$db->select('SELECT * FROM test.summing_url_views LIMIT 100');
98+
}
99+
100+
$db->execute("DROP TABLE {table}", [
101+
'table' => 'test.summing_url_views'
102+
]);
103+
}
104+
105+
function testSeasClickCompression($insertData, $num, $limit)
106+
{
107+
$config = [
108+
"host" => "clickhouse",
109+
"port" => "9000",
110+
"compression" => true
111+
];
112+
113+
$db = new SeasClick($config);
114+
$db->execute("CREATE DATABASE IF NOT EXISTS test");
115+
116+
$db->execute('
117+
CREATE TABLE IF NOT EXISTS test.summing_url_views (
118+
event_date Date DEFAULT toDate(event_time),
119+
event_time DateTime,
120+
site_id Int32,
121+
site_key String,
122+
views Int32,
123+
v_00 Int32,
124+
v_55 Int32
125+
)
126+
ENGINE = SummingMergeTree(event_date, (site_id, site_key, event_time, event_date), 8192)
127+
');
128+
129+
$db->insert("test.summing_url_views",
130+
['event_time', 'site_key', 'site_id', 'views', 'v_00', 'v_55'],
131+
$insertData
132+
);
133+
134+
$a = $num;
135+
while ($a--) {
136+
$db->select('SELECT * FROM test.summing_url_views LIMIT 100');
137+
}
138+
139+
$db->execute("DROP TABLE {table}", [
140+
'table' => 'test.summing_url_views'
141+
]);
142+
}
143+
144+
function testPhpClickhouse($insertData, $num, $limit)
145+
{
146+
$config = [
147+
'host' => 'clickhouse',
148+
'port' => '8123',
149+
'username' => 'default',
150+
'password' => ''
151+
];
152+
$db = new ClickHouseDB\Client($config);
153+
$db->write("CREATE DATABASE IF NOT EXISTS test");
154+
155+
$db->database('test');
156+
$db->setTimeout(1.5); // 1500 ms
157+
$db->setTimeout(10); // 10 seconds
158+
$db->setConnectTimeOut(5); // 5 seconds
159+
160+
$db->write('
161+
CREATE TABLE IF NOT EXISTS summing_url_views (
162+
event_date Date DEFAULT toDate(event_time),
163+
event_time DateTime,
164+
site_id Int32,
165+
site_key String,
166+
views Int32,
167+
v_00 Int32,
168+
v_55 Int32
169+
)
170+
ENGINE = SummingMergeTree(event_date, (site_id, site_key, event_time, event_date), 8192)
171+
');
172+
173+
$a = 100;
174+
$insertData = [];
175+
while ($a--) {
176+
$insertData[] = [time(), 'HASH2', 2345, 12, 9, 3];
177+
}
178+
$db->insert("summing_url_views",
179+
$insertData,
180+
['event_time', 'site_key', 'site_id', 'views', 'v_00', 'v_55']
181+
);
182+
183+
$a = $num;
184+
while ($a--) {
185+
$db->select('SELECT * FROM summing_url_views LIMIT 100')->rows();
186+
}
187+
188+
$db->write('DROP TABLE IF EXISTS summing_url_views');
189+
}
190+
191+
function initData($num = 100)
192+
{
193+
$insertData = [];
194+
while ($num--) {
195+
$insertData[] = [time(), 'HASH2', 2345, 12, 9, 3];
196+
}
197+
return $insertData;
198+
}

tests/bench_mark/bench_mark.png

471 KB
Loading

tests/bench_mark/composer.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"require": {
3+
"smi2/phpclickhouse": "^1.1"
4+
}
5+
}

tests/bench_mark/composer.lock

Lines changed: 78 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/test.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,26 @@ function clientTest($config)
2727
testFloat($client, $deleteTable);
2828
testUUID($client, $deleteTable);
2929
testDate($client, $deleteTable);
30+
testMulInstance($config, $deleteTable);
31+
}
32+
33+
function testMulInstance($config, $deleteTable = false) {
34+
$client1 = new SeasClick($config);
35+
testArray($client1, $deleteTable);
36+
37+
$client2 = new SeasClick($config);
38+
testArray($client2, $deleteTable);
39+
40+
$client3 = new SeasClick($config);
41+
testArray($client3, $deleteTable);
42+
43+
$client4 = new SeasClick($config);
44+
testArray($client4, $deleteTable);
45+
46+
unset($client1);
47+
unset($client2);
48+
unset($client3);
49+
unset($client4);
3050
}
3151

3252
function testArray($client, $deleteTable = false) {

0 commit comments

Comments
 (0)