J'ai une camticade Cassandra (0.6.4) qui aura de nouvelles entrées d'utilisateurs. Je voudrais interroger Cassandra pour ces nouvelles entrées afin que je puisse traiter ces données dans un autre système. P>
Mon sens était que je pouvais utiliser un fuseau horaire comme la clé de mon entrée, puis interroger sur un porte-clés qui commence soit avec "" comme StartkeKey, ou quel que soit le laststartKey. Est-ce la méthode correcte? P>
Comment get_range_slice crée-t-elle réellement une plage? Cela n'a-t-il pas à connaître le type de données de la clé? Aucune déclaration du type de données de la clé nulle part. Dans le fichier de stockage_conf.xml, vous déclarez le type des colonnes, mais pas des touches. La clé suppose-t-elle être du même type que les colonnes? Ou fait-il que cette magie renifle de la magie à deviner? p>
J'ai aussi vu des implémentations de référence où les gens stockent TimeuUidType dans des colonnes. Cependant, cela semble avoir des problèmes d'échelle car cette clé particulière deviendrait alors "chaude" puisque chaque changement devrait le mettre à jour. P>
Tous les pointeurs dans ce cas seraient appréciés. P>
3 Réponses :
Lors du tri des données, seules les touches de colonne sont importantes. Les données stockées ne sont pas conséquentes ni l'horodatage généré automatiquement. L'attribut Comparewith est important ici. Si vous définissez Comparewith comme UTF8Type, les clés seront interprétées comme UTF8TYPES. Si vous définissez le comparateur avec TimeUUIDTYPE, les clés sont automatiquement interprétées comme des horodatages. Vous n'avez pas à spécifier le type de données. Regardez les définitions SLICEPRITICT et SLICERANGE sur cette page http://wiki.apache.org/cassandra/api < / a> C'est un bon endroit pour commencer. De plus, vous trouverez peut-être cet article utile http://www.sodeso.nl/?p=80 < / a> dans la troisième partie ou donc il parle de tranche allant de ses requêtes et ainsi de suite. P>
Je comprends que vous pouvez utiliser des touches de colonne pour le tri. Cependant, si je devais écrire une colonne d'horodatage pour chaque article de ma collection, je vous écrirais constamment à une seule famille de colonnes, ce qui créerait un point chaud.
Je n'ai pas compris votre commentaire. Pourriez-vous s'il vous plaît élaborer à ce sujet? En ce qui concerne les touches de colonne, Cassandra trie automatiquement la colonne entière (SuperColumn) basée sur la clé (ou «nom» dans la convention Cassandra) dès que vous le stockez. En outre, si vous pouviez élaborer un peu plus sur votre cas d'utilisation, cela vous aiderait :)
Doug, P>
Écrire dans une seule famille de colonnes Peut parfois créer un point chaud si vous utilisez un partitionneur de préservation de commande, mais pas si vous utilisez le partitionnaire aléatoire par défaut (sauf si un sous-ensemble d'utilisateurs crée beaucoup plus de données que tous les autres utilisateurs! ). p>
Si vous avez trié vos rangées em> par heure (à l'aide d'un partitionneur de préservation de commande), vous êtes probablement encore plus susceptible de créer des points chauds, car vous ajoutez des lignes séquentielles et un seul noeud sera responsable. Pour chaque gamme du clavier. P>
colonnes et clés peuvent être de n'importe quel type, car la clé de ligne n'est que la première colonne. Pratiquement, le cluster est un anneau de clé de hachage circulaire et les touches sont hachées par le partitionneur pour être distribuées autour du cluster. p>
Méfiez-vous d'utiliser des dates sous forme de touches de ligne, car même la randomisation du randompartitioner par défaut est limitée et que vous pourriez finir par encombrer vos données. p>
De plus, si cette date change, vous devez supprimer la ligne précédente puisque vous ne pouvez effectuer que des insertions en C *. P>
Voici ce que nous savons: p>
Ce que vous voulez utiliser est un index de la famille de colonnes à l'aide d'une large ligne: CompositType (TimeuUID | UserID) Pour que cela ne devienne pas chaud, ajoutez une première clé significative ("clé Shard") qui scinderait les nœuds de données de données tels que le type d'utilisateur ou la région. P>
Avoir plus de données que nécessaire à Cassandra n'est pas un problème, c'est comment il est conçu, alors ce que vous devez vous demander est de "que dois-je interroger" puis concevoir une famille de colonnes pour cela plutôt que d'essayer de tout correspond à tout Dans un cf comme vous le feriez dans une SGBDM. p>