# Camunda 7. Ограничения для DMN

**URL:** <https://forum.reunico.com/t/camunda-7-ogranicheniya-dlya-dmn/185>\
**Category:** DMN и таблицы решений\
**Created:** [08.Ноябрь.2023 14:40:53 UTC](https://forum.reunico.com/t/camunda-7-ogranicheniya-dlya-dmn/185 "2023-11-08T14:40:53Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![ntdim1973](https://forum.reunico.com/letter_avatar_proxy/v4/letter/n/b2d939/32.png) [@ntdim1973](https://forum.reunico.com/u/ntdim1973)\
**Post date:** [08.Ноябрь.2023 14:40:53 UTC](https://forum.reunico.com/t/camunda-7-ogranicheniya-dlya-dmn/185/1 "2023-11-08T14:40:53Z")

</div>

Добрый день!  
Подскажите, существуют ли какие либо ограничения для DMN таблиц по размеру, влияет ли размер DMN таблиц на производительность ?  
Возможно ли получить выбранную строку решения в таблице через API ?

---

<div class="post-metadata">

**Author:** ![Mstislav](https://forum.reunico.com/user_avatar/forum.reunico.com/mstislav/32/102_2.png) [@Mstislav](https://forum.reunico.com/u/Mstislav)\
**Post date:** [10.Ноябрь.2023 12:38:53 UTC](https://forum.reunico.com/t/camunda-7-ogranicheniya-dlya-dmn/185/2 "2023-11-10T12:38:53Z")

</div>

Добрый день!

Ограничений по размеру нет. Но размер таблицы (число правил в ней) влияет на производительность и на удобство ее сопровождения.

Больше правил - работает медленнее.

Повысить производительность можно отключив историю ( HISTORY\_LEVEL\_NONE)).

Раньше также встречался такой трюк - не разворачивать модель в базу, а поднимать вручную DMN engine и загружать ее из файла в память:

```auto
public class DmnApp {

  public static void main(String[] args) {

    // configure and build the DMN engine
    DmnEngine dmnEngine = DmnEngineConfiguration.createDefaultDmnEngineConfiguration().buildEngine();

    // parse a decision
    DmnDecision decision = dmnEngine.parseDecision("orderDecision", inputStream);

    Map<String, Object> data = new HashMap<String, Object>();
    data.put("status", "gold");
    data.put("sum", 354.12d);

    // evaluate a decision
    DmnDecisionTableResult result = dmnEngine.evaluateDecisionTable(decision, data);

  }

}

```

Также способно увеличить производительность (нет запроса к СУБД на извлечение модели).

> **[Benchmarking the Performance of the camunda DMN Engine | Camunda](https://camunda.com/blog/2015/12/dmn-benchmark/)**
>
> Learn about the Process and Results from a Performance Benchmark of Camunda DMN Engine introduced with Camunda Platform 7.4

---

<div class="post-metadata">

**Author:** ![Mstislav](https://forum.reunico.com/user_avatar/forum.reunico.com/mstislav/32/102_2.png) [@Mstislav](https://forum.reunico.com/u/Mstislav)\
**Post date:** [10.Ноябрь.2023 12:46:13 UTC](https://forum.reunico.com/t/camunda-7-ogranicheniya-dlya-dmn/185/3 "2023-11-10T12:46:13Z")

</div>

> [@ntdim1973](#):
>
> Возможно ли получить выбранную строку решения в таблице через API ?

Результат обработки помещается в объект класса DmnDecisionResult, а дальше вы можете с помощью API извлечь нужные данные согласно структуре вашей таблицы:

- .getSingleResult()
- .getResultList()
- .collectEntries()
- .getSingleEntry()

 ![image](https://forum.reunico.com/uploads/default/original/1X/656e01f99ffe4d40d3c99d4bb0463c276d4f2586.png)

```auto
        DmnDecisionResult result = decisionService.evaluateDecisionByKey("proposal")
.variables(variables)
.evaluate();
        Assert.assertNotEquals(result.getSingleEntry(),then)

```

---

<div class="post-metadata">

**Author:** ![Mstislav](https://forum.reunico.com/user_avatar/forum.reunico.com/mstislav/32/102_2.png) [@Mstislav](https://forum.reunico.com/u/Mstislav)\
**Post date:** [10.Ноябрь.2023 12:52:39 UTC](https://forum.reunico.com/t/camunda-7-ogranicheniya-dlya-dmn/185/4 "2023-11-10T12:52:39Z")

</div>

Если интересно по производительности, есть относительно свежий бенчмарк:

[https://dmcommunity.org/challenge/challenge-feb-2021/](https://dmcommunity.org/challenge/challenge-feb-2021/)

Параметры таблицы: 16+ тыс правил, 7 входных параметра, 3 выходных.

Camunda, конечно, в сравнении с Drools проигрывает (235 ms vs 0.059 ms). 😶

Думаю, если потюнить JVM, можно добиться бОльшей производительности.
