• Как синхронизировать большие таблицы?

    voilesik
    @voilesik
    Возможно всеже стоит загрузить файл в буферную таблицу (сруктура котрой будет идентичка целевой таблице), а затем уже средствами базы данных осуществить мерж.
    Если ключем является положительное число, то возможно буфер и не понадобится. Просто загрузив файл в отрицательный диапазон значений ключа целевой таблицы можно обойтсь без буфера. Баланс между скоростью мержа и размером коммита (кол-вом модификаций в одной транцакции) можно отрегурилоровать используя относитльно небольшие блоки для обработки. Думаю этот способ может Вам подойти.

    т.е. например если у вас есть таблица типа:
    create table t_mytable (
      id integer,
      field1 type1,
      ....,
      CONSTRAINT pk_mytable PRIMARY KEY (id));
    

    и есть какие-то значения:
    1 value1 value... ...
    2 value2 value... ...
    3 value3 value... ...

    вы загружаете в нее же данные из файла инвертируя ключ, например:
    -3 valueC value... ...
    -1 valueA value... ...
    1 value1 value... ...
    2 value2 value... ...
    3 value3 value... ...


    Ну а дальше есть масса вариантов как удалить отсутвующие ключи, и обновить новыми значениями положительную часть ключей. Если интересно, могу написать, но думаю Вы можете написать его и сам.
    Ответ написан
    Комментировать