https://github.com/streamlined2/data-processor
Parse JSON documents, validate entities, collect statistical information, format, and output as XML file
https://github.com/streamlined2/data-processor
jackson jackson-stream java-17 junit5 maven xml
Last synced: about 6 hours ago
JSON representation
Parse JSON documents, validate entities, collect statistical information, format, and output as XML file
- Host: GitHub
- URL: https://github.com/streamlined2/data-processor
- Owner: streamlined2
- Created: 2024-04-03T14:15:27.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2024-08-21T14:50:33.000Z (10 months ago)
- Last Synced: 2025-01-20T17:25:08.285Z (5 months ago)
- Topics: jackson, jackson-stream, java-17, junit5, maven, xml
- Language: Java
- Homepage:
- Size: 146 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Запуск програми
Метод 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
- Number of threads 1, parsing duration 10566 msec
- Number of threads 1, parsing duration 8124 msec
- Number of threads 2, parsing duration 5235 msec
- Number of threads 4, parsing duration 3231 msec
- Number of threads 8, parsing duration 2840 msec
Тривалість парсингу для одного потоку виміряно двічі, бо другий і наступні результати менші через буферизацію на рівні операційної системи, тож перший результат завищений і може бути відкинутий.
Збільшення кількості потоків вдвічі призводить до прискорення парсингу, але швидкість зростає повільніше, ніж вдвічі, через обмеження інших складових системи і втрати часу на координацію потоків.Час парсингу значень однієї властивості сутності для такого ж набору даних за допомогою Jackson Streaming API (тест com.streamlined.dataprocessor.parser.MultithreadParsePerformanceTest.measureStreamingParseTime) значно менший, що свідчить про перевагу даного методу. Крім того, він потребує лише фіксований обсяг пам'яті буферу для збереження даних перед опрацюванням, без виділення пам'яті для створення повної колекції сутностей.
- Number of threads 1, parsing duration 4671 msec via Streaming API
- Number of threads 1, parsing duration 4616 msec via Streaming API
- Number of threads 2, parsing duration 2461 msec via Streaming API
- Number of threads 4, parsing duration 1721 msec via Streaming API
- Number of threads 8, parsing duration 1247 msec via Streaming API