pdo — PHP и Apache Ignite — очень медленный запрос

Во-первых, извините за мой английский.

Я начинаю использовать Apache Ignite с PHP (PDO, UnixODBC, драйвер Ignite ODBC). Я успешно установил его и настроил Ignite, DSN и ODBC на моем сервере Linux (Debian). Я установил расширение php-odbc и все выглядит хорошо.

Я запускаю Apache Ignite: ./bin/ignite.sh php-ignite.xml где php-ignite.xml мой конфиг (конфигурация по умолчанию + включение odbc):

<beans
xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd">
<bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
<!-- <property name="clientMode" value="true"/> -->
<!-- Enabling ODBC. -->
<property name="odbcConfiguration">
<bean class="org.apache.ignite.configuration.OdbcConfiguration"></bean>
</property>
</bean>

Я написал простой PHP-скрипт для соединения с Ignite с помощью PDO и поместил в него некоторые пользовательские данные:

<?php

try {

$db = new PDO('odbc:Apache Ignite');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = 'CREATE TABLE IF NOT EXISTS test_md5 (id int PRIMARY KEY, md5_1 VARCHAR, md5_2 VARCHAR, md5_3 VARCHAR, md5_4 VARCHAR, md5_5 VARCHAR, md5_6 VARCHAR, md5_7 VARCHAR, md5_8 VARCHAR, md5_9 VARCHAR) WITH "atomicity=transactional,cachegroup=somegroup"';

$db->exec($sql);

for($i=0; $i<=1000000; $i++){
$md5 = md5($i);
$sql = "INSERT INTO test_md5 (id, md5_1, md5_2, md5_3, md5_4, md5_5, md5_6, md5_7, md5_8, md5_9) VALUES ($i, '$md5', '$md5', '$md5', '$md5', '$md5', '$md5', '$md5', '$md5', '$md5');";
$db->exec($sql);
}} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "\n";
die();
}

С этой точки зрения все выглядит красиво. Данные настроены на кластер. Теперь я хочу провести несколько тестов, чтобы проверить, является ли Apache Ignite более быстрым решением для больших данных, чем MySQL. Это мой тест (простой выбор только):

<?php

error_reporting(E_ALL);
$startTime = microtime(true);

try {

$ignite = new PDO('odbc:Apache Ignite');
$ignite->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$nRows = $ignite->query('select count(*) from test_md5')->fetchColumn();
echo 'Rows count: '.$nRows.'<br><br>';

$stmt = $ignite->prepare("select * from test_md5 limit 60500,10");
$stmt->execute();
$rows = $stmt->fetchAll();

foreach($rows as $item){
echo 'id: '.$item['ID'].' - md5: '.$item['MD5_1'].'<br>';
}} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "\n";
die();
}

echo "<br><br>Speed test:  " . number_format(( microtime(true) - $startTime), 4) . " Seconds\n";

Результаты: Тест скорости: 1,3717 секунд
Мой вопрос: почему Apache Ignite работает так медленно?

Когда я делаю то же самое с MySQL, результаты гораздо быстрее: Тест скорости: 0.0019 секунд

Конечно, это простой тест, но я не хочу использовать Apache Ignite для работы с большими данными.

Как я могу настроить Ignite Corectly?

Что я делаю неправильно?

РЕДАКТИРОВАТЬ:

Таким образом, проблема была со сценарием сравнения смещения и одной машины. Эта статья может помочь: http://apache-ignite-users.70518.x6.nabble.com/PHP-and-Apache-Ignite-very-slow-query-td18857.html

1

Решение

Прежде всего, вы должны использовать точно такой же код, если вы собираетесь сравнивать производительность. Вы используете драйвер ODBC для Ignite, но говорите, что используете драйвер MySQL по умолчанию. Вы даже используете PHP для теста MySQL? В вашем тесте неясно, тестируете ли вы сам Ignite, PDO или PHP I / O. Попробуйте использовать точно такой же код для MySQL — это может прояснить ситуацию.

Во-вторых, Ignite написан на Java и работает на JVM. Это означает, что вам нужно «разогреть» его, чтобы получить реальные цифры, которые вы увидите в производстве. Наблюдаемая производительность может быть НАМНОГО ниже на «холодной» JVM, которую вы только что запустили и не выполнили ни одного запроса.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]