Кассандра и суперколонны
У меня следующий вопрос: возможно ли создать семейство столбцов в Кассандре, которое будет выглядеть так, как показано ниже, и как определить его структуру:
Users = { //CF
AlexS : { //row key
Address : { //supercolumn
state: "NJ",
country: "US",
phone : { //super column
zip: "00283",
number : { // supercolumn
home: "23756511",
mobile : "23756512"
}
}
}
}
}
2 ответа
Вложенный супер столбец в супер столбце для четырех уровней? Насколько я знаю, это невозможно. Потому что вам нужно указать, ссылаясь на то, какое семейство столбцов этой текущей вставки вы хотите, чтобы оно было. Обратите внимание на следующее: вы можете определить семейство столбцов верхнего уровня для семейства столбцов типа super. Тогда вы можете иметь несколько суперколонок в этом семействе суперколонок, и эти суперколонки будут иметь несколько пар столбец = значение, которые называются подколонками. Например,
list Users;
Using default limit of 100
-------------------
RowKey: AlexS
=> (super_column=Address,
(column=country, value=US, timestamp=1331614891360000)
(column=state, value=NJ, timestamp=1331614891355000))
=> (super_column=number,
(column=home, value=23756511, timestamp=1331614891406000)
(column=mobile, value=23756512, timestamp=1331614891406001))
=> (super_column=phone,
(column=zip, value=00283, timestamp=1331614891396000))
1 Row Returned.
Elapsed time: 21 msec(s).
Еще один вариант - сохранить часть или всю пользовательскую сущность как JSON, поскольку именно так вы ее представляете. Затем, если вам нужно сделать обратный поиск, просто напишите свой собственный индекс для этого. В этом случае ваш ключ - "AlexS", тогда у вас будет столбец "Адрес", который будет содержать представление JSON (или любую сериализацию, которую вы хотите использовать) из данных адреса.
Затем, если вы хотите искать по номеру телефона, у вас будет домашний индекс с ключом = номер телефона, а затем столбец для каждого идентификатора пользователя.
Это довольно общий подход с Кассандрой.