2013-07-03 1 views
0

Я использую Cassandra для хранения больших данных.Те же данные, хранящиеся в разных таблицах в Cassandra

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

Будет ли это влиять на производительность?

То, что я сделал прямо сейчас, это чтение одной записи из очереди, толкать ее на пять таблиц, которые я создал в Кассандре. Если записи в одной таблице занимают около 10 М памяти, то в пяти таблицах она займет 50 Мб памяти? Есть ли лучший способ хранить дублированные данные в Кассандре?

спасибо.

+0

Почему вы толкая его к пяти таблиц? Разумеется, не дублирование 5x не спасет память, или если вам не нужно объяснять, что вы имеете в виду лучше! – user2003470

+0

Поскольку для выполнения этих запросов мне может понадобиться построить пять таблиц. – user2513857

+0

Я знаю, как я разработал колонку familis, не очень хорошо. Запросы: select * from where host in ('nj', 'ny'); выберите * из a где user_id в ('122', '134'); выберите * из модуля where («Запрос», «Получить»); выберите * из заказа по метке времени; выберите count (distinct user_id) из a; выберите count (*) order by timestamp; ... Я не знаю, как их объединить в один стол. Параметры в разделе «IN» должны быть первичным ключом. Если я создаю несколько первичных ключей, он всегда выдает исключение. Большое спасибо. – user2513857

ответ

0

Если я создаю несколько первичных ключей, он всегда выдает исключение.

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

CREATE TABLE timeline (
    user_id varchar, 
    tweet_id uuid, 
    author varchar, 
    body varchar, 
PRIMARY KEY (user_id, tweet_id)); // PK consists of two columns! 

Для вашей модели данных я хотел бы попробовать что-то вдоль линий:

CREATE TABLE timeline (
    user_id varchar, 
    module varchar, 
    host varchar, 
    body varchar, 
PRIMARY KEY (user_id, module, host)); 
+0

Большое спасибо за ответ. Но первичный ключ должен быть уникальным, не так ли? Поэтому я должен использовать log_usage_id для первичного ключа. Еще одна вещь, с таблицей, которую вы разработали выше, если я хочу запустить запрос «select * from timeline where host = 'nj», он будет генерировать исключение, так как модуль первичного ключа имеет ограничения на хост. Я могу запустить запрос, например, «select * from timeline», где module = 'getRequest' и host = 'nj'. – user2513857

+0

Вот почему я хочу использовать несколько таблиц. Для выбора * из таблицы, где host ('nj', 'ny'), мой первичный ключ (log_usage_id, host). Что касается выбора * из таблицы, где модуль в ('getRequest', 'getResponse'), мой первичный ключ (log_usage_id, module). – user2513857

+0

Для составного ключа не каждая строка должна быть уникальной. Пока компоненты составного ключа уникальны, все в порядке! Пример для ясности: у нас есть ключ с userid и car_colour, у пользователя с id 1 может быть красный автомобиль, а у пользователя с id2 может быть красный автомобиль. Эти два элемента при объединении уникальны. –

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