#json-file #json #io #memory #memory-mapping #mapping #memory-mapped

mmap_json_file

一个用于解析、计数、过滤JSON文件的库,使用内存映射I/O库

6个版本

0.1.5 2020年8月9日
0.1.4 2020年8月8日

#2030 in 数据结构

MIT/Apache

22KB
284

Rust和mmap

该库在crates.io上发布为mmap_json_file,可以帮助计数和过滤结构对称(json对象数组)的json文件,如下所示。

[{..}, {..}, ..]

使用内存映射I/O的想法是在Rust中检查过滤和创建另一个文件等的性能,同时将serde放在一边 😁。

这里是Linux论坛上关于这个主题的最佳阅读

功能

  • 计算JSON文件中的记录数。
  • 使用过滤器计算记录数
  • 使用条件(由调用者提供)过滤JSON文件并将其保存到指定的文件。
  • 键的唯一值。

测试

机场JSON是从位置获取的。需要下载并将其放在data/目录下。

感谢原始的mmap

一般性能似乎如下。

(以下所有测试都在macbook上运行)

cargo test --release  -- --nocapture --test-threads 1
调试
  • count_test_simple_nested_json: 计数1条记录需要256.37µs秒
  • count_test_simple_with_filter_json: 322.471µs秒。
  • count_test_simple_nested_with_filter_json: 396.664µs秒
  • count_test_simple_json: 计数1条记录需要258.594µs秒
  • filter_out_json_no_results: 675.752µs秒。
  • filter_out_json_by_value: 785.313µs秒。
  • count_airports: 690.802302ms秒。
  • count_with_filter_airports: 3.913697422s秒用于过滤57265条记录
  • filter_out_airports_in_country 3.91415908s: 秒用于过滤57265条记录
  • filter_out_airports_no_results: 3.922528546s秒用于过滤57265条记录
发布(1.1 GB - 追加16MB json多次 - 3,355,711条记录)
  • count_airports ... count_airports: 1.153728577s秒。
  • count_test_simple_json ... count_test_simple_json: 计数1条记录需要105.415µs秒
  • count_test_simple_nested_json ... count_test_simple_nested_json: 计数1条记录需要137.288µs秒
  • count_test_simple_nested_with_filter_json ... count_test_simple_nested_with_filter_json: 计数1条记录需要156.865µs秒
  • count_test_simple_with_filter_json ... count_test_simple_with_filter_json: 计数1条记录需要85.541µs秒。
  • filter_out_json_by_value ... filter_out_json_by_value: 697.84µs秒。
  • filter_out_json_no_results ... filter_out_json_no_results: 380.902µs 秒。
  • write_distinct_fields ... write_distinct_fields: 576.174µs 秒。
  • test_sum_over_field ... test_sum_over_field: 104.42µs 秒。
  • count_with_filter_airports ... count_with_filter_airports: 17.461620452 秒。
  • filter_out_airports_in_country ... filter_out_airports_in_country 17.580610223 秒: 秒。
  • filter_out_airports_no_results ... filter_out_airports_no_results: 17.333596128 秒。
  • test_sum_over_field_airport_elevation_ft ... test_sum_over_field: 17.291048913 秒。
  • write_distinct_fields_large_json ... write_distinct_fields: 22.316755059 秒。

测试结果:ok。通过 14;失败 0;忽略 0;测量 0;过滤 0

Doc-tests mmap_json_file

运行 5 个测试测试 src/lib.rs - count (行 294) ... ok 测试 src/lib.rs - count_with_filter (行 197) ... ok 测试 src/lib.rs - distinct_of_field (行 371) ... ok 测试 src/lib.rs - filter (行 47) ... ok 测试 src/lib.rs - sum_over_field (行 508) ... ok

测试结果:ok。通过 5;失败 0;忽略 0;测量 0;过滤 0

依赖

~3.5MB
~74K SLoC