Cassandra и Pycassa: лучший способ определить, существует ли строка с определенным ключом

Используя pycassa, как лучше всего определить, существует ли запись с определенным ключом? Это

try:
    cf.get(key, columns=[])
except pycassa.NotFoundException:
    # Not exists
else:
    # Exists

хорошее решение? Будет ли это использовать только кеш ключей?

ОБНОВЛЕНИЕ: я только что попробовал этот запрос, и он всегда вызывает pycassa.NotFoundException, если указано columns=[].


person Vladimir Prudnikov    schedule 09.09.2013    source источник


Ответы (1)


Чтобы увидеть, существует ли конкретный ключ строки в cf, вы делаете:

>>> cf.get(key)
{'col_name': 'col_val', 'col_name2': 'col_val2'}

Если этот ключ строки окажется в кэше ключей, будет использовано значение из кэша. Вам нужно будет изучить соответствующие sstables, чтобы найти фактические значения, соответствующие этому ключу строки. Это может потребовать (медленного) поиска/доступа к диску, если только вам не повезет и вы не попадете в кеш строк или кеш страниц (linux).

person Schildmeijer    schedule 09.09.2013
comment
Если для ключа ничего не существует, надеюсь, фильтры Блума будут означать, что ничего не искалось. Если один или несколько фильтров Блума дают ложное срабатывание, кеш ключей обращается за смещением в таблицах SSTable. - person Richard; 09.09.2013
comment
Это всегда будет извлекать данные всей строки. Похоже, должен быть более эффективный способ сделать это... По крайней мере, в моей ситуации я могу получить только один столбец. - person Vladimir Prudnikov; 09.09.2013
comment
Плюс, когда у вас есть (много?) надгробий перед первым реальным рядом, это еще медленнее... - person Alexis Wilke; 18.04.2016