序章
こんにちは、ユートピアに思える質問をしようと思いますが、必要なことを達成する方法があるかどうかを知る必要があります。そうでない場合は、その理由を知る必要があります。
アイデア
MySqlにデータベース構造があるとします。
誰でも(誰でも、どこでも) 、このデータベースの同期されたコピー(更新されたクローン)を(コンテンツとともに) 持てるようにするソリューションを作成したいと考えています。
それはただ 1 つの同期されたコピーではなく、複数のレプリケーションである可能性があります(そしてそうあるべきです) (基本的なものを想定すると、これはたとえば、世界中に 10 個のコピーがあることを意味します)。
そして、最も重要なことは、安全でなければならないということです。安全とは、実際に受け入れられたトランザクションのみが他のすべての (いくつであっても)データベースのコピー/クローンと同期されることを意味します。
注:同期をリアルタイムで行うのは非常に難しいため、この機能が不要になるようにすべてを設計します。したがって、必須ではありません。
私の自動提案
これは私がそれを管理する方法を考えています:
時間識別子と更新チェック: すべてのアクション(挿入、更新、削除...)は、時間識別子に関連付けられたアクション命令自体として保存されます。[DATETIME フィールドよりも優れていると思います。たとえば、2013 年 1 月 1 日から経過したミリ秒数を持つ INT フィールドになります] . したがって、各コピーは、最後の更新以降に行われた新しいアクションを「隣接コピー」に要求し、許可されていることを確認してから実行します。
問題 1 : 「ネイバー コピー」も古くなっている可能性があります。
解決策 1 : 隣人 1 人だけに尋ねるのではなく、いくつかのコピー/クローンでランダムなリストを作成し、彼らにニュースを依頼します(リストを避けてすべてのクローンに更新を依頼することもできますが、クローンの数が増えすぎると非効率的になります)多く)。
問題 2 : リアルタイムのグローバル同期がアクティブになっていません。仮に...
Someone at CLONE_ENTERPRISING inserts a row into TABLE.
... this row goes to every clone ...
Someone at CLONE_FIXEMALL deletes this row.
... and at the same time, somewhere in an outdated clone ...
Someone at CLONE_DROPOUT edits this row (now inexistent at the other clones)
解決策 2 : 簡単なことです。新しい「 3 番目のデータに依存するアクション」 (編集など) を実行する前に、グローバル同期を強制します。このグローバル同期。たとえば、INSERT を作成する場合は不要です。
注: まあ、誰かが楽しんで、2 つのクローンに同じ挿入を行うことができます...それらはリアルタイムで更新されないため、この行は 2 回存在します。ただし、単一のデータベースがある場合と同じです。必要な場合には、最終的なアクションを実行する前に既存の同じ行があるかどうかを確認します。問題ない。
問題 3 : コードを編集してアクションをフィルタリングしない可能性があるため、誰かがすべてを削除する命令を広めたり、トローリング アクティビティを実行したりする可能性があります。良いクローンは常にどこかにあるので、これは問題ではありません。悪くなった人はもう興味がない。
読んでいただければ本当にありがたいです。これが完璧な解決策ではないことはわかっています。おそらく何百もの穴がありますが、これが私の基本的な出発点です。あなたが今私に教えてくれることは何でもありがたく思います。どうもありがとう。
PS .:私が試みていることはすべて既に存在し、独自の名前を持っている可能性があります。質問してすみません(存在する場合は、とにかくこの名前に感謝します)