データ フィードをサブスクライブし、そこから INSERT/DELETE メッセージのインデックス値を使用して構造を作成および維持します。効率的な方法で断片的な更新を処理できるアルゴリズムを知っているかどうか、集まった知識人に尋ねたいと思います。一般に、バッチ更新には 2 ~ 6 個のそのようなメッセージが含まれます。
配列の推定サイズは、約 1000 要素です。
バッチ更新は、特定のインデックスでアイテムの挿入または削除を規定する、インデックス順に並べられたメッセージのリストとして到着します。アレイ内のほとんどのチャーンは、その終了よりも開始に近いと予想されます。
いくつかの基本的な処理を行うことで、バッチの影響を受ける範囲と全体的なサイズ デルタを特定できるため、影響を受けない配列のテール セクションを 1 回だけ移動できます。
同様に、最初の要素の前と最後の要素の後に一定量の空き領域を維持して、最小限のコピーを行うことができます。
その他の最適化には、次のような更新の認識が含まれます。
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 を使用していることを付け加えておく必要があります。
ヒント、ヒント、提案は大歓迎です。
乾杯
マイク