# Модель данных

**URL:** <https://discuss.elastic.co/t/topic/115298>\
**Category:** Вопросы на русском языке\
**Created:** [January 12, 2018, 12:59pm UTC](https://discuss.elastic.co/t/topic/115298 "2018-01-12T12:59:04Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![rususlasan](https://avatars.discourse-cdn.com/v4/letter/r/b38774/32.png) [@rususlasan](https://discuss.elastic.co/u/rususlasan)\
**Post date:** [January 12, 2018, 12:59pm UTC](https://discuss.elastic.co/t/topic/115298/1 "2018-01-12T12:59:04Z")

</div>

Доброго времени суток.

Пытаюсь применить elasticsearch для анализа логов тестирования, но не могу определиться с моделью данных(маппингом). Проблема в том что тесты имеют иерархическую структуру, на верхнем уровне находятся, например 10 тестов, каждый из которых состоит из нескольких шагов, которые, в свою очередь, тоже могут состоять из нескольких шагов и т.д., т.е. вложенность может быть "в глубину" на 10 и у каждого шага свой результат(PASS/FAIL). Если внутренний шаг имеет статут FAIL это еще не означает, что все шаги выше него тоже будут FAIL.  
Все это необходимо для построения запросов следующего типа:  
взяв тест со статусом FAIL получить внутренний шаг который не прошел и наоборот, взяв определенный шаг(его имя) посмотреть его историю(в составе какого теста/шага он проходил/не проходил). Так же если какой-то шаг упал, сохраняется сообщение с ошибкой и по части этого сообщения хотелось бы получить упавший тест/шаг.  
Корректно ли записывать в elastic результат теста как обьект со всей вложенной структурой?  
Или лучше записывать много мелких объектов, например результаты каждого шага записывать как отдельный документ в котором содержится информация связывающая его с породившими его шагами и тестом (в данном случае будем много дублирующей информации).

Может я совсем не правильно понимаю концепцию, но что-то застрял и мыли закончились.  
Буду благодарен за любые подсказки.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [January 12, 2018, 2:58pm UTC](https://discuss.elastic.co/t/topic/115298/2 "2018-01-12T14:58:35Z")

</div>

А какой размер ожидается у этого индекса? Сколько будет этих тестов самого верхнего уровня и какой размер будет у все дерева для этого теста?

---

<div class="post-metadata">

**Author:** ![rususlasan](https://avatars.discourse-cdn.com/v4/letter/r/b38774/32.png) [@rususlasan](https://discuss.elastic.co/u/rususlasan)\
**Post date:** [January 12, 2018, 7:46pm UTC](https://discuss.elastic.co/t/topic/115298/3 "2018-01-12T19:46:00Z")

</div>

В идеале хочется хранить все данные тестов, а это ежедневно 11 дженкинс джоб, в каждой от 10 до 56 тестов, каждый из которых, как я и писал, состоит из многих шагов(от 1-го до 10-ти).  
Сами лог файлы ежедневно занимают порядка 400мб и это около 1млн строк, но не вся информация нужна, думаю, половина точно отсечется.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [January 12, 2018, 7:52pm UTC](https://discuss.elastic.co/t/topic/115298/4 "2018-01-12T19:52:28Z")

</div>

И сколько дней это все будет храниться?

---

<div class="post-metadata">

**Author:** ![rususlasan](https://avatars.discourse-cdn.com/v4/letter/r/b38774/32.png) [@rususlasan](https://discuss.elastic.co/u/rususlasan)\
**Post date:** [January 12, 2018, 7:54pm UTC](https://discuss.elastic.co/t/topic/115298/5 "2018-01-12T19:54:46Z")

</div>

Об этом еще не думал, но могу с уверенностью сказать, что 30ти дней будет вполне достаточно.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [January 12, 2018, 8:23pm UTC](https://discuss.elastic.co/t/topic/115298/6 "2018-01-12T20:23:24Z")

</div>

Я бы попробовал и так и так и посмотрел, что получиться. У вас маленький объем данных, так что можно в любой момент все данные переиндексировать. Я думаю, что главный вопрос здесь не в том, как вы будете искать - поиск будет работать и в том и в другом случае примерно одинаково. Но вот если вы начнете агрегировать результаты, то могут начаться проблемы.

А у вас глубина имеет какое-то конкретное значение? То есть все тесты на 1-м уровне это проэкты, на 2-м группы, на 3-м классы, на 4-м методы и т.д.?

---

<div class="post-metadata">

**Author:** ![rususlasan](https://avatars.discourse-cdn.com/v4/letter/r/b38774/32.png) [@rususlasan](https://discuss.elastic.co/u/rususlasan)\
**Post date:** [January 12, 2018, 8:37pm UTC](https://discuss.elastic.co/t/topic/115298/7 "2018-01-12T20:37:52Z")

</div>

По поводу тестов, конкретное количество уровней не назову. Для тестирования используется robot framework, запускается тестовый сценарий состоящий из списка тестов, тесты состоят из кейвордов, кейворды тоже из кейвордов и тд. Для отдельно взятого теста, можно определить структуру вложенности, но для всех выделить общую - нет.

Спасибо за совет, буду дальше изучать документацию и попробую для начала вариант с дублированием информации, мне он кажется проще, нежели вложенная структура, особенно с точки зрения построения запросов.  
Очень вам благодарен!

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [January 12, 2018, 8:42pm UTC](https://discuss.elastic.co/t/topic/115298/8 "2018-01-12T20:42:05Z")

</div>

Я спросил про уровни потому, что каждый уровень будет представлен в схеме. Если уровни что-то означают, то их можно было бы назвать соответсвенно, и это упростило-бы написание вложенных запросов.

---

<div class="post-metadata">

**Author:** ![rususlasan](https://avatars.discourse-cdn.com/v4/letter/r/b38774/32.png) [@rususlasan](https://discuss.elastic.co/u/rususlasan)\
**Post date:** [January 12, 2018, 8:49pm UTC](https://discuss.elastic.co/t/topic/115298/9 "2018-01-12T20:49:04Z")

</div>

Интересно, с этой стороны я не думал. Попробую реализовать и с данной стороны - конкретизировать кол-во уровней. Как правило в основном "глубина" 3-4.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [February 9, 2018, 8:49pm UTC](https://discuss.elastic.co/t/topic/115298/10 "2018-02-09T20:49:28Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
