2015-09-24 85 views
2

我在想,如果有人可以點我在正確的方向,以幫助我設計一個高級算法來解決,如一個問題解釋如下,使用Drools的。Drools的高級算法設計計費系統

讓我們考慮一個計費系統,其中對於給定的月份和給定的服務,我可以從數據庫中獲取數百萬條記錄,如呼叫詳細記錄(CDR),即客戶端ID和許多其他字段想用規則來推理。問題是,我不僅需要根據個人記錄採取行動,還要基於適用於某些聚合的條件。例如,假設在達到特定閾值數量後(即,500之後的每個CDR更便宜),將對所有CDR應用不同的價格。實際上,規則會比這更復雜。

現在,我敢肯定,這個想法是不是所有的這些記錄插入一同進入發動機(KieSession),之後解僱所有的規則。因此,我需要一些Object,我們稱之爲「會計元素」,我可以從每個處理過的記錄中收集所有信息。在這種情況下,我會做:

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

而且裏面的Drools的規則,我需要更新我的會計對象,例如統計爲每個客戶/服務處理的記錄數量。

而且,因爲我也將要採取基於此會計對象的決定,這也將有在KieSession要插入,並保持有貫穿整個會議,對不對?

我很欣賞你能給我關於可能的解決方案/實施任何意見接近使用Drools的這樣一個問題,如果它不請你告訴我,如果我說的是有道理,還是指正。謝謝!

回答

0

你的問題沒有太多,所以沒有太多可能是錯誤的。

只有幾句話:

  1. 交替插入和fireAllRules逐一可能不是最優的。準備將批量N作爲參數。
  2. 規則引擎是CPU綁定的,讀取CDR是I/O綁定的。如果最小化流逝的時間非常重要,那麼通常的原則適用於此。
  3. 處理由客戶端分類的CDR可能是有利的。穩定的排序(維護日期/時間順序)可以獨立運行。
  4. 有可能(或拿出將來)客戶羣體有作爲一個整體進行監控。只有排序標準的變體。