テーブル操作に関する注意点まとめ前へ3456789101112Wagby運用中に外部から直接テーブルにアクセスしたり、既存テーブルを再利用するといった場合の注意点をまとめます。次のような利用を行う場合に、本文書の内容を参考にしてください。既存のテーブルを再利用する。(別のシステムからもこのテーブルを利用している。)運用中に(Wagbyを経由せずに)直接、テーブルのデータの変更(登録/更新/削除)を行う。別々のモデルで、同じ物理テーブルを共有する。(メインモデルとサブモデルの関係であれば、ここに記載した注意点はすべて考慮されています。メインモデルとサブモデル関係を使わない場合、本文書の注意点に配慮してください。)ロックWagbyでデータを更新する場合、常に更新対象データは「ロック」されます。これによって同じデータの更新によるデータ破壊を防ぎます。ロック方式は「悲観ロック」と「楽観ロック」の二種類を選択できます。標準は「悲観ロック」です。詳細は"ロック方式"をお読みください。ロックはWagby内部で制御されています。外から直接、テーブルを操作された場合、Wagbyのロック機構は働きません。対象テーブルが読み込み専用であれば、ロックについて考慮する必要はありません。対象テーブルをWagbyからも更新し、かつ別システムからも更新される可能性がある場合、更新の競合を避けるため、ロックを考慮する必要があります。対象テーブルが楽観ロックに対応しており、かつ「バージョン管理用カラム」をもっている場合は、Wagbyの楽観ロックを利用できます。他のシステムで共通に利用するということです。楽観ロックが使えない場合、Wagbyの悲観ロックテーブルを既存システムと共用することを検討してください。具体的には悲観ロックの情報をデータベースのテーブルとして表し、これを他システムから参照するようにします。別々のモデルで同じ物理テーブルを共有する場合、ロックキーを同一にするとよいでしょう。詳細は"ロックキーのカスタマイズ"をお読みください。可能な限り削減するようになっています。そのため、一度読み込んだデータをメモリ内に保持し、再利用します。これを「キャッシュ」と呼びます。外から直接、テーブルを操作された場合、Wagbyの保持するキャッシュと実際のデータの整合性がとれなくなります。そこでモデルのキャッシュを無効にする方法が提供されています。キャッシュを無効にするとパフォーマンスに影響があります。この問題に対する、いくつかの代案を示します。定期的にWagbyのキャッシュ情報を消去する更新頻度が少ない場合、キャッシュは使うが、ジョブを使ってキャッシュ情報を定期的に消去する方法があります。使って、Wagbyが保持する(モデルの)キャッシュ情報をクリアすることができます。呼び出すという方法があります。マテリアライズドビューを使うWagbyのキャッシュは無効としつつ、データベースが提供する「マテリアライズドビュー」を使う方法もあります。[Wikipedia...]マテリアライズドビューはデータベース側でキャッシュされており、かつ、元のテーブルが変更されるたびにキャッシュも更新されます。そのため最新のデータを取得できます。マテリアライズドビューが使えるデータベースであれば、こちらの利用も検討してください。