2017-02-22 3 views
0

Selon le DataStax collections doc, une collection est toujours lue dans son ensemble. Sous le capot, C * stocke les collections sous la forme d'une liste de colonnes dynamiques. Par exemplePourquoi CQL lit-il les collections dans leur intégralité?

books map<text, int> 

seront les magasins comme

{name=books:book_name_1, value=2001}, 
{name=books:book_name_2, value=2002} 

Comment se fait-il pas possible de sélectionner une clé spécifique à partir d'une carte?

+0

double possible de [SELECT valeur spécifique de la carte] (http://stackoverflow.com/questions/16024839/select-specific-value-from-map) –

Répondre

0

Quelle structure JSON est-ce? (Ce n'est pas un JSON valide.) Ce n'est pas ainsi qu'une carte serait stockée dans une colonne à l'intérieur de Cassandra.

Quoi qu'il en soit, vous cherchez peut-être les suivantes: http://docs.datastax.com/en/cql/3.1/cql/ddl/ddl_query_collection_c.html

+0

Comment serait-il stocké alors? Ma compréhension que chaque carte Entery est stockée dans Cassandra comme une colonne dynamique où la clé d'une combinaison du nom de la carte et la clé, et la valeur est la valeur de la carte – EugeneMi

0

Cassandra lu chaque colonne dans son ensemble.
Cassandra n'autorise que la clause where sur les clés primaires, si vous avez besoin de filtrer à travers une colonne normale, vous devez créer un index dessus.

Pour votre cas, vous devez diviser la carte en deux et le terrain et faire la clé comme clé primaire

Par exemple:

CREATE TABLE books(
    key text, 
    value int, 
    primary key(key) 
); 

Maintenant, vous pouvez interroger par clé pour obtenir la valeur;

SELECT value FROM books WHERE key = ? 
+0

Je ne cherche pas à filtrer par la colonne .. Chaque entrée dans la carte est stockée comme une colonne dynamique, donc je m'attends à être capable de lire juste cette colonne au lieu de la carte entière – EugeneMi

+0

@EugeneMi vous ne pouvez pas lire juste cette colonne, vous devez lire l'ensemble –

+0

Cochez cette http : //stackoverflow.com/questions/16024839/select-specific-value-from-map –