Je suis actuellement aux prises avec le bon format de données à utiliser avec Cassandra. Je suppose que cela est dû à la profondeur supplémentaire qu'il offre par rapport aux stockages de valeurs-clés standard.Stockage de données dans Cassandra
Mon format de données est actuellement défini comme ceci:
- Keyspaces pour différentes applications.
- Familles de colonnes pour différentes parties d'application.
- Dans ces familles de colonnes, j'ai les données.
La plupart des données sont stockées dans une seule colonne de famille dans le format:
Key: UUID-1|UUID-2|UUID-3
Value: Array of PHP Values
Après avoir inséré plusieurs 100.000 entrées (< 1kb chacun) Je vois une dégradation des performances lors de la lecture des données. D'après ce que j'ai compris, les familles de colonnes devraient être exactement où stocker la partie principale de mes données. Avoir la plupart de mes données dans une seule famille de colonnes au lieu de plusieurs différentes ne devrait pas être le point.
Dois-je envisager de fractionner mes données dans différentes familles de colonnes ou est-ce que l'approche est correcte, mais quelque chose d'autre pourrait être la cause du problème?
Modifier pour répondre aux questions de l'ADN dans le commentaire:
Je compare le temps de lecture nécessaire pour une seule touche, je l'ai inséré avant de commencer mes tests.
La clé de test a toujours lu < 0,0010s pendant plus de 1000 fois au début tant que la base de données est vide. Les données écrites dans les essais est structuré comme celui-ci:
- Une ligne identifiée par un haut clé avec 5 caractères + 20 numéros
- avec une colonne (1 Personnage) contenant l'horodatage unix courant
J'ai ajouté des entrées et réexécuté le même test de lecture pour comparer les temps de lecture. Les temps de lecture, je suis la liste ici sont les chiffres inférieurs:
Entries | Read Time
0 | 0.0010
150.000 | 0.0013
300.000 | 0.0014
500.000 | 0.0016
750.000 | 0.0019
1.000.000 | 0.0022
Parce que c'est uniquement pour les tests de base, c'est exécuté uniquement sur un seul nœud (instance EC2) sur Amazon. Le temps de lecture semble augmenter d'environ 0,0003s pour chaque 250 000 nouvelles lignes. Je sais que ce sont vraiment de petits nombres et ils sont géniaux, mais la croissance linéaire du temps de lecture n'est pas ce à quoi je m'attendais.
Je prévois de déplacer un grand serveur MySQL avec un grand nombre de petites entrées à Cassandra. Il contient actuellement environ 75 milliards d'entrées et la quantité de nouveaux ensembles de données qu'il collecte est vraiment rapide, une augmentation linéaire du temps de lecture me fait donc me demander si je vais dans la bonne direction.
Quelles performances voyez-vous et quelles performances espérez-vous? Que vous utilisiez un CF ou plusieurs CF dépend généralement de la structure des données que vous stockez et des types de requêtes dont vous avez besoin. Pouvez-vous donner plus de détails sur la structure de vos données, et les types de requête de lecture que vous faites? Quelle version de Cassandra utilisez-vous, sur quel matériel? – DNA
@DNA: Le tableau de valeurs PHP que je sauvegarde contient des chaînes (environ 10-20, chacune avec une longueur de 10-500). J'ai également édité ma question pour (j'espère) mieux expliquer pourquoi je pose la question et d'où viennent mes «soucis». Je travaille avec la version 0.7.6-2 dans mon environnement de test. – favo