У нас есть таблица, в которой хранятся наши данные, разделенные файлами. Один файл от 200MB до 8GB в json - но, очевидно, много накладных расходов. Уплотнение необработанных данных резко снизит. Я проглотил около 35 ГБ данных json, и только один узел получил несколько более 800 МБ данных. Возможно, это связано с «написанием горячих точек», но мы пишем только один раз и только для чтения. Мы не обновляем данные. В настоящее время у нас есть один раздел на файл.Один большой раздел или несколько меньших, но более распределенных разделов для запросов диапазона в Кассандре?
Используя вторичные индексы, мы ищем разделы в базе данных, которые содержат определенную геолокацию (= первый запрос), а затем берут результат этого запроса для запроса диапазона временного диапазона найденных разделов (= второй запрос). Это может быть даже весь файл, если необходимо, но в 95% запросов запрашиваются только куски раздела.
У нас есть коэффициент репликации 2 на кластере из 6 узлов. Данные довольно равномерно распределены, каждый узел владеет 31,9% до 35,7% (эффективными) данными в соответствии с nodetool status *tablename*
.
Хорошее качество чтения является ключевым для нас.
Мои вопросы:
- Насколько велика слишком велик для раздела с точки зрения объема или строки размера? Есть ли правило для этого?
- Для производительности диапазона запросов: лучше ли разделять наши «большие» разделы, чтобы иметь более мелкие разделы? Мы построили нашу схему с «большими» разделами, потому что мы думали, что когда мы будем задавать запросы на раздел, было бы хорошо иметь все это на одном узле, чтобы данные могли быть легко извлечены. Обратите внимание, что данные также доступны на одной реплики в связи с РФ 2.
Извините, я неправильно использовал коэффициент репликации слов. На самом деле у нас есть RF 2 ('CREATE KEYSPACE, что бы ни было с репликацией = {'class': 'NetworkTopologyStrategy', 'dc1': '2'} AND durable_writes = true;'). Я отредактировал вопрос соответствующим образом. Будет ли чтение перенаправлено на реплику, если «главный» узел уже находится под давлением? – j9dy
RF = 2 просто означает, что 2 (прочитанные) запросы на одном и том же разделе могут попасть в 2 разных узла. Если это произойдет, зависит от вашего драйвера C *.Однако это не приведет к увеличению пропускной способности ** одного запроса **. – xmas79
Спасибо за разъяснение. Я думаю, что это отлично подходит для нашего использования. Наш первый запрос (см. Выше) обычно возвращает несколько файлов (= разделы), которые содержат искомое поле. Поскольку они (идеально) расположены на разных узлах, мы ударим несколько узлов в последующем запросе. Драйвер, который знает о репликации, может перенаправить запрос на реплика вместо этого, когда другой узел получил запрос для выполнения уже. Вы знаете, является ли драйвер Datastax C * «репликой»? – j9dy