Модель данных Cassandra / BigTable - каков наилучший подход для построения индексов? - PullRequest
2 голосов
/ 23 июля 2010

Я нахожусь в процессе преобразования MySQL в Cassandra для PenWag.com.В Cassandra я храню пользователей, отключенных от GUID, но пользователи входят в систему с помощью электронной почты, а не GUID (очевидно).GUID как ключ для пользователей имеет смысл для меня больше, чем электронная почта по двум причинам.С практической точки зрения кажется, что слишком громоздко менять или удалять / добавлять строки со всеми своими столбцами SuperColumns.С теоретической точки зрения, это все тот же пользователь, почему его ключ должен меняться?

Тем не менее, вот мой вопрос: я строю индекс в отдельном ColumnFamily, отображая email-> GUID для поддержки входа в систему.Это стандартный тип CF, где имя столбца - электронная почта, а значение - GUID.Это стандарт, а не супер, чтобы избежать загрузки всего SC для каждого отображения.Поддержать «изменить адрес электронной почты» легко, это просто столбец удаления / добавления.Но похоже, что альтернативой этому является сохранение индекса в виде строк вместо столбцов, где ключом строки является электронная почта, а в столбце хранится GUID.Удаление / добавление этих строк не будет обременительным, так как есть только столбец (GUID) для управления.

Кажется, что любой подход работает.Каковы плюсы и минусы каждого?Есть ли лучшая практика?

Ответы [ 2 ]

2 голосов
/ 06 декабря 2010

Нильс правильный; один ряд на пользователя будет правильным способом сделать это вручную.

Я квалифицирую это, потому что в версии 0.7 у вас может быть просто столбец электронной почты в строке с остальными вашими пользовательскими данными keyed by UUID и попросить Кассандру проиндексировать его: http://www.riptano.com/blog/whats-new-cassandra-07-secondary-indexes

2 голосов
/ 28 июля 2010

Поскольку у меня нет практического опыта работы с Cassandra или подобными базами данных, вам нужно принять мой ответ с небольшим количеством соли:)

Если бы вы сохранили каждое отображение в виде столбца, используяадрес электронной почты в качестве имени столбца, это будет означать одну строку, содержащую огромное количество столбцов.Согласно Википедии [ 1 ] :

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

Это может привести к значительным накладным расходам блокировки, если все сопоставления хранятся в одной строке.

Вики Cassandra сообщает [ 2 ] :

Ключ строки - это то, что определяет, на каких машинных данных хранится.

Это заставляет меня поверить, что поиск на основе ключа строки эффективнее, чемна имя столбца.На основании этой информации я бы предложил использовать адрес электронной почты в качестве ключа строки и сохранить GUID в столбце.

...