2011-05-04 5 views
2

Je suis assez nouveau à Cassandra mais j'ai fait de bons progrès jusqu'à présent. Je utilise ce type de requête pour obtenir une date spécifique à partir de l'adresse email de somebodys. Cependant, je veux maintenant faire 2 choses.Afficher toutes les clés avec phpcassa

  1. Count tous les utilisateurs dans la base de données et afficher le numéro
  2. Liste tous les utilisateurs dans la base de données avec des colonnes $ [ 'nom']. » ». $ Colonnes [ 'email']

Dans mysql, je supprimerais simplement l'attribut 'where' de la requête select, mais je pense que c'est un peu plus compliqué ici?

Répondre

4

Dans Cassandra, il n'y a pas de moyen facile de compter toutes les lignes. Vous devez essentiellement tout numériser. Si c'est quelque chose que vous voulez faire souvent, vous le faites mal. Exemple de code:

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

La deuxième réponse est similaire:

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

Tyler Hobbs donne très bel exemple. Cependant, si vous avez beaucoup d'utilisateurs, vous ne voulez pas les répéter tout le temps.

Il est préférable d'avoir cette itération une ou deux fois par jour et de stocker les données dans cassandra ou memcached/redis. Je voudrais également faire un CF avec une seule ligne et mettre tous les noms d'utilisateur (ou les clés d'utilisateur) là sur une seule ligne. Cependant, certains ont considéré cela comme une pratique étrange et certaines personnes ne le recommanderont pas. Alors vous faites:

$ count = $ cf-> get_count ($ rowkey = 0);

note get_count() est également une opération lente, vous devez donc la mettre en cache.

Si get_count() renvoie 100, vous devrez mettre à jour votre phpcassa vers la dernière version.


A propos de la deuxième partie - si vous avez moins 4000-5000 utilisateurs, je encore une fois faire quelque chose d'étrange - mettre alors unique ligne comme supercolumns. Alors lire sera avec une seule opération:

$ users = $ scf-> get ($ rowkey = 0, nouveau ColumnSlice ("", "", 5000)); foreach ($ utilisateurs en $ utilisateur) { echo $ utilisateur ["nom"]. "". $ Utilisateur ["email"]; }

Questions connexes