スケーラブルな MS Access ASP.NET アプリ
-
21-09-2019 - |
質問
私は次の制約を受けており、それを回避する方法はありません。
- 読み取り専用データ:マイクロソフトアクセス
- ジェット 4.0 OLDB
- ASP.NET 2.0
- 共有ホスト。制御はほとんどありません。
- OR マッパー - LLBL Gen Pro
このアプリは、APP_Data フォルダー内の多くの Microsoft Access データベースを読み取る読み取り専用ツールです。ほとんどの場合正常に動作します。
負荷がかかると、Access MDB へのアクセスに失敗し始めます。
Access MDB にアクセスする際のエラーを制限するには、どのような戦略が最適ですか?現時点では試してみましたが、エラーが発生した場合は Thread.Sleep(500) を実行してから再試行しました。
解決
私は、分離/同時性/オーバーヘッドロックを管理する排除するためにAccessデータベースにアクセスするときのオプションをロックを変更する方法があるかもしれないと思います。おそらくの ののをしてみてください "モード=シェアはどれも拒否しません。"接続文字列インチあなたはどのような方法でデータを変更している場合、それはあなたがデータベースに取得することをすべての分離/同時実行管理外ほとんど投げだと私はかかわらず、いつでもこれを使用することはありません。ご自身の責任で使用ます。
他のヒント
どの程度の頻度でデータを変更していますか?それが読み取り専用だ場合はキャッシュにデータベースからデータをロードし、そこからではなく直接のデータベースからそれを読むことができますか?
特定のエラーは何を得る種類の。私は、彼らが接続エラーですと仮定しますか?
これはひどい解決策ですが、本当に「これらのツールだけを持って無人島に迷った」場合で、アクセス データベースが完全に読み取り専用である場合は、それぞれのデータベースのコピーを複数作成し、いずれかのデータベースへの一定数の接続のみを許可します。それらを一度に。たとえば、MdbAA と MdbBB という 2 つのアクセス データベースがある場合は、次のようなコピーを作成します。
- MdbAA01
- MdbAA02
- MdbAA03
- MdbBB01
- MdbBB02
- MdbBB03
次に、MdbAA に対するリクエストが来たときに、現在 MdbAA01 にアクセスしているリクエストの数を確認し、しきい値を超えている場合は、MdbAA02 などを試します。MdbBB ファイルへのリクエストに対しても同じことを行います。
私が言ったように、これは非常に悪い解決策ですが、本当に選択肢がない場合は、うまくいくかもしれません。しかし現実的には、アプリが Access (および共有ホスト) の規模を超えてしまったため、アーキテクチャをアップグレードする時期が来たようです。
お金のビットを過ごし、いくつかのSQLストレージを取得します。あなたは
?壊れ鳴らすシステムに松葉杖をフィッティングに取り組んでどのくらいの時間を費やしてきましたプロジェクトは、その後、いくつかの寒さのハード現金を投資することの価値をやって価値がある場合。
ビジネスは、あなたが持っているオプションは実行可能でない理由を説明する、このルートをあなたを強制しようとしている場合。あなたが最初の場所でのオプションを提案した場合は、ペアを成長し、あなたは間違っていた理由を説明するが、これは、あなたがそれを修正する方法である。
申し訳ありませんがそれは軽薄として外れた場合ます。