Skip to content

CSVCoder 0.0.4

Latest

Choose a tag to compare

@github-actions github-actions released this 01 Jan 04:33
5f936d8

CSVCoder 0.0.4

Other Changes

  • refactor: deduplicate code, remove unused code, improve CI/CD (5f936d8)

Benchmark Results

Click to expand benchmark results
[0/1] Planning build
Building for production...
[0/2] Write swift-version--3A98693DF01E6000.txt
[1/5] Write sources
[4/6] Compiling CSVCoderMacros CSVIndexedMacro.swift
[5/6] Compiling CSVCoder CSVDecoder.swift
[5/8] Write sources
[8/9] Compiling CSVCoderTestFixtures TestModels.swift
[9/10] Compiling CSVCoderBenchmarks HardwareInfo.swift
Build of product 'CSVCoderBenchmarks' complete! (10.19s)
running Raw Parse 1M rows (Iterate Only)... done! (5625.67 ms)
running Raw Parse 1M rows (Iterate + String)... done! (6060.75 ms)
running Raw Parse 100K Quoted Rows (Iterate Only)... done! (450.64 ms)
running Raw Parse 100K Quoted Rows (Iterate + String)... done! (530.52 ms)
running Decode 1K rows (simple)... done! (12.03 ms)
running Decode 10K rows (simple)... done! (114.11 ms)
running Decode 100K rows (simple)... done! (1188.34 ms)
running Decode 1M rows (simple)... done! (12385.73 ms)
running Decode 10K rows (complex, 8 fields)... done! (303.27 ms)
running Decode 100K rows (complex, 8 fields)... done! (2736.97 ms)
running Decode 10K rows (quoted fields)... done! (105.92 ms)
running Decode 10K rows (50 columns wide)... done! (844.05 ms)
running Decode 10K rows (500-byte fields)... done! (340.99 ms)
running Decode 100K rows (numeric fields)... done! (1124.77 ms)
running Decode 50K orders (18 fields, optionals)... done! (2476.56 ms)
running Decode 100K transactions (13 fields)... done! (3845.81 ms)
running Decode 100K log entries (12 fields)... done! (4080.83 ms)
running Decode 10K stress-quoted (nested quotes, newlines)... done! (108.42 ms)
running Decode 50K Unicode-heavy rows... done! (603.47 ms)
running Decode 1K rows (10KB fields)... done! (766.73 ms)
running Decode 1K rows (200 columns wide)... done! (327.91 ms)
running Encode 1K rows... done! (8.28 ms)
running Encode 10K rows... done! (67.73 ms)
running Encode 100K rows... done! (708.67 ms)
running Encode 1M rows... done! (6341.55 ms)
running Encode 10K rows (quoted fields)... done! (55.74 ms)
running Encode 10K rows (500-byte fields)... done! (315.32 ms)
running Encode 50K orders (18 fields, optionals)... done! (1000.83 ms)
running Encode 100K rows to Data... done! (613.38 ms)
running Encode 100K rows to String... done! (591.36 ms)
running Decode 1K rows with snake_case conversion... done! (12.55 ms)
running Decode 1K rows with flexible date parsing... done! (536.99 ms)
running Decode 1K rows with flexible number parsing... done! (700.49 ms)
running Decode 100K rows (sequential, p=1)... done! (2550.62 ms)
running Decode 100K rows (parallel, p=all)... done! (2050.15 ms)
running Decode 1M rows (parallel, p=all)... done! (42485.14 ms)
running Encode 100K rows (sequential, p=1)... done! (571.42 ms)
running Encode 100K rows (parallel, p=all)... done! (246.71 ms)
running Encode 1M rows (parallel, p=all)... done! (2522.13 ms)
running Decode 100K from file (parallel)... done! (2487.10 ms)
running Encode 100K to file (parallel)... done! (486.89 ms)
running Mixed: Decode + Transform + Encode 10K... done! (182.87 ms)
running Mixed: Filter + Aggregate 100K orders... done! (2613.24 ms)
════════════════════════════════════════════════════════════════════════
                    CSVCoder Benchmark Suite
════════════════════════════════════════════════════════════════════════

Hardware:
  CPU:      Apple M1 (Virtual)
  Cores:    3 total (3P + 0E)
  Memory:   7 GB

Software:
  OS:       Version 15.7.2 (Build 24G325)
  Swift:    6.2+
  Build:    Release

════════════════════════════════════════════════════════════════════════


name                                               time               std        iterations
-------------------------------------------------------------------------------------------
Raw Parse 1M rows (Iterate Only)                    1888373041.000 ns ±   2.43 %          3
Raw Parse 1M rows (Iterate + String)                2033232792.000 ns ±   3.14 %          3
Raw Parse 100K Quoted Rows (Iterate Only)            146072084.000 ns ±   4.96 %          3
Raw Parse 100K Quoted Rows (Iterate + String)        170585667.000 ns ±   6.62 %          3
Decode 1K rows (simple)                                3713167.000 ns ±  14.36 %          3
Decode 10K rows (simple)                              37930041.000 ns ±   0.50 %          3
Decode 100K rows (simple)                            388280500.000 ns ±   4.29 %          3
Decode 1M rows (simple)                             4109932541.000 ns ±   2.64 %          3
Decode 10K rows (complex, 8 fields)                  100891000.000 ns ±  10.48 %          3
Decode 100K rows (complex, 8 fields)                 896302709.000 ns ±   3.64 %          3
Decode 10K rows (quoted fields)                       35414875.000 ns ±   0.58 %          3
Decode 10K rows (50 columns wide)                    284072584.000 ns ±   2.33 %          3
Decode 10K rows (500-byte fields)                    113264542.000 ns ±   0.77 %          3
Decode 100K rows (numeric fields)                    371084208.000 ns ±   1.88 %          3
Decode 50K orders (18 fields, optionals)             826619084.000 ns ±   1.62 %          3
Decode 100K transactions (13 fields)                1250223042.000 ns ±   4.73 %          3
Decode 100K log entries (12 fields)                 1227192500.000 ns ±  21.33 %          3
Decode 10K stress-quoted (nested quotes, newlines)    35378125.000 ns ±   4.02 %          3
Decode 50K Unicode-heavy rows                        187145416.000 ns ±  17.71 %          3
Decode 1K rows (10KB fields)                         268664750.000 ns ±  14.28 %          3
Decode 1K rows (200 columns wide)                    110969708.000 ns ±   6.68 %          3
Encode 1K rows                                         2389750.000 ns ±  46.66 %          3
Encode 10K rows                                       19455083.000 ns ±  30.30 %          3
Encode 100K rows                                     252983625.000 ns ±  12.18 %          3
Encode 1M rows                                      2000760083.000 ns ±  12.14 %          3
Encode 10K rows (quoted fields)                       18305708.000 ns ±   3.01 %          3
Encode 10K rows (500-byte fields)                    104931042.000 ns ±   1.08 %          3
Encode 50K orders (18 fields, optionals)             330624333.000 ns ±   2.17 %          3
Encode 100K rows to Data                             193927333.000 ns ±  10.73 %          3
Encode 100K rows to String                           194850041.000 ns ±   4.41 %          3
Decode 1K rows with snake_case conversion              3871292.000 ns ±  14.80 %          3
Decode 1K rows with flexible date parsing            180241250.000 ns ±   1.85 %          3
Decode 1K rows with flexible number parsing          216465375.000 ns ±  17.98 %          3
Decode 100K rows (sequential, p=1)                   861428209.000 ns ±   3.49 %          3
Decode 100K rows (parallel, p=all)                   710027750.000 ns ±   7.05 %          3
Decode 1M rows (parallel, p=all)                   14221885750.000 ns ±   1.33 %          3
Encode 100K rows (sequential, p=1)                   188691792.000 ns ±   2.47 %          3
Encode 100K rows (parallel, p=all)                    82414000.000 ns ±   0.45 %          3
Encode 1M rows (parallel, p=all)                     838160666.000 ns ±   2.77 %          3
Decode 100K from file (parallel)                     769300667.000 ns ±  20.14 %          3
Encode 100K to file (parallel)                       157407458.000 ns ±   9.65 %          3
Mixed: Decode + Transform + Encode 10K                61664417.000 ns ±   3.71 %          3
Mixed: Filter + Aggregate 100K orders                848897250.000 ns ±   5.85 %          3

Installation

Swift Package Manager:

dependencies: [
    .package(url: "https://github.com/g-cqd/CSVCoder.git", from: "0.0.4")
]