1

データベースに格納された単純なオブジェクトの巨大なJavaリストがあり、インデックス列によって要素の位置を維持しています。私は休止状態を使用していますが、コレクションとして保存するには大きすぎるため、リストを自分で管理しています。

リストにいくつかの変更 (追加、削除、移動) を行った後、インデックス列を手動で更新し、休止状態で削除する新しい要素をそれぞれ挿入して、データベースの変更を永続化したいと考えています。

さて、(1)リストデルタを可能な限り少ないSQLステートメントに結合する効率的なアルゴリズムはありますか?または(2)すべての変更を記録して段階的に適用する必要がありますか?

4

1 に答える 1

1

巨大なリストのセグメントのインデックスの変更を維持してみることができます。たとえば、1000 個のアイテムのリストで、次の場合:

  • 99 と 199 の位置に新しい項目を挿入し、
  • アイテム 2 を位置 6 に移動し、
  • アイテム277を削除し、

HQL で次のことができます。

  • アイテムを削除 277
  • update item set index = 6 ここで index = 2
  • update item set index = index-1 where index between 3 and 6 (そして、前のアイテムではありません - オーバーラップに注意してください)
  • update item set index = index+1 ここで、index は 278 から 1000 の間です
  • update item set index = index+2 ここで、index は 199 から 276 の間です
  • update item set index = index+1 ここで、index は 99 から 198 の間です
  • 項目 99 と 200 を挿入

アルゴリズムの詳細に取り組む準備ができていません。コレクション セグメントのリストと各セグメントのオフセットを維持する必要があるとだけ言います。

于 2011-02-02T14:50:26.480 に答える