2016-11-21 4 views
2

J'ai quelques champs que je stocke dans Cassandra, mais certains d'entre eux pourraient être null à un moment donné. Comme il y en a beaucoup, cela rend le code beaucoup plus lisible si je ne vérifie pas chaque code null avant de l'ajouter à l'INSERT.Insertion de valeurs nulles dans cassandra

Y a-t-il un inconvénient à le faire?

EDIT !!

Il y a un ticket jira que j'ai trouvé. Mais je suis incapable de comprendre quelle solution a finalement été implémentée à partir du ticket. L'insertion d'une valeur nulle crée une pierre tombale. https://issues.apache.org/jira/browse/CASSANDRA-7304

Répondre

7


Vous ne devez pas créer de pierre tombale:
1. La pierre tombale occupe de l'espace et peut augmenter considérablement la quantité de stockage dont vous avez besoin.
2. L'interrogation de tables comportant un grand nombre de pierres tombales provoque des problèmes de performances et provoque une pression de latence et de tas.

+0

pouvez-vous suggérer quelque chose que je peux faire? Je ne veux pas vérifier chaque colonne lors de chaque insertion. De plus, je ne veux pas créer la requête dynamiquement dans tous les cas car cela prendra beaucoup de temps. – ArchitGarg

+0

Vous pouvez écrire votre propre code ou modifier le code INSERT et UPDATE de QueryBuilder pour le désélectionner si l'insertion est nulle –

6

La belle chose à propos du nouveau moteur de stockage de Cassandra est la possibilité de stocker les valeurs NOT. Qu'est-ce que cela signifie est ce qu'il était censé être: une valeur null est simplement une valeur qui ne devrait pas être là. Cela donne une grande flexibilité, car une valeur nulle non explicitement (ou implicitement, voir plus loin) insérée ne prendra pas d'espace de stockage, ni utilisera la puissance de traitement et la bande passante d'E/S.

En effet, il est assez facile de remplir une ligne avec des valeurs nulles:

INSERT INTO mytable (pk, c2, c3) VALUES (0x1234, null, null); 

De cette façon, vous dites explicitement C * pour stocker une valeur nulle dans les deux c2 et c3. Cependant, vous pouvez obtenir le même effet macroscopique avec:

INSERT INTO mytable (pk) VALUES (0x1234); 

Notez que je dis macroscopiques effet, parce que lorsque vous insérez explicitement une valeur nulle, C * va insérer une pierre tombale NUDER le capot. À long terme, cela vous mordra, en raison de la façon dont C * effectue des recherches, des compactions, etc ... donc vous devriez éviter autant que possible, la deuxième version fonctionnera beaucoup mieux.

Maintenant, il y a aussi un piège: vous pouvez également créer des pierres tombales implicitement. Ce aura lorsque vous utiliserez les fonctionnalités TTL intégrées à Cassandra. En conclusion, si vous vous souciez de vous, je vous suggère de NE PAS effectuer d'insertions de valeur nulle. Faites une vérification au niveau de l'application, vous économiserez du temps (et de l'argent) plus tard, par exemple pendant les lectures.