Мы по-прежнему оцениваем Cassandra для нашего хранилища данных. В качестве простого теста я вставил значение для 4 столбцов в семейство столбцов Keyspace1/Standard1 на моем локальном компьютере, составив около 100 байт данных. Затем я читал его так быстро, как мог, по строке. Я могу прочитать его обратно на 160 000 в секунду. Отлично.Скорость случайной скорости Cassandra
Тогда я поставил миллион похожих записей с ключами в виде 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 запросов в секунду, а мой диск перестает сходить с ума.
Я читал все, что люди хранят миллиарды записей в Кассандре и получают их со скоростью 5-6 тыс. В секунду, но я не могу приблизиться к этому только с 10-миллиметровыми записями. Любая идея, что я делаю неправильно? Есть ли какая-то настройка, которую мне нужно изменить от значений по умолчанию? Я на разогнанном ядре Core i7 с 6 гигабайтами, поэтому я не думаю, что это машина.
Вот мой код, чтобы принести записи, которые я в нерест 8 потоков задать для одного значения из одного столбца с помощью строки ключа:
ColumnPath сра = нового ColumnPath(); cp.Column_family = "Standard1"; cp.Column = utf8Encoding.GetBytes ("сайт"); string key = (1 + sRand.Next (9)) + "." + (1 + sRand.Next (1000000)); ColumnOrSuperColumn logline = client.get («Keyspace1», key, cp, ConsistencyLevel.ONE);
Спасибо за любые идеи
Мы определенно не можем поместить их все в память, но записи 10mil не кажутся много. Как люди, имеющие дело с миллиардами записей? –
Ключ должен хранить как можно больше в ОЗУ, а не на диске. Чтобы обрабатывать миллиарды записей, вы должны распространять их на нескольких компьютерах и использовать их в целом. Вот очень хорошая статья [1] о том, как это достигается в еще одном популярном решении NoSQL от Riak. Многие аспекты, обсуждаемые в этой статье, также применимы к Кассандре, поскольку они основаны на одних и тех же фундаментальных идеях. [1]: https://wiki.basho.com/display/RIAK/An+Introduction+to+Riak –