Кассандра против Кассандры + Зажечь - PullRequest
0 голосов
/ 30 апреля 2018

(одноузловой кластер) У меня есть таблица с 2 столбцами, один из которых имеет тип «текст», а другой - «BLOB-объект». Я использую драйвер C ++ Datastax для выполнения запросов на чтение / запись в Cassandra.

BLOB-объект хранит структуру C ++ (размер: 7 КБ).

Поскольку при использовании только Cassandra пропускная способность была ниже желаемой, я попытался добавить Ignite поверх Cassandra в надежде на значительное улучшение производительности, поскольку теперь данные будут считываться из ОЗУ, а не с жестких дисков. .

Однако оказалось, что после добавления Ignite производительность упала еще больше (примерно на 50%!).

Read Throughput when using only Cassandra: 21000 rows/second.
Read Throughput with Cassandra + Ignite: 9000 rows/second.

Поскольку я храню структуру C ++ в Blob Cassandra, Ignite API использует сериализацию / десериализацию при записи / чтении данных. Это причина падения производительности (учитывая размер структуры, то есть 7 КБ), или это падение вообще не ожидается и, возможно, что-то не так в конфигурации?

Кассандра: 3.11.2 RHEL: 6,5

Конфигурации для Ignite такие же, как указано здесь .

Я получил значительное улучшение пропускной способности Ignite + Cassandra, когда использовал сериализацию в необработанном режиме. Теперь пропускная способность увеличилась с 9000 строк в секунду до 23000 строк в секунду. Но тем не менее, он не значительно превосходит Кассандру. Я все еще надеюсь найти еще несколько настроек, которые улучшат это в дальнейшем.

Я добавил более подробную информацию о конфигурациях и коде клиента на github .

1 Ответ

0 голосов
/ 04 мая 2018

Похоже, вы получаете по одному на каждый ключ в этом тесте для Ignite, и вы не вызывали loadCache до него. В этом случае при каждом получении Ignite отправляется на Cassandra, чтобы получить значение из него, и только после этого сохраняет его в кеше. Поэтому я бы порекомендовал вызывать loadCache перед сравнительным тестированием или, по крайней мере, тестировать те же ключи, чтобы дать возможность Ignite хранить ключи в кеше. Если вы считаете, что у вас уже есть все данные в кешах, пожалуйста, поделитесь кодом, в который вы также записываете данные в Ignite.

Кроме того, вы вызываете "grid.GetCache" в каждом потоке - это не займет много времени, но вам определенно следует избегать таких вещей в тесте производительности, когда вы уже измеряете время.

...