我订阅了一个数据提要,并使用 INSERT/DELETE 消息上的索引值创建和维护一个结构。我想问一下组装好的行家,他们是否知道任何可以有效处理零碎更新的算法——通常批量更新包含两到六个这样的消息。
数组的估计大小约为 1000 个元素。
批量更新作为按索引排序的消息列表到达,它规定在给定索引处插入或删除项目。我预计数组中的大部分流失都比结束更接近开始。
我突然想到,通过一些基本处理,我可以确定受批次影响的范围和整体大小增量,因此只移动一次数组的未受影响的尾部。
同样,我可以在第一个元素之前和最后一个元素之后保留一定数量的可用空间,以尽可能减少复制量。
其他优化包括识别更新,如下所示:
DELETE 10, INSERT 10 - effectively a replace which requires no copying
INSERT 10, DELETE 11 - as above
DELETE 10, DELETE 10, DELETE 10 - bulk deletion can be optimised into one copy operation
INSERT 11, INSERT 12, INSERT 13 - bulk insertion can be optimised into one copy operation
等等。
但是,我对执行识别步骤的开销持谨慎态度——它带有前瞻和回溯的味道,这可能比简单地执行复制需要更多时间。
鉴于数组的预期大小,树结构似乎重量级:一些基本性能测试表明二叉树或自平衡树(在本例中为红黑树列表实现)仅在大约 15K - 20K 个元素后才开始显示性能优势:数组副本在较小的尺寸下明显更快。我可能应该补充一点,我正在使用 Java 进行此实现。
欢迎任何提示、提示或建议。
干杯
麦克风