2015-09-24 6 views
2

Мне было интересно, может ли кто-нибудь указать мне в правильном направлении, чтобы помочь мне разработать алгоритм высокого уровня для решения проблемы, подобной описанной ниже, используя Drools.Дизайн алгоритма высокого уровня для биллинговой системы

Рассмотрим биллинговую систему, в которой за данный месяц и предоставленную услугу я могу получить из базы данных миллионы записей, таких как записи подробностей звонков (CDR), то есть с идентификатором клиента и многими другими полями, которые я хотите использовать, чтобы рассуждать в правилах. Дело в том, что мне нужно не только предпринимать действия на основе отдельных записей, но и основываться на условиях, которые будут применяться к определенным скоплениям. Например, предположим, что для всех CDR будет применяться другая цена после достижения определенного порогового значения (т. Е. Каждый CDR после 500-го дешевле). На самом деле правила были бы намного сложнее.

Теперь я уверен, что идея состоит в том, чтобы не вставлять все эти записи в двигатель (KieSession), а затем запускать все правила. Поэтому мне понадобится некоторый Object, назовем его «элементом учета», в котором я могу собрать всю информацию из каждой обработанной записи. В этом случае я хотел бы сделать:

for each CDR loop: 
    Insert a record; 
    Fire all the rules; 
    Delete the record; 

И внутри основных правил и Drools’ мне нужно обновить свой объект учета, например подсчитывая количество обработанных записей для каждого клиента/службы.

Кроме того, поскольку я также буду принимать решения на основе этого объекта учета, его также необходимо будет включить в KieSession и остаться там на протяжении всей сессии, верно?

Я ценю любые советы, которые вы можете дать мне относительно возможных подходов к решению или реализации с такой помощью, используя Drools, и, пожалуйста, скажите мне, что то, что я сказал, имеет смысл или исправляет меня, если это не так. Спасибо!

ответ

0

В вашем вопросе не так много, и поэтому не так много может быть неправильным.

только несколько замечаний:

  1. Переменные вставки и fireAllRules один за другим не могут быть оптимальными. Будьте готовы к размеру партии N в качестве параметра.
  2. Механизм правил связан с ЦП, получение CDR связано с i/o. Обычные принципы применяются здесь, если важно минимизировать прошедшее время.
  3. Возможно, будет полезно обрабатывать CDR, отсортированные клиентами. Стабильный вид (сохранение даты/времени) может выполняться независимо.
  4. В будущем могут быть (или подойти) группы клиентов, которые необходимо контролировать в целом. Только вариант для критериев сортировки.
Смежные вопросы