проблемная таблица, в которой 18 млн записей. И нюанс состоит в том, что данные там достаточно динамичные. Эта таблица синхронизируется с внешней системой раз в день, как правило.
Для этого у нас имеется скриптик, который использует легковестные потоки. В принципе в CPU оно не упирается, упирается в IO операции диска, как и следовало ожидать. 20 минут это всё синхранизируется. Не хотелось бы на это время блочить саму базу, потому нужно ускорить.
Я думаю, что можно попробовать эту сложную и проблемную таблицу (не базу) вынести из постгресса в NoSql. И ускорить синхронизацию. Например, в redis, а обновление можно сделать через Lua скрипты. Само обновление может блочить базу, но если не долго - то не страшно. Подскажете чего толкового на этот счёт?
А там во всех 18 млн возможны изменения? Может как-то возможно партиционировать редко неизменяемые строки отдельно?
Могу предложить несколько диванно теоретических решений: 1. Создавать новую таблицу рядом с вашей, спокойно записать в новую таблицу все записи с внешней системы и параллельно записать новые значения в старую и новую, как только будет всё создано - остановить пользование таблицей на несколько минут, переименовать старую и новую таблицу, запустить всё так, как ни в чем не бывало. В итоге у вас новая таблица подменит старую за очень короткий промежуток времени, пока скрипт будет переименовывать таблицы ;) 2. Отключать индекс, синхронизировать и потом заново строить индекс. Таким образом у вас синхронизация будет занимать намного меньше времени. 3. Пересмотреть синхронизацию на корню, например, сделав её реалтайм на какой-нибудь очереди сообщений (типа kafka, rabbitMQ) или на алгоритме консенсуса (типа raft) Или же совсем сделать на вашем серваке с бд поднять слейв внешней бд, а на серваке с внешней бд поднять слейв вашей бд и как-то синхронить сразу
добрый день. объясните, пожалуйста, зачем вам ускорять этот процесс? вроде бы обновление таблицы в 18 млн строк за 20 минут - это быстро
Так проблема то в чем? Так то лично я как слышу слово NoSQL , рука сразу тянется к пистолету... (Которого правда у меня нет)
Обсуждают сегодня