Пример использования DataModel для входа в Cassandra

Я пытаюсь создать таблицу журнала приложений в Cassandra,

CREATE TABLE log(
  yyyymmdd varchar, 
  created timeuuid,  
  logMessage text,
  module text, 
  PRIMARY KEY(yyyymmdd, created)
);

Теперь, когда я пытаюсь выполнить следующие запросы, он работает должным образом,

select * from log where yymmdd = '20182302' LIMIT 50;

Вышеупомянутый запрос без группировки, своего рода глобальный.

В настоящее время я сделал вторичный индекс для «модуля», поэтому я могу выполнить следующее:

select * from log where yymmdd = '20182302' WHERE module LIKE 'test' LIMIT 50;     

Теперь меня беспокоит отсутствие вторичного индекса. Есть ли эффективный способ запроса на основе модуля и получения данных (или) Есть ли лучший дизайн?

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


person Harry    schedule 22.02.2018    source источник


Ответы (1)


Для выборки на основе module и даты вы можете использовать только другую таблицу, например:

CREATE TABLE module_log(
  yyyymmdd varchar, 
  created timeuuid,  
  logMessage text,
  module text, 
  PRIMARY KEY((module,yyyymmdd), created)
);

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

Также учтите, что если вы создали вторичный индекс только для поля module - у вас могут возникнуть проблемы со слишком большими разделами (я предполагаю, что у вас очень ограниченное количество значений module?).

P.S. Вы используете чистую Кассандру или DSE?

person Alex Ott    schedule 22.02.2018
comment
Я думал об этом решении, но оно ограничивало его запросом: 'select * from log, где yymmdd =' 20182302 'LIMIT 50; ', Потому что мне тоже нужны консолидированные логи модуля :( - person Harry; 22.02.2018
comment
Да, я использую чистый apache Cassandra - person Harry; 22.02.2018
comment
Как мы обсуждали ранее, даже если у меня есть вторичный индекс, если я сделаю запрос по partitionId, он перейдет непосредственно к узлу раздела, а затем будет искать таблицу вторичного индекса, верно? Также за один день мы с трудом пересекаем 100 тысяч логов. - person Harry; 22.02.2018
comment
Это немного сложнее - он все равно может поразить несколько машин, чтобы найти значения. В этом сообщении блога вторичные индексы описаны более подробно: datastax. ru / dev / blog / - person Alex Ott; 22.02.2018
comment
Учитывая ваше решение, есть ли способ прочитать все консолидированные журналы модуля? - person Harry; 22.02.2018
comment
Это действительно зависит от ваших требований - вы можете вставить в несколько таблиц из своего приложения или вставить в одну таблицу и использовать вторичные индексы, или материализованные представления для запроса по другим комбинациям столбцов, или даже использовать индексы SASI (doanduyhai.com/blog/?p=2058). Все это зависит от требований к задержке и т. Д. - например, как часто к этим данным будут обращаться? - person Alex Ott; 22.02.2018
comment
Это журнал, поэтому он будет часто запрашиваться - person Harry; 22.02.2018
comment
Но также какая задержка требуется - загрузка ее для пользовательской консоли или что-то в этом роде? Если это действительно требует очень низкой задержки, то несколько таблиц, адаптированных для этого, могут работать лучше. - person Alex Ott; 22.02.2018
comment
Проверьте это: stackoverflow.com/questions/49135405/ - person Harry; 07.03.2018
comment
Мне нужна ваша помощь в этом: stackoverflow.com/questions/49219277/ < / а> - person Harry; 11.03.2018