大家好,我从2014年开始专业地编码,数据库的性能一直是我的一大优先事项.
在处理大数据传输和剖析我整个职业生涯的报告后,我终于坐下来建立一个全面的IO/流库,以解决Java标准库中的系统性瓶颈.
这是一个使用 CSV 解析和高通量数据库批量加载来构建的开源软件包.
动词和慢装模式已去,以标准RFC 4180合规为主,为开口CSV和杰克逊系列化假设倒置,并有"春靴"启动模块.
我花了好几年时间优化高容量的ETL数据管道, 即使启用了重写优化旗,网络回转和字符串分析引擎在上百万行的成本也迅速增加.
为了解决这个问题,我为JVM建造了Fusio:一个零依赖性,开源功能的I/O管道引擎,它处理流文件转换,并加速了本土数据库批量摄取.
GitHub Repository: https://github.com/tim-warehouseorganier/fusio Maven Central: Core Conception: 克服"装饰洋葱"传统依赖深层装饰分级(-).
每层都引入了虚拟方法的发报上层,结构数据包接,以及同步/锁定.
Fusio将这些组成阶段连接成一个单一的评价圈来覆盖原始可变内存块。
在终端操作运行之前, 资源寿命周期不会打开或被执行, 资源寿命周期会安全地置于执行线条内, 并且不被放在你的羊肉圈外。
屠宰 JDBC 批次性能 Fusio真正发光的地方是将原始的 CSV 边界直接加工成操作表.
Fusio格式不是将文本转换成内存对象,只是为了将它们序列化,而是将它们排回标准参数化的语句中去,而是懒散地排成专门流(,内存被绑定在~16KB)并直接通过本土数据库引擎将其管道: PostgreSQL:向流式二进制行协议的地图.
MySQL & MariaDB:液管本土管线.
基准结果(100K行通过多克输入MySQL 8.4): (默认 JDBC驱动程序状态): 287秒 QQ 490.9 MB 重+ (最佳实践): ~1.5秒 Q219.8 MB 重活 Fusio: 420毫秒 QQ 5.2 MB 重活 Fusio绕过标准SQL查询规划步骤完全用于批量有效载荷,其运行~3.7x的速度快于有文献记载的JDBC驱动程序最佳操作方法,减少42x对象分配.
Key Architecture Optimations Zero-Allocation Laysing:引擎会大量排列视图和零复制片段,而不是急于构建每个字段或行段的新字符串实例.
字节平分:UTF-8行平分()发生在解码前的生字节上.
由于一个或永远不能出现在多字节序列中,过滤或计数工作量从不支付被丢弃行的内存处理处罚.
平台-Aware Off-Heap Mmap:包括零拷贝相继扫描仪倒置后,可以自动移动策略来处理Windows页面卡和Linux廉价的软页错误配置之间的性能差异.
项目成熟与稳定 为确保生产安全,集成测试套件验证了字节-精确的对战行回转(commas,回击,混合引号,emojis)与MySQL和Postgres中真实,活地活地未被模拟的多克事件.
公用 1.x API 合约被封禁 防止被打破更改.
它完全免费,在Apache 2.0下获得许可,并在Central上重新索引.
我很想听听你对API脚印,内存布局的想法 或者你认为我下一步应该评估的边缘数据库架构!