6 个版本
0.1.6 | 2024年4月21日 |
---|---|
0.1.5 | 2024年4月17日 |
#417 in 数据结构
每月331次下载
2MB
3.5K SLoC
ninjabook
ninjabook 是用 Rust 实现的轻量级且高性能的订单簿,旨在处理二级和交易数据。
支持 Python 和 Rust 语言!
入门
在 examples
目录中找到 Python 和 Rust 的 hello_world
程序。
性能
运行了一组基准测试,展示了与简单的 Vec
实现和500级别固定大小的订单簿的实际案例场景。
基准测试使用 300,000 条二级订单簿数据事件。这些数据分为两部分
- 前200,000个事件用于预热并验证所有订单簿版本发布相同的BBO和前5级。
- 最后100,000个用于实际的基准测试。
测试的场景包括
- 处理事件并流式传输最佳买卖价
- 处理事件并流式传输前5个买卖价
以下是结果
bench | 迭代次数 | 时间 | ns/iter |
---|---|---|---|
ninjabook_bbo | 100,000 | 5.0108 毫秒 | 50.108 纳秒 |
fixed_500_bbo | 100,000 | 49.018 毫秒 | 490.18 纳秒 |
naive_bbo | 100,000 | 90.552 毫秒 | 905.52 纳秒 |
ninjabook_top5 | 100,000 | 11.797 毫秒 | 117.97 纳秒 |
fixed_500_top5 | 100,000 | 54.693 毫秒 | 546.93 纳秒 |
naive_top5 | 100,000 | 95.644 毫秒 | 956.44 纳秒 |
贡献
为了添加更好的版本,创建一个新的文件,实现与 orderbook.rs
相同的方法(包括测试)并将改进的订单簿添加到 bench optimal_vs_naive.rs
。只有性能优于 orderbook.rs
的订单簿将被考虑。最后,将性能日志添加到 Pull Request 中,可以直接复制粘贴 cargo bench
输出的内容。
任何问题、重构、文档和测试也欢迎。如果您有任何疑问,请随时在这里联系。
注意事项
只需要做一些外观上的改进。将 Orderbook
核心函数重构为 Trait
,添加文档,并可能添加更多测试/基准/示例。
依赖关系
~9–19MB
~258K SLoC