用phpcassa显示所有键

时间:2011-05-04 17:51:54

标签: php database nosql cassandra phpcassa

我对卡桑德拉很新,但到目前为止我取得了很好的进展。

$conn = new ConnectionPool('Cluster');
$User = new ColumnFamily($conn, 'User');

$index_exp = CassandraUtil::create_index_expression('email', 'John@dsaads.com');
$index_clause = CassandraUtil::create_index_clause(array($index_exp));
$rows = $User->get_indexed_slices($index_clause);

foreach($rows as $key => $columns) {
echo $columns['name']."<br />";
}

我正在使用此类查询从somebodys电子邮件地址获取具体日期。 但是,我现在想做两件事。

  1. 统计数据库中的每个用户并显示数字
  2. 使用$ columns ['name']列出数据库中的每个用户。“”。$ columns ['email']
  3. 在mysql中我只是从select查询中删除'where属性',但是我觉得它在这里有点复杂了?

2 个答案:

答案 0 :(得分:4)

在Cassandra中,没有简单的方法来计算所有行。你基本上必须扫描一切。如果这是你想经常做的事情,那你做错了。示例代码:

$rows = $User->get_range("", "", 1000000);
$count = 0;
foreach($rows as $row) {
    $count += 1;
}

第二个答案是类似的:

$rows = $User->get_range("", "", 1000000, null, array("name", "email"));
foreach($rows as $key => $columns) {
    echo $columns["name"]." ".$columns["email"];
}

答案 1 :(得分:1)

泰勒霍布斯给出了一个非常好的例子。

但是,如果您有许多用户,则不希望一直迭代它们。

最好每天进行一次或两次迭代,并将数据存储在cassandra或memcached / redis中。


我也会用单行做一个CF并将所有用户名(或用户键)放在单行上。然而有些人认为这是奇怪的做法,有些人不会推荐它。然后你做:

  

$ count = $ cf-&gt; get_count($ rowkey = 0);

注意get_count()操作也很慢,所以你仍然需要缓存它。

如果get_count()返回100,则需要将phpcassa升级到最新版本。


关于第二部分 - 如果你的用户少了4000-5000,我会再次做一些奇怪的事情 - 然后把它作为超级列放在单行上。然后只需一次操作即可阅读:

  

$ users = $ scf-&gt; get($ rowkey = 0,new ColumnSlice(“”,“”,5000));   foreach($ users as $ user){      echo $ user [“name”]。“”。$ user [“email”];   }