Кластер Cassandra с плохой производительностью и стабильностью вставки

Мне нужно хранить около 250 числовых значений в секунду для каждого клиента, что составляет около 900 тыс. Чисел в час.Скорее всего, это будет не запись на целый день (вероятно, 5-10 часов в день), но я разделю свои данные на основе идентификатора клиента и дня считывания.Максимальная длина строки составляет около 22–23 м, что все еще приемлемо.Тем не менее, моя схема выглядит так:Пространство ключей имеет коэффициент репликации 2, просто для тестирования снитч ---- +: = 1 =: + ---- и ---- +: = 2 =: + ---- .Я знаю, что фактор репликации 3 - это более производственный стандарт.Затем я создал небольшой кластер на серверах компании, три виртуализированные машины с голым железом с 2 процессорами x 2 ядра, 16 ГБ ОЗУ и большим объемом пространства.Я с ними в гигабитной LAN.Кластер работает на базе nodetool.Вот код, который я использую для проверки моей настройки:Я придумал код, читая сообщения здесь, а также в других блогах и на сайтах.Как я понял, для клиента важно использовать несколько потоков, поэтому я и сделал это.Я также пробовал использовать асинхронные операции.В конечном итоге, независимо от того, какой подход я использую, один пакет выполняется за 5-6 секунд, хотя это может занять до 10. То же самое, если я ввожу только один пакет (то есть только ~ 65 тыс. Столбцов) илиесли я использую тупое однопоточное приложение.Честно говоря, я ожидал большего.Тем более что у меня на ноутбуке с локальным экземпляром получается более-менее схожая производительность.Вторая, возможно, более важная проблема - это исключения, с которыми я сталкиваюсь непредсказуемым образом.Эти двое:com.datastax.driver.core.exceptions.WriteTimeoutException: тайм-аут Cassandra во время запроса на запись при согласованности ONE (требовалась 1 реплика, но только 0 подтвердили запись)иcom.datastax.driver.core.exceptions.NoHostAvailableException: все узлы, которые пытались выполнить запрос, завершились неудачно (попытка: /192.168.1.102:9042 (com.datastax.driver.core.TransportException: [/192.168.1.102:9042] Подключениебыл закрыт), /192.168.1.100:9042 (com.datastax.driver.core.TransportException: [/192.168.1.100:9042] Соединение закрыто), /192.168.1.101:9042 (com.datastax.driver.core.TransportException: [/192.168.1.101:9042] Соединение закрыто))В нижней строке я что-то не так делаю?Стоит ли реорганизовать способ загрузки данных или изменить схему.Я попытался уменьшить длину строки (так что у меня 12-часовые строки), но это не имело большого значения.============================== Обновление:Я был груб и забыл вставить пример кода, который я использовал после ответа на вопрос.Он работает достаточно хорошо, однако я продолжаю свои исследования с KairosDB и двоичный перенос с помощью Astyanax.Похоже, я могу добиться гораздо большей производительности с ними по сравнению с CQL, хотя у KairosDB могут быть некоторые проблемы, когда он перегружен (но я работаю над этим), а Astyanax немного многословен для использования на мой вкус.Тем не менее, вот код, может где-то ошибаюсь.Номер слота семафора не влияет на производительность при превышении 5000, он почти постоянный.
7 голосов | спросил Aleksandar Stojadinovic 12 Jpm1000000pmMon, 12 Jan 2015 15:38:15 +030015 2015, 15:38:15

0 ответов


Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132