Хранение больших объектов справочных данных в Drools

Я ищу способ хранить большие объекты в Drools в течение длительного периода времени (то есть не как факты, которые добавляются и удаляются из сеанса).

Я читал, что Drools работает с использованием баз знаний и сеансов (без сохранения состояния и состояния) и что базы знаний содержат определения знаний приложений, но не содержат данных времени выполнения.

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

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

1 ответ

Решение

Не уверен, насколько велик "большой" (конечно, всегда есть компромисс между производительностью), но вы также можете использовать вставленный объект для извлечения из базы данных (/cache) и получения правил доступа к значениям через метод.

 when 
    $y : AnObject (name == "car", lookupPrice > 10000 );

где AnObject.getLookupPrice() - это метод, который извлекает значение из кэшированного / сохраненного словаря.

Если объект не слишком большой, вы также можете кодифицировать (как объект) и использовать его таким же образом.

Другие вопросы по тегам