AppBoxFuture(三): 分而治之
程序员文章站
2022-03-29 11:25:06
系统数据量达到一定程度后必将采用分库分表的方式来提高系统性能,但传统的分库分表方式也必将带来更高的开发复杂程度。新一代的NewSql及NoSql数据库由于天生的分布式存储基因,既保证了能够横向扩展,又可以避免较高的开发复杂程度。AppBoxFuture框 ......
系统数据量达到一定程度后必将采用分库分表的方式来提高系统性能,但传统的分库分表方式也必将带来更高的开发复杂程度。新一代的newsql及nosql数据库由于天生的分布式存储基因,既保证了能够横向扩展,又可以避免较高的开发复杂程度。appboxfuture框架的存储引擎借鉴了新一代分布式数据库分而治之的思想,在设计实体模型时可以指定分区键,存储引擎会根据分区键创建相应的raftgroup(多个副本)。需要注意的是appboxfuture框架的分区策略与newsql不同,newsql一般采用自动分裂与合并的方式来管理分区,而框架采用的是一开始就指定分区键的方式,更类似于cassandra的分区方式,但又不同于cassandra的分区不能排序。
在设计实体模型时先要估算数据量来确定是否需要分区存储,一般的基础信息如客户信息之类的不需要分区,但订单之类的动态数据,可以根据年或月份作为分区键,如果是saas类的应用,可以用租户id + 期间作为分区键。
作者录了个演示视频演示视频链接, 简单说明一下演示内容:
- 新建车辆状态(vehiclestate)实体模型,加入vehicleid, lng, lat成员, 设置分区键为vehicleid;
- 新建测试服务并发插入8万条记录,计算每秒tps(演示视频20行 i < loopcount 应为 j < loopcount)。
在作者的虚拟机内(4c8g)的进行单分区并发插入的测试结果如下图, 虚拟机cpu已经跑满。实际单独测试存储引擎(c++)可达40000/秒,clr层代码还有优化的空间。
作者下一步的开发重点是:
- 设计与实现索引扫描api;
- 设计与实现聚合扫描api,可以并行聚合各分区;
- 实体间关系entityref, entityset实现。
如果您觉得该项目将来能帮到您,请您扫以下二维码打赏一下作者以购买测试vm;如果您有问题或bug报告,请在github提交。