Skip to content

Latest commit

 

History

History
68 lines (65 loc) · 4.98 KB

README.md

File metadata and controls

68 lines (65 loc) · 4.98 KB

Запуск програми

Метод main класу com.streamlined.dataprocessor.Driver отримує як параметри теку файлів даних і назву властивості основної сутності Person, для якої формуються статистичні дані. Наприклад, можливі значення назви властивості eyeColor, hairColor, favoriteMeals (містить перелік улюблених страв, розділених комами).

Опис сутностей

Основна сутність com.streamlined.dataprocessor.entity.Person Фізична особа

Атрибути

  • ім'я name
  • день народження birthday
  • стать sex
  • колір очей eyeColor
  • колір волосся hairColor
  • вага weight
  • зріст height
  • країна походження countryOfOrigin
  • країна громадянства citizenship
  • перелік улюблених страв favoriteMeals (строки, розділені комами)

Додаткова сутність com.streamlined.dataprocessor.entity.Country Країна походження або країна громадянства особи

Атрибути

  • назва name
  • континент розташування continent
  • столиця capital
  • населення population
  • площа square

Зразки файлів даних та результату

наведені за посиланнями

https://github.com/streamlined2/data-processor/tree/main/src/main/resources

https://github.com/streamlined2/data-processor/tree/main/src/main/resources/data

Вимірювання часу парсингу для різної кількості потоків

Тестовий набір був попередньо створений за допомогою класу com.streamlined.dataprocessor.datagenerator.PersonDataGenerator із параметрами PERSON_COUNT (загальна кількість сутностей) 1_000_000, та FILE_COUNT (кількість файлів) 100.

Вимірювання виконане за допомогою тесту com.streamlined.dataprocessor.parser.MultithreadParsePerformanceTest.measureParseTime

  1. Number of threads 1, parsing duration 10566 msec
  2. Number of threads 1, parsing duration 8124 msec
  3. Number of threads 2, parsing duration 5235 msec
  4. Number of threads 4, parsing duration 3231 msec
  5. Number of threads 8, parsing duration 2840 msec
Тривалість парсингу для одного потоку виміряно двічі, бо другий і наступні результати менші через буферизацію на рівні операційної системи, тож перший результат завищений і може бути відкинутий.

Збільшення кількості потоків вдвічі призводить до прискорення парсингу, але швидкість зростає повільніше, ніж вдвічі, через обмеження інших складових системи і втрати часу на координацію потоків.

Час парсингу значень однієї властивості сутності для такого ж набору даних за допомогою Jackson Streaming API (тест com.streamlined.dataprocessor.parser.MultithreadParsePerformanceTest.measureStreamingParseTime) значно менший, що свідчить про перевагу даного методу. Крім того, він потребує лише фіксований обсяг пам'яті буферу для збереження даних перед опрацюванням, без виділення пам'яті для створення повної колекції сутностей.

  1. Number of threads 1, parsing duration 4671 msec via Streaming API
  2. Number of threads 1, parsing duration 4616 msec via Streaming API
  3. Number of threads 2, parsing duration 2461 msec via Streaming API
  4. Number of threads 4, parsing duration 1721 msec via Streaming API
  5. Number of threads 8, parsing duration 1247 msec via Streaming API