Postgres synchronization solution P&L: -8 (≃ -7057 RUB)
This is a challenging computer problem, data synchronization but I have an idea
I plan to use a inefficient rolling hash and sorting to solve the problem of synchronization. This is similar to rsync
Я реализовал хэш, который берет предыдущие данные и текущий столбец, а также предыдущий хэш для создания хэша всей базы данных.
Это позволяет нам синхронизироваться с минимальным количеством передач данных, когда я пишу часть синхронизатора, которая должна перехешировать все свои собственные данные, а затем извлекать хэш двоичного поиска отсортированных данных.
I implemented a hash that takes previous data and current column and the previous hash to produce a hash of the entire database.
This allows us to synchronize with the minimum of data transmissions when I write the synchronizer part which shall rehash all its own data, then retrieve the hash of a binary search of the sorted data.
У меня есть идея, как решить проблему «выигрышной» копии.
Имейте отдельную таблицу, которая хэширует каждое поле столбца и строку и дает им версию.
Это версия, которая сравнивается.
I have an idea on how to solve the "winning" copy problem.
Have a separate table that hashes every column field and row and gives it a version.
This is the version that is compared.
Моя бродячая установка использует постоянные диски и использует ansible для развертывания cronjob и сценария синхронизации. Он настраивается файлом YAML. Я также установил psycopg2 и нашел документацию о том, как получить таблицы в базе данных в Postgres. Теперь осталось написать алгоритм синхронизации.
Моя проблема заключается в том, чтобы определить, какая сторона является выигрышной копией.
Когда одна сторона изменяет данные, должен быть другой хэш, и измененные строки обнаруживаются. Эту часть я понимаю.
Проблема заключается в том, чтобы определить, какая сторона является последним изменением и какая сторона должна победить. Возможно, мне придется ввести столбец версии.
Если бы у меня было последнее обновленное поле метки времени, я мог бы его использовать. Или столбец версии, но я специально стараюсь не добавлять новые столбцы в схему. Это означает, что это намного сложнее.
My vagrant setup uses persistent disks and uses ansible to deploy the cronjob and sync script. It is configured by YAML file. I've also installed psycopg2 and I found documentation on how to retrieve the tables in a database in Postgres. It's just a matter of writing the sync algorithm now.
My problem is detecting which side is the winning copy.
When one side changes the data there shall be a different hash and the changed rows are detected. This part I understand.
The problem is detecting which side is the latest change and which side should win. I might need to introduce a version column.
If I had a last updated timestamp field I could use that. Or a version column but I am expressly trying to avoid introducing new columns to the schema. It means it's a lot harder.