編集:
大きなデータ(データベース全体、または多数のテーブル)をキャッシュできるかどうかを調べている理由は、対称rijndaelキーのIVベクトルが異なるさまざまな行であっても、データベースの列が暗号化されているためです。したがって、SQLフィルタリングはオプションではないか、インデックス作成には意味がありません。また、アプリケーションは、実際にはクラウドおよびビジネスアプリケーションのフレームワークであり、可能な限りデータベースに依存しないように設計されています。メールアドレスやSSNなど、非常に機密性の高い情報のみを保持するテーブルの一部の列のみを暗号化することをお勧めしますが、フレームワークが非標準になり、暗号化された列と暗号化されていない列のそれぞれについて新しいコードを作成する必要があります応用。キャッシュに問題がなければ、オブジェクトベース、辞書、linqなどですべての操作を実行できます。
すべてまたはほとんどのデータベーステーブル(暗号化)をメモリにキャッシュする予定です。
私はクラウドベースのアプリケーションに取り組んでおり、さまざまなクライアントで共有される100MBのSQL Server/MySQLの制限があります。(したがって、キャッシュ時にクライアントごとにグループ化できます。さらに、ビジネスモデルに応じて、より小さなキャッシュグループを作成することもできます)
私にはわからなかった。SELECT * FROM
100000行、10 MB、または20MBのデータなどをフェッチするのにかかる時間。
すばやく検索しましたが、大量の行を取得するための「おおよその」期間を示すベンチマークは見つかりませんでした。
私の会社は、現代世界のほとんどの中小企業で一般的に使用されているビジネスソフトウェアを使用しています。毎日アクティブなレコードがあり、4。5年間で20MBのMySQLデータしかないと言われています。
MySQL Administratorをチェックインしたところ、最大のテーブルはinventory_movementsであり、45000行の7MBのデータがあることがわかりました。
MySQLクエリブラウザを使用して実行し、このテーブルからすべてのレコードを選択しました。ソフトウェアツールは、 0.4971秒かかったと述べています。今、私は考えを持っていると思います。
C#.NETですべての行(純粋のみSELECT * FROM
、フィルターなし、結合)をフェッチします。SQL Serverデータベースからの7MBのデータ-45000行は、同様の期間になりますよね?2秒か3秒ならまだ大丈夫です。
こちらです; 少なくとも私には考えがあります。100MBのデータをキャッシュする場合。おそらく5〜30秒かかります。(データはフェッチ中に復号化されません)(必要に応じて後でRAMで復号化されます)(データベース機能のほとんどが失われていることを認識しています。クエリはキャッシュ内のオブジェクトに基づいて行われます)(私はこのコメントを書いているときに考え始めたばかりです。成功した場合は、無料のデータベースソースとしてxmlを使用することもできます。これは、このアプリケーションのOR / Mのような関数を設計しているためです)
私の質問は;
十分なリソースがあればすぐに100MBのデータをキャッシュしても問題ありませんか?言い換えると; メモリリソースができたらすぐに100MB、さらには500 MB、1 GBをキャッシュするのはおかしなことではありませんか?
第二に、SELECTを使用してレコードをフェッチするための私の時間計算は楽観的だと思いますか?
アプリケーションの開始時。データをキャッシュできます。頻繁にリロードキャッシュを行うことなく、キャッシュとデータベースの両方で変更/追加/削除されたデータを管理します。