Cassandra + PHP + Thrift + извлекает плохую производительность нескольких строк

Я новичок в Cassandra, и я пытаюсь восстановить несколько строк с помощью php, но производительность действительно наливается.

Вот код, который я использую:

*

<?php $GLOBALS['THRIFT_ROOT'] = 'D:/cassandra/thrift/lib/php/src'; require_once $GLOBALS['THRIFT_ROOT'].'/packages/cassandra/Cassandra.php'; require_once $GLOBALS['THRIFT_ROOT'].'/packages/cassandra/cassandra_types.php'; require_once $GLOBALS['THRIFT_ROOT'].'/transport/TSocket.php'; require_once $GLOBALS['THRIFT_ROOT'].'/protocol/TBinaryProtocol.php'; require_once $GLOBALS['THRIFT_ROOT'].'/transport/TFramedTransport.php'; require_once $GLOBALS['THRIFT_ROOT'].'/transport/TBufferedTransport.php'; try { $ipmachine = 'localhost'; $keyspace = 'demo'; $field_search = 'id_log'; $column_family = 'logs'; // Make a connection to the Thrift interface to Cassandra $socket = new TSocket($ipmachine, 9160); $transport = new TFramedTransport($socket, 1024, 1024); $protocol = new TBinaryProtocol($transport); $client = new cassandra_CassandraClient($protocol); $transport->open(); $consistency_level = ConsistencyLevel::ONE; $client->set_keyspace($keyspace); // Specify what Column Family to query against. $columnParent = new cassandra_ColumnParent(); $columnParent->column_family = $column_family; $columnParent->super_column = NULL; $sliceRange = new cassandra_SliceRange(); $sliceRange->start = ""; $sliceRange->finish = ""; $predicate = new cassandra_SlicePredicate(); $predicate->slice_range = $sliceRange; $numelements = 100; $keyRange = new cassandra_KeyRange(); $keyRange->start_key= ""; $keyRange->end_key = ""; $keyRange->count =$numelements; $result = $client->get_range_slices($columnParent, $predicate, $keyRange, $consistency_level); if(!empty($result)){ $continue = 1; $start_key = 1; while ($continue <=5){ $keyRange = new cassandra_KeyRange(); $keyRange->start_key= $start_key; $keyRange->end_key = ""; $keyRange->count =$numelements; $t = microtime(true); $micro = sprintf("%06d",($t - floor($t)) * 1000000); $d1 = new DateTime( date('Ymd H:i:s.'.$micro,$t) ); $now = $d1->format("H:i:su"); echo $now .'................'; $result = $client->get_range_slices($columnParent, $predicate, $keyRange, $consistency_level); $t = microtime(true); $micro = sprintf("%06d",($t - floor($t)) * 1000000); $d2 = new DateTime( date('Ymd H:i:s.'.$micro,$t) ); $now = $d2->format("H:i:su"); echo $now . '<br>'; // DO SOMETHING WITH THE DATA AND CHANGE $start_key = $start_key * $numelements; $continue++; } } $transport->close(); } catch (TException $tx) { print 'TException: '.$tx->getLine(). '<br>Error: '.$tx->getMessage(); print '<br>Code '.$tx->getCode(). '<br>traza: '.$tx->getTraceAsString(); } ?> 

*

В результате, это то, что я получаю

Время окончания Инициирования
19: 13: 39,534957 ……………. 19: 13: 40,220973
19: 13: 40,221050 ……………. 19: 13: 40,892968
19: 13: 40,893044 ……………. 19: 13: 41,575102
19: 13: 41,575181 ……………. 19: 13: 42,256830
19: 13: 42,256906 ……………. 19: 13: 42,936492

Таким образом, чтобы восстановить 5 блоков из 100 строк, потребовалось 3 секунды.

Как я могу улучшить производительность? Есть ли другой способ восстановления данных из Cassandra с помощью экономии вместо использования get_range_slices?

Я также пытался использовать более высокий счетчик вместо 100 элементов, но он принимает более или менее одно и то же время.

Мне нужно восстановить более 100 000 строк, так как вы можете себе представить, что прогрессия ужасна.

Related of "Cassandra + PHP + Thrift + извлекает плохую производительность нескольких строк"