Cassandra произвольная скорость чтения - PullRequest
6 голосов
/ 17 июня 2010

Мы все еще оцениваем Cassandra для нашего хранилища данных.В качестве очень простого теста я вставил значение для 4 столбцов в семейство столбцов Keyspace1 / Standard1 на моем локальном компьютере объемом около 100 байт данных.Затем я прочитал его так быстро, как только мог, по строке ключа.Я могу прочитать его обратно со скоростью 160 000 в секунду.Отлично.

Затем я вставил миллион похожих записей, все с ключами в форме XY, где X в (1..10) и Y в (1..100,000), и я запросил случайную запись.Производительность упала до 26 000 запросов в секунду.Это все еще намного выше числа запросов, которые мы должны поддерживать (около 1500 в секунду)

Наконец, я поместил десять миллионов записей с 1.1 до 10.1000000 и случайно запросил одну из 10 миллионов записей.Производительность ужасна - 60 запросов в секунду, и мой диск крутится как сумасшедший.

Я также проверил, что если я запрашиваю подмножество данных, скажем, 1000 записей в диапазоне от 3 000 000 до 3 001 000, сначала он медленно возвращается, а затем, когда они кэшируются, он ускоряет до 20 000 запросов в секунду имой диск перестает сходить с ума.

Я прочитал повсюду, что люди хранят миллиарды записей на Кассандре и загружают их со скоростью 5-6k в секунду, но я не могу приблизиться к этому, имея только 10 миллионов записей.Есть идеи, что я делаю не так?Есть ли какие-то настройки, которые мне нужно изменить по умолчанию?Я на разогнанной коробке Core i7 с 6 гигабайтами оперативной памяти, поэтому я не думаю, что это машина.

Вот мой код для извлечения записей, которые я порождаю в 8 потоков, чтобы запросить одно значение из одногостолбец через ключ строки:

ColumnPath cp = new ColumnPath ();cp.Column_family = "Standard1";cp.Column = utf8Encoding.GetBytes ("site");строковый ключ = (1 + sRand.Next (9)) + "."+ (1 + sRand.Next (1000000));ColumnOrSuperColumn logline = client.get ("Keyspace1", ключ, cp, ConsistencyLevel.ONE);

Спасибо за любые идеи

Ответы [ 4 ]

4 голосов
/ 17 июня 2010

чисто случайное чтение относится к наихудшему поведению для кэширования, которое пытается сделать ваша ОС (и Cassandra, если вы устанавливаете кеш ключей или строк).

, если вы посмотрите на contrib / py_stress в CassandraИсходный дистрибутив, он имеет настраиваемый stdev для выполнения случайного чтения, но с некоторыми ключами горячее, чем с другими.это будет более представительным для большинства реальных рабочих нагрузок.

3 голосов
/ 17 июня 2010

Добавьте больше узлов Cassandra и предоставьте им много памяти (-Xms / -Xmx).Чем больше у вас экземпляров Cassandra, тем больше данных будет разделено между узлами, и с большей вероятностью они будут находиться в памяти или более легко доступны с диска.Вы будете очень ограничены в попытках масштабировать один процессор класса рабочей станции.Также проверьте настройку по умолчанию -Xms / -Xmx.Я думаю, что по умолчанию 1 ГБ.

0 голосов
/ 01 июля 2010

VoltDB , безусловно, может обрабатывать этот уровень производительности чтения, а также записи и работы с использованием кластера серверов. В качестве решения в оперативной памяти вам необходимо построить достаточно большой кластер, чтобы хранить все ваши данные в оперативной памяти.

0 голосов
/ 17 июня 2010

Похоже, у вас недостаточно оперативной памяти для хранения всех записей в памяти.

Если вы переключаетесь на диск, у вас возникают проблемы, и ожидается, что производительность значительно снизится, особенно если вы читаете случайно.

Вы также можете попробовать сравнить некоторые другие популярные альтернативы, такие как Redis или VoltDB .

...