2012-03-19 11 views
0

私は、(最高で)気になる接続を持つレガシーデータベースを持っています。このデータベースのデータは週に1回更新される可能性があります。私のアプリのユーザーは、読み取りアクセスが必要です。結果をDBクエリの列から取得

私が遭遇する問題は、DBに返されたnilを照会することで、アプリ内であらゆる種類の悪いことが起こることです。

有効な応答が得られるまでデータベースをクエリする方法はありますか?そのレスポンスを私のレールアプリのどこかに保存しますか?そうすれば、保存されたバージョンがユーザーに返されます。その後、週に一度、有効なオブジェクトが返されるまでデータベースを再クエリできますか?

これに問題を追加するには、従来のdbはSQL Serverですので、rails-sqlserverをインストールして使用する必要がありましたが、これはうまく機能しますが、何とか問題に追加される可能性があります。

答えて

2

リクエストサイクルでこれを行う際に発生する問題は、実際にデータをフェッチしたリクエストがおそらく氷河面上で実行される可能性が高いことです(結果がnilでなくなるまでリクエストする必要があるため)ので、ユーザーはリフレッシュボタンを叩いて、SQLサーバーまたはアプリケーションが氾濫するまで、さらに多くの要求をキューに入れます。

これを行う場合は、毎週または毎日、必要なすべてのデータ(おそらくデータベースの完全ダンプ)をフェッチするようにResqueタスクを設定していると思います。結果のデータをデータストアにダンプします。ローカルデータベース、または特に永続性を気にしない場合は、redisやmemcachedのいずれかです。非同期であるため、データをフェッチするのに必要なだけ多くの時間を取ることができます。あなたのアプリ側では、気質の悪いデータベースに接続しようとしないでください。すべての要求に対して権限のある「中間」データベースを検討してください。したがって、そこにデータが存在しない場合は、SQLサーバーにもデータが存在しないと想定します。

もちろん、この方法の欠点は、SQLサーバーに非常に大きなデータベースがある場合、すべてのデータベースをより安定した中間の場所にコピーすることができないことです。データのサブセットを選択するか、リクエストごとのキャッシュ方法に頼らざるを得ませんでしたが、それを避けることができる場合は、これを行う最善の方法はないと思います。

+0

あなたの言っていることに同意します。 SQL Serverデータベースからmysqlデータベースにデータをインポートする際のドキュメントはどこにありますか?私はその変換をあまり見ていないので、なぜ私は私がレガシーのDBについていたのだろうと思ったのですか –

+0

残念ながら私は...両方ともActiveRecordで接続していれば、いつでも1つのデータベースそれを別のものに保存しますか?これは良い第二の質問かもしれません、私はそれに良い答えがないので、私は答えません。 ;) – Veraticus

関連する問題