簡體   English   中英

使用 phpcassa 顯示所有鍵

[英]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 地址獲取特定日期。 但是,我現在想做兩件事。

  1. 統計數據庫中的每個用戶並顯示數量
  2. 使用 $columns['name'] 列出數據庫中的每個用戶。" ".$columns['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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM