Мы все еще оцениваем Cassandra для нашего хранилища данных. В качестве очень простого теста я вставил значение для 4 столбцов в семейство столбцов Keyspace1/Standard1 на моем локальном компьютере, что составило около 100 байт данных. Затем я прочитал его так быстро, как только мог, по клавише строки. Я могу прочитать его со скоростью 160 000 в секунду. Здорово.
Затем я вставил миллион похожих записей с ключами в виде X.Y, где 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 запросов в секунду, и мой диск перестает сходить с ума.
Я читал повсюду, что люди хранят миллиарды записей в Cassandra и извлекают их со скоростью 5-6 тысяч в секунду, но я не могу приблизиться к этому, имея всего 10 миллионов записей. Любая идея, что я делаю неправильно? Есть ли какие-то настройки, которые мне нужно изменить по умолчанию? У меня разогнанная коробка Core i7 с 6 гигабайтами оперативной памяти, поэтому я не думаю, что это машина.
Вот мой код для извлечения записей, которые я создаю в 8 потоках, чтобы запросить одно значение из одного столбца с помощью ключа строки:
ColumnPath cp = новый ColumnPath(); cp.Column_family = "Стандарт1"; cp.Column = utf8Encoding.GetBytes («сайт»); строковый ключ = (1+sRand.Next(9)) + "." + (1+sRand.След.(1000000)); ColumnOrSuperColumn logline = client.get("Keyspace1", key, cp, ConsistencyLevel.ONE);
Спасибо за любые идеи