Postgres synchronization solution P&L: -8 (≃ -66 EUR)
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
Įdiegiau maišą, kuri paima ankstesnius duomenis ir dabartinį stulpelį bei ankstesnę maišą, kad būtų sukurta visos duomenų bazės maiša.
Tai leidžia mums sinchronizuoti su minimaliu duomenų perdavimu, kai rašau sinchronizatoriaus dalį, kuri iš naujo sumaišo visus savo duomenis, tada nuskaito dvejetainės surūšiuotų duomenų paieškos maišą.
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.
Turiu idėją, kaip išspręsti „laimėjusio“ kopijavimo problemą.
Turėkite atskirą lentelę, kurioje kiekvienam stulpelio laukui ir eilutei yra maišos ir pateikiama versija.
Tai yra lyginama versija.
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.
Mano valkataujanti sąranka naudoja nuolatinius diskus ir ansible, kad įdiegtų cronjob ir sinchronizavimo scenarijų. Jis sukonfigūruotas naudojant YAML failą. Taip pat įdiegiau psycopg2 ir radau dokumentus, kaip gauti lenteles duomenų bazėje Postgres. Dabar belieka parašyti sinchronizavimo algoritmą.
Mano problema yra nustatyti, kuri pusė yra laimėjusi kopija.
Kai viena pusė pakeičia duomenis, turi būti kitokia maiša ir aptinkamos pakeistos eilutės. Šią dalį aš suprantu.
Problema yra nustatyti, kuri pusė yra naujausias pokytis ir kuri turėtų laimėti. Man gali reikėti pristatyti versijos stulpelį.
Jei turėčiau paskutinį kartą atnaujintą laiko žymos lauką, galėčiau jį naudoti. Arba versijos stulpelis, bet aš aiškiai stengiuosi išvengti naujų stulpelių įvedimo į schemą. Tai reiškia, kad tai daug sunkiau.
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.