|
Ручная репликация (синхронизация данных с внешним источником) - какой оптимальный способ?
|
|||
---|---|---|---|
#18+
Есть внешний источник данных с низкой производительностью. Чтобы с ним работать, опрашиваю его раз в час и результаты кеширую в локальной таблице. Количество строк в источнике данных исчисляется тысячами, в дальней перспективе возможны десятки тысяч. С новыми или измененными данными особых сложностей нет, но есть вопрос, как работать с аннулированными (удаленными) записями. Можно добавить в локальную таблицу поле CHANGED, обновлять его при добавлении/обновлении, а затем удалять все записи, у которых CHANGED старше определенного порога (то есть которые не обновлялись или не добавлялись). Обычно именно так и делаю. Можно полностью очищать локальную таблицу, а затем грузить все заново — но предполагаю, что это не очень хороший способ. Можно грузить сырые данные во временную таблицу, использовать ее для обновления локальной таблицы, а затем с помощью full outer join получить список неактуальных данных, который можно удалить. Недавно использовал последний способ (нужна была дополнительная обработка неактуальных данных) — и он оказался на удивление производительным. Это мне с данными повезло? Или это и в самим деле хороший способ для БД? По сравнению с первым способом я вижу преимущество в том, что не нужно на каждой синхронизации обновлять поле CHANGED большинства записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2020, 15:34 |
|
Ручная репликация (синхронизация данных с внешним источником) - какой оптимальный способ?
|
|||
---|---|---|---|
#18+
Alibek B.Это мне с данными повезло? Это ты переоценил "низкую производительность" внешнего источника. Или твои запросы к нему кривы до безобразия. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2020, 15:55 |
|
Ручная репликация (синхронизация данных с внешним источником) - какой оптимальный способ?
|
|||
---|---|---|---|
#18+
Alibek B. Можно полностью очищать локальную таблицу, а затем грузить все заново — но предполагаю, что это не очень хороший способ. это самый простой, самый надежный, и очень часто - самый производительный способ. избегать его стоит тогда, когда на то есть конкретные причины. например, у вас по миллиарду строк по обе стороны репликации, а обновить нужно одну и быстро. KISS. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2020, 16:23 |
|
|
start [/forum/topic.php?fid=52&msg=39948071&tid=1881348]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 143ms |
0 / 0 |