2016-12-26 3 views
1

Предположим, что у меня есть пример таблицы пользователя с полями (userid, username, dob, loc, email). У меня есть разные имена столбцов, так как у одного пользователя может быть только имя пользователя, имя пользователя и второй пользователь могут иметь идентификатор пользователя, имя пользователя, доб и третьих пользователей, могут иметь другие столбцы и т. Д. (Представляющие собой большое хранилище столбцов). Каждый пользователь может иметь свой собственный набор столбцов. Как представить это в одной таблице CQL, поскольку данные разрежены в разных столбцах. Нужно ли мне использовать несколько пользовательских таблиц для представления этой информации?Модель данных Cassandra - Семьи столбцов в таблицу CQL

Пожалуйста, предложите, как конвертировать таблицу образцов в таблицу CQL.

+0

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

+0

Спасибо, Аарон.Я предполагаю, что данные должны храниться в семействах столбцов с соответствующими значениями ключа и столбца строки и столбца. Но как только это будет сделано, как мы решаем отображать информацию в таблицах CQL. –

+0

Например, предположим, что у меня есть такие же данные: User (userid, uname, email, dob, loc, mobile, landlinenum) Поскольку cassandra поддерживает схему (динамические столбцы могут быть добавлены), может случиться, что один пользователь может иметь несколько столбцов и другой пользователь может иметь несколько других колонок (там есть строки, которые принимают одинаковое количество столбцов, а другие строки могут принимать и другие столбцы. Как мне преобразовать это в таблицу CQL, так как у меня есть разные столбцы для разных ключей строк. –

ответ

1

Я вижу, что вы просите. Нет, вы должны иметь возможность создавать все столбцы в одной таблице. Давайте предположим, что я создаю users таблицу, как это:

CREATE TABLE users(
    userid bigint, 
    username text, 
    email text, 
    dob text, 
    loc text, 
    mobile text, 
    landlinenum text, 
    PRIMARY KEY (userid)); 

А потом я ввожу несколько строк, как это:

INSERT INTO users (userid,username,email,loc,mobile) VALUES (0,'mreynolds','[email protected]','Minneapolis','111-555-1234'); 
INSERT INTO users (userid,username,email,loc,landlinenum,dob) VALUES (1,'jcobb','[email protected]','Minneapolis','111-555-3464','19620227'); 
INSERT INTO users (userid,username,email,loc,mobile) VALUES (2,'dbook','[email protected]','New York','111-555-2349'); 
INSERT INTO users (userid,username,email,loc,mobile,dob) VALUES (3,'stam','[email protected]','San Francisco','111-555-8899','19750416'); 
INSERT INTO users (userid,username,email,loc,dob) VALUES (4,'rtam','[email protected]','San Francisco','19810724'); 

Если я запускаю несвязанный запрос тянуть обратно все строки и столбцы, я вижу это:

[email protected]:stackoverflow> SELECT * FROM users; 

userid | dob  | email    | landlinenum | loc   | mobile  | username 
--------+----------+----------------------+--------------+---------------+--------------+----------- 
     2 |  null | [email protected] |   null |  New York | 111-555-2349 |  dbook 
     3 | 19750416 | [email protected] |   null | San Francisco | 111-555-8899 |  stam 
     4 | 19810724 | [email protected] |   null | San Francisco |   null |  rtam 
     0 |  null |  [email protected] |   null | Minneapolis | 111-555-1234 | mreynolds 
     1 | 19620227 | [email protected] | 111-555-3464 | Minneapolis |   null |  jcobb 

(5 rows) 

Так что это должно сказать вам пару вещей.

  1. Кассандра на самом деле не «схема-менее» в том же смысле, что и в пред-CQL-мире. Вы должны определить каждый столбец в определении таблицы.

  2. С номером 1, указанным вами, не должны указывать значение для каждого столбца.

  3. Столбцам, у которых нет, присваивается значение как «null». Помните, что они не являются истинными нулевыми значениями, они просто отображаются таким образом.

  4. В моих ВСТАВКАХ я указал только те столбцы, для которых у меня были соответствующие значения. Я не запретил другим пустым или пустым. При явной установке значения столбца в null создается надгробная плита.

Теперь, основываясь на ваших требованиях к запросам, вы обычно хотите создать таблицу для каждого требуемого запроса. У меня есть таблица «users» с ключом userid ... но действительно, насколько это полезно? Приложения обычно запрашивают такие вещи, как email или loc.

Чтобы обрабатывать электронную почту, я бы создал новую таблицу с теми же определениями столбцов, что и «users_by_email». Главное отличие (кроме названия), будет ОСНОВНОЕ определение KEY: PRIMARY KEY (email,username)

Тогда я мог бы запросить пользователь по электронной почте, как это:

[email protected]:stackoverflow> SELECT * FROM users_by_email WHERE email='[email protected]'; 

email    | username | dob  | landlinenum | loc   | mobile | userid 
--------------------+----------+----------+-------------+---------------+--------+-------- 
[email protected] |  rtam | 19810724 |  null | San Francisco | null |  4 

(1 rows) 

Вот почему, зная ваши шаблоны запросов делает разницу. В первом примере таблица «users» не может поддерживать запрос email.

+0

Спасибо Аарону за подробное объяснение. Цените свои усилия, чтобы ответить на мои вопросы. Большое вам спасибо. –

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