Cassandra + PHP + Thrift + 检索多行性能不佳

2024-01-10

我是 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('Y-m-d H:i:s.'.$micro,$t) );
        $now = $d1->format("H:i:s.u");

        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('Y-m-d H:i:s.'.$micro,$t) );
        $now = $d2->format("H:i:s.u");

        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 秒。

我怎样才能提高性能?除了使用 get_range_slices 之外,还有其他方法可以使用 thrift 从 Cassandra 恢复数据吗?

我也尝试过使用更大的计数器,而不是 100 个元素,但或多或​​少需要相同的时间。

我需要恢复超过 100,000 行,所以你可以想象这个进展是可怕的。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cassandra + PHP + Thrift + 检索多行性能不佳 的相关文章

  • 重定向后丢失会话变量

    用户填写用户名和密码 如果正确 页面会加载一些信息 例如user id到会话变量 该脚本制作了一个header Location 重定向 不知何故 下一页无法识别会话 怎么会 重定向到同一个域 并且所有页面都有session start 我
  • 当错误较多时,Laravel 不会显示错误。这是 Bug?

    重复的https github com laravel framework issues 31123 https github com laravel framework issues 31123 Laravel 版本 6 8 0 6 10
  • HTML 表单 POST 到 PHP 页面 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 好的 我创
  • 计算两个数字之间的差异

    我想计算两个给定数字之间的差异 例如 1 5 或 24 35 我必须将数组中的数字分开并写出它们之间的差异 如下所示 1 2 3 4 5 或 24 25 26 27 28 29 30 31 32 33 34 35 是否有任何 php 函数可
  • mongodb对话系统

    我正在实施一个verymongodb 上的简单对话系统 这个想法应该是 当我打开一个 convo 时 它应该显示发送和接收的消息 到目前为止一切正常 并且应该非常容易 通过使用像这样的伪代码这样的简单查询 from my id AND to
  • php 在内容前插入十六进制字符数

    我正在将网站移动到新服务器 旧服务器有 php 5 3 2 新服务器有 php 5 5 9 Centos httpd Apache 2 2 26 我已经复制了文件 它工作正常 除了唯一奇怪的事情 一些奇怪的十六进制数字被插入到页面内容之前
  • 为什么我应该使用 $_GET 和 $_POST 而不是 $_REQUEST? [复制]

    这个问题在这里已经有答案了 除此之外 REQUEST从 cookie 读取 有什么理由我应该使用 GET and POST代替 REQUEST 这样做的理论和实践理由是什么 当我只想让用户的某些数据返回某些数据时 我使用 REQUEST 当
  • 如何从字符串中只获取数字? [复制]

    这个问题在这里已经有答案了 我有这样的字符串 第 001 课 完成 在这种情况下 我只想获取数字部分001 我试过这个 str the title preg match all d str matches number implode ma
  • 使用 PDO 在 SQLite 中检索单个(且唯一)行的最简单方法

    我有这个 PDO stmt db gt prepare SELECT FROM channels WHERE id id stmt gt bindValue id id SQLITE3 INTEGER result stmt gt exec
  • WAMP 不显示目录列表中的图标

    过去 我通过 vmware 处理 PHP 代码 但最近我决定转而通过 WAMP 在 Windows 8 1 上 在本地进行处理 我创建了一个空文件夹tests in the www folder 然后在我的浏览器上输入http localh
  • 需要 mysqli_fetch_all 的替代方案

    我有一个 php mysqli 代码 可以找到一个我的本地服务器 但是在我的服务器上使用它时 我得到了一个 Fatal error Call to undefined function mysqli fetch all in home3 t
  • 如何创建环境变量来保护我的网站的 Google 地图 API 密钥(或任何其他秘密值)?

    我正在学习使用 Bootstrap 编写自己的网站 并使用 Google 地图 API 密钥和 Google Developers 的脚本轻松地将地图放置在我的页面上 理想情况下 我会有类似的东西 即我已经尝试过这个 Html PHP
  • 将秒转换为天、小时、分钟和秒

    我想转换一个变量 uptime这是秒 分为天 小时 分钟和秒 Example uptime 1640467 结果应该是 18 days 23 hours 41 minutes 这可以通过以下方式实现DateTime http php net
  • 需要使用 php 从远程服务器下载与 $_FILES 相同的内容[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 好的 我有处理图像上传的 php 代
  • 无需下载整个文件即可读取 ID3 标签

    是否可以读取 MP3 文件的 ID3 标签 持续时间 艺术家 标题 而无需下载整个文件 我做了一些测试 只需下载 MP3 文件的几个字节就可以获得艺术家和标题标签 但我不确定持续时间和其他标签是否可能 Thanks 我刚刚发现 ffmpeg
  • 从外部 bash 设置环境变量

    我试图使用 PHP 从命令行 设置 bash 环境变量 但没有成功 buff array buff VARTESTKEY VARTESTVALUE buff export VARTESTKEY file put contents scrip
  • $_SESSION 中保存大量信息可以吗?

    我需要存储许多数组 SESSION以防止从 MySQL 检索信息 可以吗 其中 太多 的信息有多少 SESSION还是没有 太多 谢谢 附 或者更好地使用http php net manual en book memcache php ht
  • WordPress 事件按元生效日期排序

    我在获取参数数组以按 Wordpress 中的日期对事件列表进行排序时遇到一些问题 我在 Stack Overflow 和其他地方找到了几个建议的解决方案 但经过大量的试验和错误后 这些解决方案似乎都不起作用 这没什么花哨的 而且应该比这容
  • 无法在 Centos 上安装 php-mysqli 扩展

    我正在尝试将 mysqli 扩展安装到 php yum install php mysqli 我收到下一个错误 Transaction Check Error file usr share mysql charsets Index xml
  • PHP 中的 Zip 流

    我有一个 PHP 脚本 可以动态创建 zip 文件并强制浏览器下载该 zip 文件 问题是 我可以直接将zip文件写入连接到用户浏览器的输出流 而不是先将其保存为服务器上的真实文件 然后发送文件吗 提前致谢 如果您的 Web 服务器运行的是

随机推荐