sql >> データベース >  >> RDS >> Mysql

非正規化されたデータベーステーブルの更新

    この状況に対処するには、いくつかの方法があります。

    1. データベーストリガーを使用できます。これはデータベースにとらわれないオプションではなく、私が知る限り、これに対するRoRサポートは存在しません。状況にデータの不整合がまったく必要ない場合これはおそらく目標を達成するための最もパフォーマンスの高い方法ですが、私はではありません DBエキスパート。
    2. バッチ操作を使用して、2つのテーブルを定期的に同期できます。この方法では、2つのテーブルを分散させてから、データを頻繁に再同期することができます。状況によってこのドリフトが発生する可能性がある場合は、営業時間外にDBを更新できるため、これは適切なオプションです。 5分ごとに同期を行う必要がある場合は、他のオプションを検討することをお勧めします。これはrubyコードで処理できますが、何らかのバックグラウンドジョブランナー(cron、delayed_job、redisなど)が必要になります。
    3. Railsモデル内からコールバックを使用できます。 "after_update :sync_denormalized_data"を使用できます 。このコールバックは、データベースレベルのトランザクションでラップされます(データベースがトランザクションをサポートしていると仮定します)。 Railsレベルのコード、一貫性のあるデータがあり、毎回2回の書き込みを行うことを犠牲にして、バックグラウンドプロセスは必要ありません。
    4. 私が考えていなかったいくつかのメカニズム....

    これらのタイプの問題は非常に アプリケーション固有。同じアプリケーション内でも、関連する柔軟性とパフォーマンスの要件に応じて、複数の方法を使用できます。



    1. PostgreSQLで監視する重要事項-ワークロードの分析

    2. C#で部分SQLを字句解析する

    3. MySQL/MariaDBテーブルを最適化する方法

    4. postgresqlリストとサイズ別の注文テーブル