Я изменил всю кодовую базу с Thrift
на CQL
, используя datastax java driver 1.0.1
и cassandra 1.2.6..
с бережливостью я получал частые тайм-ауты с самого начала, я не мог продолжить ... Принятие CQL, таблиц, разработанных в соответствии с этим, я добился успеха и меньше тайм-аутов ....
Благодаря этому я смог вставить огромные данные, которые не работали экономно ... Но после этапа папка с данными около 3,5 ГБ. Я получаю частые исключения из-за тайм-аута записи. даже я снова делаю тот же предыдущий рабочий вариант использования, который теперь также вызывает исключение тайм-аута. ЕГО СЛУЧАЙНАЯ СЛУЧАЙНАЯ РАБОТА СНОВА НЕ РАБОТАЕТ ДАЖЕ ПОСЛЕ СВЕЖЕЙ НАСТРОЙКИ.
ЖУРНАЛ СЕРВЕРА CASSADNRA
это режим частичного журнала сервера cassandra DEBUG, тогда я получил ошибку:
Исключение клиента:
Caused by: com.datastax.driver.core.exceptions.WriteTimeoutException: Cassandra timeout during write query at consistency ONE (1 replica were required but only 0 acknowledged the write)
at com.datastax.driver.core.exceptions.WriteTimeoutException.copy(WriteTimeoutException.java:54)
at com.datastax.driver.core.ResultSetFuture.extractCauseFromExecutionException(ResultSetFuture.java:214)
at com.datastax.driver.core.ResultSetFuture.getUninterruptibly(ResultSetFuture.java:169)
at com.datastax.driver.core.Session.execute(Session.java:107)
at com.datastax.driver.core.Session.execute(Session.java:76)
Инфраструктура: машина 16 ГБ с кучей 8 ГБ, выделенной для cassandra, процессор i7 .. Я использую Cassandra с ОДНИМ узлом с этим yaml, настроенным на тайм-аут, все остальное по умолчанию:
- read_request_timeout_in_ms: 30000
- range_request_timeout_in_ms: 30000
- write_request_timeout_in_ms: 30000
- truncate_request_timeout_in_ms: 60000
- request_timeout_in_ms: 30000
СЛУЧАЙ ИСПОЛЬЗОВАНИЯ: я использую вариант использования, в котором комбинации (терминология моего проекта) хранятся в кассандре .... В настоящее время тестируется хранение 250 000 комбинаций со 100 параллельными потоками .. каждый поток хранит одну комбинацию ... реальный случае мне нужно поддерживать десятки миллионов, но для этого потребуется другое оборудование и многоузловой кластер ...
Сохранение ОДНОЙ комбинации занимает около 2 секунд и включает в себя:
- 527 запросов INSERT INTO
- 506 запросов UPDATE
- 954 запроса SELECT
100 параллельных потоков параллельно хранят 100 комбинаций.
Я обнаружил случайное поведение WRITE TIMEOUTS, иногда оно работает до 200 000, затем выбрасывает таймауты и иногда не работают даже для 10k комбинаций. СЛУЧАЙНОЕ ПОВЕДЕНИЕ.