Как эффективно применить множественные изменения позиции огромного списка в базе данных? - PullRequest
1 голос
/ 02 февраля 2011

У меня есть огромный список Java простых объектов, хранящихся в базе данных, которые поддерживают положение элементов в столбце индекса.Я использую hibernate, но управляю списком самостоятельно, поскольку он слишком велик, чтобы хранить его как коллекцию.

После внесения некоторых изменений в список (добавления, удаления, перемещения) я хочу сохранить изменения в базе данных.вручную обновляя столбцы индекса и вставляя новые, соответственно удаляя элементы, с помощью hibernate.

Теперь (1) существует эффективный алгоритм, позволяющий объединить дельту списка с как можно меньшим количеством операторов SQL - или (2)Я должен записывать каждое изменение и применять его шаг за шагом?

1 Ответ

1 голос
/ 02 февраля 2011

Вы можете попытаться сохранить изменения индекса для сегментов огромного списка. Например, в списке из 1000 элементов, если вы:

  • вставить новые позиции в позиции 99 и 199,
  • переместить элемент 2 в позицию 6,
  • и удалить пункт 277,

вы можете сделать следующее с HQL:

  • удалить запись 277
  • обновить набор элементов index = 6, где index = 2
  • обновить набор элементов index = index-1, где индекс от 3 до 6 (и это не предыдущий элемент - следите за совпадениями)
  • обновить набор элементов index = index + 1, где index между 278 и 1000
  • обновить набор элементов index = index + 2, где index между 199 и 276
  • обновить набор элементов index = index + 1, где index между 99 и 198
  • вставить позиции 99 и 200

Я не готов работать над деталями алгоритма, просто скажу, что вам нужно вести список сегментов сбора и смещения для каждого сегмента.

...