J'ai écrit un programme de test pour tester Cassandra, et j'ai eu des problèmes pour lire les données. On dirait que Cassandra prend parfois une clé pour une autre.Pourquoi Cassandra agit-il de manière étrange avec les touches d'octets (avec Lazyboy)?
Voici mon programme de test:
from lazyboy import *
from lazyboy.key import Key
import uuid
import random
class TestItemKey(Key):
def __init__(self, key=None):
Key.__init__(self, "TestMX", "TestCF", key)
class TestItem(record.Record):
def __init__(self, *args, **kwargs):
record.Record.__init__(self, *args, **kwargs)
self.key = TestItemKey(uuid.uuid1().bytes)
connection.add_pool('TestMX', ['localhost:9160'])
t1 = TestItem({'test':'foo'})
t1.key = TestItemKey(uuid.UUID('3cead15a-a54e-11df-87a2-000c298d2724').bytes)
t2 = TestItem({'test':'bar'})
t2.key = TestItemKey(uuid.UUID('3cebc15a-a54e-11df-87a2-000c298d2724').bytes)
t1.save()
t2.save()
print TestItem().load(t1.key.clone())
print TestItem().load(t2.key.clone())
(Les UUID choisis sont un exemple de ceux qui causent des problèmes)
Voici la sortie de ce script:
[email protected]:/mnt/hgfs/TestMX# python test.py
TestItem: {'test': 'foo'}
TestItem: {'test': 'foo'}
lieu du résultat attendu:
[email protected]:/mnt/hgfs/TestMX# python test.py
TestItem: {'test': 'foo'}
TestItem: {'test': 'bar'}
Notez que le script fonctionne généralement très bien avec d'autres UUID randomely choisis, mais parfois pas ...
J'ajouterai que j'ai essayé avec Pycassa au lieu de Lazyboy, avec exactement le même résultat. – Pierre
t1.key et t2.key sont les mêmes, ou im je manque quelque chose de fondamental? – Schildmeijer
Ils sont très proches, mais pas la même chose. '3cead ...' pour le premier, '3cebc ...' pour le second. – Pierre