6个版本
0.1.5 | 2020年8月9日 |
---|---|
0.1.4 | 2020年8月8日 |
#2030 in 数据结构
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