2016-07-28 1 views
2

Je dois référencer Cassandra avec le Linkbench Facebook. Il y a deux phases pendant le Benchmark, la charge et la phase de demande. dans la phase de chargement, Linkbench remplit les tables de cassandra: nœuds, liens et comptes (pour le comptage des liens) avec des valeurs par défaut (données graphiques).Cassandra: comment initialiser la colonne du compteur avec la valeur?

la table de comptage ressemble à ceci:

keyspace.counttable ( link_id bigint, link_type bigint, time bigint, version bigint, count counter, PRIMARY KEY (link_id, link_type, time, version)

ma question est de savoir comment insérer les valeurs de compteur par défaut (avant incrémenter et décrémenter le compteur dans la phase de demande de Linkbench)?

S'il est impossible de le faire avec cassandra, comment dois-je incrémenter/décrémenter une variable bigint (au lieu de la variable compteur)

Tous suggèrent et commentaires? Merci beaucoup.

Répondre

1

La valeur par défaut est zéro. Compte tenu

create table counttable ( link_id bigint, link_type bigint, time bigint, version bigint, count counter, PRIMARY KEY (link_id, link_type, time, version) );

et

update counttable set count = count + 1 where link_id = 1 and link_type = 1 and time = 1 and version = 1;

Nous voyons que la valeur du compte est maintenant 1.

select * from counttable ; link_id | link_type | time | version | count ---------+-----------+------+---------+------- 1 | 1 | 1 | 1 | 1 (1 rows)

Donc, si nous voulons pour définir une autre valeur que nous pouvons:

update counttable set count = count + 500 where link_id = 1 and link_type = 1 and time = 1 and version = 2; select * from counttable ; link_id | link_type | time | version | count ---------+-----------+------+---------+------- 1 | 1 | 1 | 1 | 1 1 | 1 | 1 | 2 | 500 (2 rows)

1

Il n'y a pas de manière élégante d'initialiser une colonne de compteur avec une valeur différente de zéro. La seule opération que vous pouvez faire sur un champ de compteur est incrément/décrément. Je recommande de conserver le décalage (par exemple, la valeur initiale que vous souhaitez) dans une colonne différente et d'ajouter simplement les deux valeurs dans votre application cliente.

+0

Merci! Je cherche une solution avec une seule opération et une seule colonne (incrémentation ou décrémentation). Cela doit être avec un compteur ou un entier. – KNag

0

Merci pour les réponses. J'ai implémenté la solution suivante pour initialiser le compteur Field. en tant que valeur initiale et par défaut du compteur Le champ est 0, je l'ai incrémenté avec ma valeur par défaut. il ressemble à Don Branson solution, mais avec une seule colonne:

create table counttable ( link_id bigint, link_type bigint, compteur de comptage, clé primaire (link_id, link_type) );

i définir la valeur avec cette déclaration (pendant la phase de charge):

update counttable set count = count + myValue where link_id = 1 and link_type = 1; 

select * from counttable ; 

link_id | link_type | count 
---------+-----------+-------- 
     1 |   1 | myValue (added to 0) 

(1 row)