Как смоделировать таблицу в Кассандре для выбора, где условие - PullRequest
0 голосов
/ 23 октября 2018

Предположим, у меня есть таблица, как показано ниже

create table userevent(id uuid,eventtype text,sourceip text,user text,sessionid text,roleid int,menu text,action text,log text,date timestamp,PRIMARY KEY (id,eventtype));

 id                                   | action | date                     | eventtype | log      | menu      | roleid | sessionid | sourceip     | user
--------------------------------------+--------+--------------------------+-----------+----------+-----------+--------+-----------+--------------+-------
 6ac47b10-d6bb-11e8-bb9a-59dfa00365c6 |  Login | 2018-10-01 04:05:00+0000 |  DemoType |  demolog |  demomenu |      1 |    Demo_1 | 121.11.11.12 |  Aqib
 62119cf0-d6bb-11e8-bb9a-59dfa00365c6 |  Login | 2018-05-31 22:35:00+0000 | DemoType3 | demolog3 | demomenu3 |      3 |    Demo_3 | 121.11.11.12 | Jasim
 5ebb4600-d6bb-11e8-bb9a-59dfa00365c6 |  Login | 2018-05-31 22:35:00+0000 | DemoType3 | demolog3 | demomenu3 |      3 |    Demo_3 | 121.11.11.12 | Jasim

Итак, как я могу выбрать, если я хочу, чтобы в моей таблице были полные данные, которые удовлетворяют чему-то вроде user = "нечто" или eventtype = "что-то" и т. Д.

Потому что, когда я пытался с простым запросом выбора с условием, где условие user = 'Aqib', это дало ошибку.Я знаю, что моделирование данных в Кассандре не так, как в SQL.Любой может помочь мне, это очень заметно.

Как изменить создание таблицы выше, чтобы удовлетворить запросы ниже,

select * from userevent where user='Aqib';
select * from userevent where eventtype='DemoType';
select * from userevent where action='Login'; 

и т. Д.

1 Ответ

0 голосов
/ 29 ноября 2018

Перво-наперво: в запросах Cassandra нет OR

Если в своих запросах вы всегда ограничиваете поля типа user или eventtype или action, тогда я предлагаю вам создатьотдельная таблица для каждого из этих типов запросов, одна таблица, которая поддерживает запросы с полем user, в котором partition key будет поле user, и другая таблица с eventtype в качестве partition key для поддержки запросов споле eventtype и одна таблица для поля action и т. д. Это соответствует моделированию данных Cassandra для создания таблиц на основе ваших запросов.

Поэтому таблица, поддерживающая запросы с помощью user, должнабыть:

CREATE TABLE userTable (
    user text,
    id uuid,
    eventtype text,
    sourceip text,
    sessionid text,
    roleid int,
    menu text,
    action text,
    log text,
    PRIMARY KEY (user)
);

Таблица, поддерживающая запросы с помощью eventtype, должна быть:

CREATE TABLE eventtypeTable (
    eventtype text,
    id uuid,
    user text,
    sourceip text,
    sessionid text,
    roleid int,
    menu text,
    action text,
    log text,
    PRIMARY KEY (eventtype)
);

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

Затем, когда вы выполняете свои запросы (например, в коде приложения), если вы знаете, что у вас есть значение поля user, тогда запрашиваете таблицу, в которой поле user является partition key иограничьте значение поля user, например:

select * from userTable where user='Aqib';

, иначе, если вы знаете, что у вас есть значение поля eventtype, вам следует запросить таблицу, в которой partition key является полем eventtypeнапример:

select * from eventtypeTable where eventtype='DemoType';

и аналогично для других полей и их таблиц.

...