Кассандра - Какое разумное максимальное количество столов?
Я новичок в Кассандре. Как я понимаю, максимальное количество таблиц, которые могут быть сохранены на одно пространство ключей, равно Integer.Max_Value. Однако каковы последствия с точки зрения производительности (скорость, память и т. Д.) Такого большого количества таблиц? Есть ли какие-либо рекомендации по этому поводу?
заранее спасибо
Altober
2 ответа
Несмотря на то, что существуют законные варианты использования множества таблиц в Cassandra, они редки. Ваш вариант использования может быть одним из них, но убедитесь, что это так. Не зная больше о проблеме, которую вы пытаетесь решить, очевидно, трудно дать руководство. Очевидно, что для многих таблиц потребуется больше ресурсов. Сколько? Это зависит от настроек и использования.
Например, если у вас есть тысяча таблиц и вы выполняете запись во все из них одновременно, то возникнет конфликт между ОЗУ, так как для каждой из них будут создаваться памятные таблицы, и для каждой записываемой таблицы существуют определенные накладные расходы (насколько зависит от того, какой версия Cassandra, ваши настройки и т. д.).
Однако, если у вас есть тысяча таблиц, но вы не пишете во все из них одновременно, будет меньше споров. Затраты на каждую таблицу все еще высоки, но будет больше оперативной памяти, чтобы держать в памяти активные таблицы активной таблицы.
То же самое касается дискового ввода-вывода. Если вы одновременно читаете и записываете множество разных таблиц, диск будет выполнять гораздо больше случайных операций ввода-вывода.
Наличие большого количества таблиц не является большой проблемой, даже несмотря на то, что есть ограничение на то, сколько у вас может быть - вы можете иметь столько, сколько хотите, при условии, что у вас достаточно ОЗУ для хранения структур, которые их отслеживают. Однако наличие большого количества таблиц, одновременное чтение и запись в них будут проблемой. Это потребует больше ресурсов, чем выполнение одинакового количества операций чтения и записи в меньшее количество таблиц.
На мой взгляд, если вы можете разделить данные на несколько таблиц, даже тысячи, это выгодно.
Плюсы:
- Предположим, что в будущем вы захотите масштабировать до 10+ узлов, а если RF равен 2, данные будут равномерно распределены по узлам, что не будет реализовано.
- Другим моментом является случайный ввод-вывод, который будет большим, если вы будете читать из многих таблиц одновременно, но я не понимаю, почему существует разница, когда у вас всего одна таблица. Также вы будете искать другой ключ раздела, поэтому нет разницы в IO.
- Когда происходит сжатие, ему придется выполнять меньше работы, если оно есть только на столе. Значения из SSTables должны быть загружены в память, объединены и сохранены обратно.
Минусы:
- Наличие нескольких таблиц приведет к наличию нескольких таблиц памяти. Я думаю, что разница, добавленная этим к RAM, незначительна.
Кроме того, проверьте ссылки, они помогли мне много
http://manuel.kiessling.net/2016/07/11/how-cassandras-inner-workings-relate-to-performance/
https://www.infoq.com/presentations/Apache-Cassandra-Anti-Patterns
Пожалуйста, не стесняйтесь редактировать мой пост, я новичок в Big Data