2016-09-30 3 views
0

Предположим, у нас есть несколько потоков событий. Некоторые из них загружают справочные данные в таблицы событий hazelcast, а другие являются фактическими процессорами событий.Как установить приоритет на потоки событий в wso2cep?

Моя цель заключается в том, что при запуске сервера wso2cep он будет запускать те потоки событий, которые загружают справочные данные в таблицы событий орехового дерева, а затем запускают другие потоки.

Это поможет нам поддерживать согласованность исходных данных во всех потоках событийных процессоров.

+0

Другими словами, можем ли мы запустить и остановить каждый отдельный поток событий вручную? – Obaid

ответ

0

Я проверил hazelcast внешний кластер и кажется, что это дополнительные накладные расходы, необходимо создать DataSerializable класс для каждого типа к таблицам.

Итак, я решил, как показано ниже для хранения размера/справочные данных для СЕР:

  1. Для полностью открытого исходного кода проекта, я пойду, как я уже говорил в другом ответе разместил меня и, пожалуйста, прочитайте комментарии там, специальность 2 (Обейд) & 3rd (Grainier).

  2. Для коммерческих проектов я поеду на voltdb.

Спасибо всем, особенно @Grainier.

0

Я не вижу другого варианта, кроме загрузки внутри отдельных планов выполнения. Возможны два варианта:

  1. Используйте триггер для периодической загрузки эталонных данных из РСУБД в Hazelcast. Фактический процесс будет использоваться из таблицы Hazelcast (этот план выполнения приведен ниже)
  2. Загрузить из СУБД и кешировать его.

Таким образом, на данный момент, мои вопросы:

  1. Какой из них лучше с точки зрения использования памяти?
  2. Какая из них лучше с точки зрения скорости обработки событий?
  3. Пожалуйста, предложите, есть ли другой лучший способ.

План выполнения

@Plan:name('ExecutionPlan') 

/* define streams/tables and write queries here ... */ 
/* Facts/Events streams definition */ 
@Import('actions:1.0.0') 
define stream actions (meta_name string, correlation_id int); 

@Export('userActions:1.0.0') 
define stream userACtions (meta_username string, meta_actionname string); 

/* Dimension tables(Event Tables) definition */ 
-- table from RDBMS 
@from(eventtable = 'rdbms' , datasource.name = 'PG' , table.name = 'users') 
@IndexBy('id') 
define table DBUsers (id int, name string); 

-- table from Hazelcast 
@from(eventtable = 'hazelcast', collection.name='hzUsers') 
@IndexBy('id') 
define table hzUsers (id int, name string); 

/* Load dimension tables, from RDBMS to Hazelcast, periodically using trigger */ 
define trigger periodicTrigger at every 30 sec; 

from periodicTrigger join DBUsers 
select DBUsers.id as id, DBUsers.name as name 
insert into hzUsers; 

/* Actual execution plan */ 

from actions as A 
join hzUsers as H 
on A.correlation_id == H.id 
select H.name as meta_username, A.meta_name as meta_actionname 
insert into userACtions; 
+0

Что вы имели в виду под «Загрузка из РСУБД и кеширования» ?. Вы имеете в виду доступ к таблице РСУБД напрямую? Или использовать таблицы РСУБД из каждого плана выполнения и периодически кэшировать его в таблицы памяти? И сколько планов выполнения мы смотрим? И каков интервал кэширования? – Grainier

+0

Под «Загрузка из РСУБД и кеширования»: я имею в виду «доступ к таблицам РСУБД из каждого плана выполнения и периодическое кэширование его в таблицы памяти». И сколько планов выполнения мы смотрим? : Это может быть 30-50. И каков интервал кэширования ?: В зависимости от вариантов использования, но в большинстве случаев это может быть один раз в день, а для нескольких - от 10 секунд. – Obaid

+0

Если мы рассмотрим время чтения каждой таблицы событий, оно несколько похоже на In-Memory (то же VM) Grainier

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