[英]Show all keys with phpcassa
我對 cassandra 還很陌生,但到目前為止我已經取得了不錯的進展。
$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 />";
}
我使用這種類型的查詢從某人的 email 地址獲取特定日期。 但是,我現在想做兩件事。
在 mysql 中,我只需從 select 查詢中刪除“where 屬性”,但是我認為它在這里有點復雜?
在 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"];
}
泰勒霍布斯舉了一個很好的例子。
但是,如果您有很多用戶,您不希望一直對他們進行迭代。
最好每天進行一次或兩次迭代,並將數據存儲在 cassandra 或 memcached / redis 中。
我也會用單行做一個 CF,並將所有用戶名(或用戶密鑰)放在單行上。 然而,有些人認為這是一種奇怪的做法,有些人不會推薦它。 然后你做:
$count = $cf->get_count($rowkey = 0);
注意 get_count() 操作也很慢,所以你仍然需要緩存它。
如果 get_count() 返回 100,則需要將 phpcassa 升級到最新版本。
關於第二部分-如果您的用戶少於 4000-5000,我會再次做一些奇怪的事情-然后將其放在單行上作為超級列。 然后只需一項操作即可讀取:
$users = $scf->get($rowkey = 0, new ColumnSlice("", "", 5000)); foreach($users as $user){ echo $user["name"]." ".$user["email"]; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.