Ключи Cassandra и ключи кластера для хранения инвертированного индекса
Мне нужно использовать Кассандру для хранения инвертированного индекса, в котором слова и их частоты в статьях хранятся следующим образом:
word, article_title, frequency
Количество уникальных слов составляет около 40M, а количество узлов Cassandra = 2. Какой из символов лучше использовать в качестве ключа раздела или самого слова? как насчет первичного ключа?
1 ответ
TL;DR: Что касается вашего запроса, я бы определенно сказал использовать слово в качестве ключа раздела.
Если вы используете только первый символ, у вас будет только 26 разделов. Вы не хотите этого, если что-нибудь еще, вы получите горячую точку. Некоторые строки будут довольно короткими, так как не так много слов, начинающихся с определенной буквы, а другие будут очень, очень длинными, возможно, даже за пределами того, что его целесообразно использовать. Да, у Cassandra есть ограничение в два миллиарда столбцов на строку, но рекомендуется сохранить размер строки в миллионах. Вы также не хотите получать доступ ко всем словам, начинающимся с "А", если вы хотите только "АЭРОПОРТ".
Вам нужен как можно более высокий случайный разделительный ключ, чтобы строки легко рассредоточивались по кластеру. С другой стороны, он должен отражать ваши шаблоны доступа. В вашем случае вы не хотите видеть статистику для слова или набора слов. Доступ к разделу / основному разделу в основном такой же быстрый, как и в Cassandra.
Что касается ключа кластеризации, то более или менее очевидно, что вы можете использовать заголовок статьи, ИЛИ, что бы я на самом деле использовал, в качестве ключа кластера - идентификатор статьи (UUID или такой). Заголовки статей могут измениться (опечатка?), И вы, конечно, не хотите перебирать все строки, меняя заголовок.