2014-02-06 5 views
1

Я полный новичок в cassandra.Каков эффективный способ обработки pycassa multiget для 1 миллиона строк ключей

Прямо сейчас мне удалось заставить мой код работать для моего проблемного сценария на относительно небольшом наборе данных.

Однако, когда я пытаюсь выполнить мультигит на 1 миллион строк, он не получается с сообщением «Повторно 6 раз. Последний сбой был тайм-аут: тайм-аут».

например: colfam.multiget ([rowkey1, ..........., rowkey_Million])

В основном семья колонки Я пытаюсь запроса имеет 1 миллиона записей с 28 столбцов каждая.

Здесь я бегу 2-узла Кассандры кластера на отдельном Ubuntu виртуального ящика с системой конфигурации, как

Оперативная память: 3GB Процессор: 1CPU

Так как же мне удается справиться с MultiGet на так много rowkeys эффективно, а затем сделать объемную вставку того же самого в другое семейство столбцов кассандры?

Спасибо заранее :) :)

ответ

2

Я ответил на это на pycassa mailing list, а также (пожалуйста, постарайтесь не размещать в разных местах), но я скопирую ответ для кого-то, кто видит это:

multiget - очень дорогая операция для Кассандры. Каждой строке в мультигете может потребоваться несколько дисков для Cassandra. pycassa автоматически разбивает запрос на более мелкие куски, но это по-прежнему очень дорого.

Если вы пытаетесь прочитать всю семью столбцов, вместо этого используйте get_range().

Если вы просто пытаетесь прочитать подмножество строк в этом семействе столбцов (на основе некоторого атрибута), и вам нужно делать это часто, вам нужно использовать другую модель данных.

Поскольку вы новичок в этом, я потратил бы некоторое время на изучение моделирования данных в Кассандре: http://wiki.apache.org/cassandra/DataModel. (Примечание: в большинстве этих примеров будет использоваться CQL3, который pycassa не поддерживает. Если вы хотите работать с CQL3 вместо этого, используйте новый драйвер python DataStax: https://github.com/datastax/python-driver)