如何有效地应用数据库中巨大列表的多个位置更改?

时间:2011-02-02 09:25:39

标签: java sql algorithm collections delta

我有一个巨大的简单对象列表,存储在数据库中,通过索引列维护元素的位置。我使用hibernate但自己管理列表,因为它太大而无法存储为集合。

对列表进行一些更改(添加,删除,移动)后,我想通过手动更新索引列并通过hibernate插入新的删除元素来持久保存数据库中的更改。

现在,(1)是否有一种有效的算法如何将列表增量与尽可能少的sql语句相结合 - 或者(2)我是否必须记录每个更改并逐步应用它?

1 个答案:

答案 0 :(得分:1)

您可以尝试维护巨大列表的段的索引更改。例如,在1000个项目的列表中,如果您:

  • 在第99和199位插入新项目
  • 将第2项移至第6位,
  • 并删除第277项,

您可以使用HQL执行以下操作:

  • 删除项目277
  • 更新项目集索引= 6其中index = 2
  • 更新项目集索引=索引-1,其中索引介于3和6之间(并且它不是之前的项目 - 请注意重叠)
  • 更新项目集索引=索引+ 1,其中索引介于278和1000之间
  • 更新项目集索引=索引+ 2,其中索引介于199和276之间
  • 更新项目集索引=索引+ 1,其中索引介于99和198之间
  • 插入项目99和200

我还没准备好研究算法的细节,只是说你需要维护一个收集段列表和每个段的偏移量。