Бесполезная техника столбцов в Кассандре - схема базы данных - PullRequest
1 голос
/ 01 августа 2011

Я использую Cassandra 0.8.2

Я пытаюсь использовать технику «бесценного столбца» для настройки моей схемы Кассандры. Идея скрытого столбца заключается в следующем: имя вашего столбца становится релевантной информацией, а значение пары «имя / значение» пусто. Это используется для ускорения запросов - пример денормализации. Я хочу, чтобы имя столбца было URL-адресом обратной ссылки. Ключ строки - это UUID целевого URL обратной ссылки. Это даже хорошая идея / дизайн схемы?

Я использую очень простой пример, чтобы объяснить суть моего вопроса. Вот что я настроил с помощью Cassandra-Cli:

create column family ArticleBackLinks 
with comparator = UTF8Type
and key_validation_class = UTF8Type
and default_validation_class = UTF8Type
and column_metadata = 
[
{column_name: www.arstechnica.com, validation_class: UTF8Type},        
{column_name: www.apple.com, validation_class:UTF8Type},         
{column_name: www.cnn.com, validation_class: UTF8Type},      
{column_name: www.stackoverflow.com, validation_class: UTF8Type}, 
{column_name: www.reddit.com, validation_class: UTF8Type}
];

Я получаю ошибку:

Command not found: `create column family ArticleBackLink...

Я думаю, что моя ошибка связана с периодом, который я использую в column_name. Короче говоря, я хотел бы знать, сталкивались ли некоторые из вас с лучшими способами использовать идею «бесполезной колонны» в Кассандре? Какие-нибудь хорошие / лучшие примеры бесполезной техники колонок? Является ли моя идея даже правильным способом использования метода бесценных столбцов?

Заранее спасибо, ребята.

1 Ответ

2 голосов
/ 01 августа 2011

Я думаю, что Кассандре не нравится dot в column_name, следующие работы

[default@stackoverflow] create column family ArticleBackLinks with
...     comparator = UTF8Type and
...     default_validation_class = UTF8Type and
...     column_metadata =
...     [
...     {column_name: 'www.arstechnica.com', validation_class: UTF8Type},
...     {column_name: 'www.apple.com', validation_class:UTF8Type},
...     {column_name: 'www.cnn.com', validation_class: UTF8Type},
...     {column_name: 'www.stackoverflow.com', validation_class: UTF8Type},
...     {column_name: 'www.reddit.com', validation_class: UTF8Type}
...     ];
881b31f0-bc64-11e0-0000-242d50cf1ff7
Waiting for schema agreement...
... schemas agree across the cluster

Кстати, поскольку вы используете Cassandra 0.8.2, вы должны использовать CQL

Итак, подобное утверждение будет полезно в будущем

UPDATE <COLUMN FAMILY> [USING <CONSISTENCY> 
[AND TIMESTAMP <timestamp>] [AND TTL <timeToLive>]] 
SET name1 = value1, name2 = value2 WHERE <KEY> = keyname;

См. это


обновлено: добавлено больше мыслей в ответ на комментарий

Хорошая идея - хранить сгруппированную информацию в одном месте. Это добавляет эффективности, которую обеспечивает Кассандра.

Например, ваш случай может иметь category как RowKey, а URL будут column_name. Таким образом, на вашем внешнем интерфейсе вы можете быстро отобразить классифицированное представление, потому что вы знаете, что arstechnicia и stackoverflow попадают в группу technology, которая является rowKey. Это добавляет немного дополнительной работы при вставке данных.

Я использую Cassandra 0.6.x, поэтому, к сожалению, я не могу много рассказать о вторичном индексе, который поддерживает Cassandra 0.7.0+. Но предположительно, вы можете достичь того, что объяснялось выше, добавив столбец, скажем, category, в основной CF, индекс которого содержится в ArticleBackLink, и просто запросите с использованием CQL select... where....

.

Возможно, вы изучите вторичный индекс, который может избавить от необходимости иметь новый «индекс CF». Вы можете посмотреть на них:

  • Вторичный индекс в Кассандре 0,7
  • Cassandra Wiki FAQ

    Q: Есть ли разница между созданием вторичного индекса и созданием CF "index" вручную, такого как "users_by_country"?

    A: Да. Во-первых, при создании собственного индекса узел может индексировать данные, хранящиеся в другом узле. Во-вторых, обновления индекса и данных не являются атомарными.

...