Uploaded image for project: 'camunda BPM'
  1. camunda BPM
  2. CAM-14196 Share process instance action list via CSV
  3. CAM-14296

Evaluate which third-party library to choose for CSV mapping

XMLWordPrintable

    • Icon: Sub-task Sub-task
    • Resolution: Fixed
    • Icon: L3 - Default L3 - Default
    • 7.17.0, 7.17.0-alpha4
    • None
    • None
    • None

      Library Candidates

      1. 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
      2. Open CSV
      3. 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
      4. Fast CSV
        • Pros
          • Small memory footprint => 31 KB
          • Highest performance => 5,034,953 records per second [1]
          • No transitive dependencies
      5. uniVocity
        • Pros
          • High performance => 4,050,255 records per second [1]
          • No transitive dependencies

      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.

      [1] https://github.com/osiegmar/JavaCsvBenchmarkSuite

        This is the controller panel for Smart Panels app

              tassilo.weidner Tassilo Weidner
              tassilo.weidner Tassilo Weidner
              Tassilo Weidner Tassilo Weidner
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved: