2016-02-26 5 views
3

Я выполнял некоторые оценочные эксперименты в своей системе, проверяя время, затраченное на вставку различных (по количеству правил) оснований правил и количества фактов в Память. Примечание. Я не использую устойчивость. Версия Drools: 6.3.0.Final.Время для вставки фактов в увеличение рабочей памяти в зависимости от размера базы правил

Таблица - Основание правила (RB), Время вставки (TTI), время в миллисекундах.

Основываясь на приведенной выше таблице, я хотел бы знать, почему время для включения фактов в память увеличивается при увеличении размера базы правил?

Я не эксперт в Drools.

+1

Вы используете настойчивость? Это был бы один преступник. Другое дело, что в сеансе левая часть вашего правила (когда часть) оценивается во время вставки факта. Таким образом, чем больше правил, тем больше eval, тем больше времени. – pandaadb

+0

Я не использую стойкость. Большое спасибо. – WillEnsaba

+0

Итак, я не уверен на 100%, но я читал об этом. Хочешь попробовать? В ваших правилах добавьте еще один подходящий объект, только любой случайный объект будет делать. Это приведет к тому, что ВСЕ ваши правила будут оценивать true только в том случае, если этот объект доступен. Теперь вставьте свои 3/6/12k фактов в свою сессию. НЕ вставляйте этот последний объект до самого конца. Это должно заставить ваш движок оценивать false в O (1) для всех фактов, а затем приводить в соответствие все факты при последнем дополнительном факте, который позволяет ваши правила. – pandaadb

ответ

2

Включение, отвод и обновление информации при мгновенной оценке условий, насколько это возможно при заданном состоянии сети. Это не только правила ; это имеет значение количество ссылок на тип (ы) этого факта.

Вы наблюдаете увеличение, меньшее, чем O (N), N - количество правил, которое прекрасно соответствует теории.

Число 12 000 правил довольно необычно (если только вы не изобрели правила только для проверки масштабируемости). Если они реальны, и если вас беспокоит производительность, вы должны пересмотреть структуру правил.

Редактировать из-за комментария OP.

«Число ссылок типа факта» - это количество раз, когда определенный тип (= тип) встречается в шаблоне. В ваших примерах

rule x when 
$spec1 : Specification () 
$spec2 : Specification ($spec1.id ==2, id == 3, value > $spec1.value) 

rule "x+1" when 
$spec1 : Specification () 
$spec2 : Specification ($spec1.id ==3, id == 4, value > $spec1.value) 

У вас есть 2 правила, но 4 ссылки на Specification. Это связано с созданием более сложной сети в Engine. Кроме того, ограничение, зависящее от , исключительно по данным в , первое картинка ($spec1.id ==X), но встречающаяся в секунда Узор почти наверняка является анти-шаблоном.

Использование плохих конструкций, подобных этим, практически не ограничено замедлением RBS, а не только Drools. Видимо, вы действительно просто проверяете масштабируемость. Придерживание хорошо написанных правил может дать вам более убедительные результаты.