-
Sub-task
-
Resolution: Fixed
-
L3 - Default
-
None
-
None
-
None
Library Candidates
- Jackson CSV
- Pros
- We have gained already good experiences with Jackson JSON and the API of Jackson CSV is pretty similar
- Our developers are already pretty familiar with Jackson JSON and don't need to learn an entirely new library
- Webapps already have a dependency on Jackson JSON; so the transitive dependencies of Jackson CSV are already present (databind, annotations)
- Actively maintained
- High performance => 3,995,294 records per second [1]
- It can be assumed that Jackson CSV has a similarly stable API as Jackson JSON which means that the effort of updating the library to a higher version is relatively low
- We have gained already good experiences with Jackson JSON and the API of Jackson CSV is pretty similar
- Pros
- Open CSV
- Pros
- Actively maintained
- Broadly used by ~ 400 other libraries
- Pros
- Apache Commons CSV
- Pros
- Small memory footprint => 50 KB
- High performance => 3,354,703 records per second [1]
- No transitive dependencies
- Very broadly used by ~ 1,000 other libraries
- Pros
- Fast CSV
- Pros
- Small memory footprint => 31 KB
- Highest performance => 5,034,953 records per second [1]
- No transitive dependencies
- Pros
- uniVocity
- Pros
- High performance => 4,050,255 records per second [1]
- No transitive dependencies
- Pros
Decision
I would go for the Jackson CSV library.
With ten releases in 2021, the Jackson CSV library has by far the most. I would describe the development of the library as the most active of those considered. Although Jackson CSV does not have the smallest memory footprint and also not the best performance, both are acceptable and completely sufficient for our use case. We have already had excellent experiences with Jackson libraries since we already use the Jackson UUID generator and the JSON mapper. In the past, updates to newer versions have always been very smooth, and the API has generally remained stable. Like the JSON mapper, Jackson CSV also uses the two transitive libraries jackson-databind and jackson-annotations. Since the webapps use the JSON mapper anyway, these libraries do not have to be added additionally.