2015-10-12 2 views
2

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

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

Работа с Phantom-DSL в Scala (Драйвер Java Datastax), мое приложение падает при увеличении размера данных.

Вот бланк из моей заявки.

[error] - com.websudos.phantom - All host(s) tried for query failed (tried: /127.0.0.1:9042 (com.datastax.driver.core.OperationTimedOutException: [/127.0.0.1:9042] Operation timed out)) 

И вот cassandra logs.

Я опубликовал журналы Cassandra в пастебине, потому что они были довольно большими, чтобы быть встроенными в ответы.

Я не могу понять причины этой аварии. Я попытался увеличить тайм-аут и отключить кеш строк.

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

Использование моей кассандры происходит из разных источников данных. Так что записи не очень часты. Но чтение большого размера в том, что может потребоваться более 300K строк, которые затем должны быть переданы через HTTP.

+0

У вас есть пейджинг включен в java-драйвере? Если нет, включите его. Если да, попробуйте уменьшить размер страницы (я думаю, что значение по умолчанию составляет 5 тыс. Строк). Ваша проблема в том, что сборщик мусора JVM не может идти в ногу, потенциально, потому что вы слишком много времени вытаскиваете в кучу. –

ответ

0

Карты (и коллекции в целом) могут быть очень требовательными для кучи Кассандры. Изменение вашей модели данных для замены карты другой таблицей может решить ваши проблемы с gc. Но это много предположений из-за отсутствия дополнительной информации о вашем использовании Cassandra.

+0

Создание другой таблицы имеет смысл, если мне придется запрашивать определенные строки. Но сделать один большой запрос означает выполнение нескольких запросов или, по крайней мере, получение большого количества данных и преобразование их в конец приложения, что тоже очень дорого. Я не держу более 100-150 элементов карты. Я также обновил ответ с моим вариантом использования. – chbh

1

Журналы показывают значительное давление в GC (парNew 5 секунд).

Когда вы говорите: «чтения имеют большой размер, так как требуется более 300 тысяч строк», вы имеете в виду, что вы тянете 300k строк в одном запросе? Драйвер Datastax поддерживает собственный пейджинг - установите размер выборки значительно ниже (500 или 1000) и разрешите ему просматривать эти запросы, а не пытаться загрузить все 300 тыс. Строк за один проход?

Смежные вопросы