2010-07-23 4 views
2

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

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

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

ответ

2

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

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

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

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

Кассандра вика утверждает [2]:

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

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

+0

Я тоже хотел бы использовать свою электронную почту адрес как ключ и идентификатор GUID в качестве столбца. Таким образом, у вас есть одна колонка и много строк. Таким образом, данные могут быть распределены по кластеру. – Zanson

2

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

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

Смежные вопросы