Я пытаюсь использовать Drools в качестве механизма правил для отношения грамматики к структуре сопоставления семантики. База правил уже сейчас превышает 5000 правил и будет расширяться. В настоящее время при использовании Drools чтение файла drl, содержащего правила, и создание базы знаний занимает много времени при каждом запуске программы. Есть ли способ создать базу знаний один раз и сохранить ее в каком-либо постоянном формате, который можно быстро загрузить с возможностью повторного создания базы знаний только при внесении изменений?
быстрая загрузка базы знаний drools
Ответы (2)
Да, drools может сериализовать базу знаний во внешнее хранилище, а затем снова загрузить эту сериализованную базу знаний.
Итак, вам нужен цикл, который загружается из drl, компилируется, сериализуется. Затем второй цикл, использующий сериализованную версию.
Я использовал это с некоторым успехом, сократив время загрузки с 1 минуты 30 до 15-20 секунд. Кроме того, это также снижает требования к генерации кучи/perm.
Проверьте API для точных методов.
Моя первая мысль — сохранить базу знаний как можно дольше. Если только вы не создаете несколько баз знаний из разных наборов правил и возможных комбинаций слишком много, держитесь этих баз знаний. В одном приложении, над которым я работаю, в одной базе знаний есть все правила, поэтому мы относимся к ней как к синглтону.
Однако, если это невозможно или ваше приложение работает не так долго, я не знаю, предоставляет ли сам Drools какие-либо способы его ускорения. Запустив проект Drools 5.0 через отладчик, я вижу, что база знаний Drools дает мне Serializable. Я полагаю, что было бы быстрее десериализовать базу знаний, чем повторно анализировать правила. Но будьте осторожны при разработке своего приложения с учетом этого! Вы используете интерфейсы по какой-то причине, и реализация может измениться без предупреждения.