我是卡桑德拉的新手,但到目前为止我已经取得了很好的进步。
$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 />";
}我使用这种类型的查询从某人的电子邮件地址获取特定的日期。不过,我现在想做两件事。
".$columns'email':
在mysql中,我只需要从select查询中删除“where属性”,但是我认为这里要复杂一些吗?
发布于 2011-05-05 17:10:49
在卡桑德拉,没有一种简单的方法来计算所有的行数。基本上你必须扫描所有的东西。如果这是你经常想做的事情,你就是做错了。示例代码:
$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"];
}发布于 2012-08-11 18:39:42
泰勒·霍布斯举了个很好的例子。
但是,如果您有许多用户,则不希望一直对它们进行迭代。
最好每天迭代一两次,并将数据存储在cassandra或memcached / redis中。
我还会用单行进行CF,并将所有用户名(或用户键)放在单行上。然而,有些人认为这是一种奇怪的做法,有些人不会建议这样做。那你就做:
$count = $cf->get_count($rowkey = 0);
注意,get_count()操作也很慢,所以仍然需要缓存它。
如果get_count()返回100,则需要将phpcassa升级到最新版本。
关于第二部分--如果用户少于4000到5000,我会再次做一些奇怪的事情--然后作为超级列放在单行上。那么,read将只使用一个操作:
$users = $scf->get($rowkey = 0,新ColumnSlice("","",5000));foreach($users as $user){ echo $user“name”。“.$user”电子邮件;}
https://stackoverflow.com/questions/5887698
复制相似问题