Кассандра, внедряющая индексы высокой мощности - PullRequest
0 голосов
/ 24 января 2012

Как известно, Кассандра великолепна по показателям с низким количеством элементов и не так хороша по показателям с большим количеством элементов. В моем семействе столбцов есть поле для хранения значения URL. Естественно, поиск этого конкретного значения в большом наборе данных может быть медленным.

В качестве решения я предложил взять первые символы URL и сохранить их в отдельных столбцах, например test.com/abcd будет храниться в виде столбцов (ab, test.com/abcd). Поэтому, когда необходимо выполнить поиск по определенному значению URL-адреса, я могу сузить его в 26 * 26 раз, сначала выполнив поиск по "ab", а затем - только путем поиска точного URL-адреса в полученном наборе результатов.

Выглядит ли это как рабочее решение для уменьшения количества URL-адресов в Cassandra?

Ответы [ 2 ]

2 голосов
/ 24 января 2012

Если вам нужно, чтобы это было действительно быстро, вы, вероятно, захотите использовать отдельную таблицу со значением, которое вы ищете в качестве ключа столбца. Поиск по ключевым префиксам обычно выполняется быстрее, чем поиск по столбцам в реализациях BigTable.

1 голос
/ 23 августа 2013

Проблема заключается в том, что после использования индекса низкого кардинальности необходимо будет выполнить последовательное сканирование, чтобы, наконец, получить запрашиваемый один определенный URL-адрес.

Как упоминал Крис Шейн, вы можете создать отдельное семейство столбцов для построения инвертированного индекса:

Column Family 'people'

ssn   | name     | url
----- | ------   | ---
1234  | foo      | http://example.com/1234
5678  | bar      | http://hello.com/world



Column Family 'urls'

url                      | ssn   
------------------------ | ------
http://example.com/1234  | 1234   
http://hello.com/world   | 5678   

Недостатком является то, что вам нужно самостоятельно поддерживать целостность своего индекса вручную.

...