タグ付けされた質問 「caching」

アプリケーションによるキャッシュアルゴリズム、およびデータベースエンジンやその他の情報リポジトリおよびプレゼンテーションアプリケーションによる情報キャッシュの実装に関する質問。

13
それで、シングルトンは悪いのでしょうか?
最近、シングルトンの使用(および過剰使用)に関する問題について多くの議論がありました。私も私のキャリアの早い段階でそれらの人々の一人でした。現在、問題が何であるかを見ることができますが、良い選択肢を見つけることができない場合がまだ多くあります。反シングルトンの議論の多くは実際にそれを提供しません。 ここに私が関わった最近の主要なプロジェクトの実例があります: アプリケーションは、頻繁に更新されないサーバー状態からの大量のデータを使用する多くの個別の画面とコンポーネントを持つシッククライアントでした。このデータは基本的にシングルトンの「マネージャー」オブジェクト、つまり恐ろしい「グローバル状態」にキャッシュされていました。データの保存と同期を維持するアプリ内のこの場所を1つにして、サーバーからさまざまなサポートデータを繰り返し要求することなく、開いた新しい画面で必要なもののほとんどを照会できるようにするというアイデアでした。サーバーへの絶え間ないリクエストは帯域幅を使いすぎます-そして私は週に数千ドルの追加のインターネット請求書を話しているので、それは受け入れられませんでした。 基本的にこの種のグローバルデータマネージャーキャッシュオブジェクトを持つ以外に、ここで適切と思われる他のアプローチはありますか?もちろん、このオブジェクトは「シングルトン」である必要はありませんが、概念的には「シングルトン」であることが理にかなっています。ここできれいな代替品は何ですか?

6
CPUキャッシュメモリが非常に高速なのはなぜですか?
CPUキャッシュメモリをメインメモリよりもはるかに高速にするのはなぜですか?階層型キャッシュシステムにはいくつかの利点があります。キャッシュが小さいほど検索が高速になることは理にかなっています。しかし、それにはもっとあるはずです。
58 memory  caching 

3
ビジネスレイヤーでのキャッシュとデータレイヤーでのキャッシュ
私は常に、DALでキャッシングが行われるプロジェクトに取り組んできました。基本的には、データベースへの呼び出しを行うときに、キャッシュにデータが既に存在するかどうかをチェックし、存在する場合は呼び出しを行いません。代わりにそのデータを返します。 私は最近ビジネス層でのキャッシュについて読んだので、基本的にビジネスオブジェクト全体をキャッシュします。すぐにわかる利点の1つは、応答時間の短縮です。 どちらを優先するかはいつですか?およびビジネス層でのキャッシングは一般的な慣行ですか?

9
QAスタッフは、表示できないキャッシュロジックをどのようにテストできますか?
Webアプリケーションにキャッシングレイヤーを実装しましたが、キャッシングはユーザーに対して透過的であるため、QAがどのようにテストするのか疑問に思っています。 私が持っているアイデアの1つは、キャッシュに入力するコードを呼び出すメソッドにログを記録し、オブジェクトがキャッシュからプルされたときと、データベースからの再作成が必要なときを記録し、テスターがログを表示して、たとえば、特定のオブジェクトは、すべてのページビューではなく、10分ごとにデータベースからリロードされます。 しかし、この状況に対してより良い実践を提案できる人はいますか?
33 testing  caching 

2
低レイテンシJavaの記述[終了]
Javaで低レイテンシコードを記述するためのJava固有の手法(C ++には当てはまらないもの)はありますか?私はJavaの低レイテンシーの役割をよく見ますが、彼らは低レイテンシーのJavaを書いた経験を求めます。 私が考えることができる唯一の考えは、JNIの経験、ネイティブコードへのI / O呼び出しのアウトソーシングです。また、場合によってはディスラプターパターンを使用しますが、それは実際のテクノロジーではありません。 低レイテンシコードを記述するためのJava固有のヒントはありますか? リアルタイムJava仕様があることは承知していますが、リアルタイムは低遅延と同じではないと警告されています。

3
単一ページアプリでのブラウザーキャッシュの処理
単一ページアプリのWebブラウザキャッシュを適切に処理する方法を見つけようとしています。 私はかなり典型的なデザインを持っています:SPAを実装するいくつかのHTML、JS、CSSファイル、およびSPAによって消費されるJSONデータの束。更新をプッシュするときに問題が発生します:サイトの静的部分とJSONを生成するコードを同時に更新しますが、クライアントブラウザーには静的部分がキャッシュされていることが多いため、古いコードは新しいデータを処理しようとし、 (行われた変更に応じて)問題が発生する場合があります。(特に、IEは、再検証せずにキャッシュされたJSを使用することについて、ChromeまたはFirefoxよりも積極的です。) これを処理する最良の方法は何ですか? JSONの変更に後方互換性があることを確認し、妥当な時間内にブラウザーのキャッシュが期限切れになると仮定します。 静的JSとJSONの両方に何らかのバージョン番号を埋め込み、window.location.reload(true);一致しない場合は実行します。 ヘッダーの適切な組み合わせ(must-revalidateまたはno-cache何でも; ソース はこれを行う方法によって異なります)を把握して、サイトをロードするための余分な往復を意味する場合でも、ブラウザーがすべてのロードで常にすべてのリソースを再検証するようにします。 更新をプッシュするときに静的コンテンツが期限切れになるように、キャッシュコントロールと期限切れヘッダーをマイクロ管理します。 他に何か?

6
キャッシュを多用する単体テスト方法のベストプラクティス
私は、キャッシュからオブジェクトとオブジェクトのリストを(フィルターを使用して)保存および取得するビジネスロジックメソッドをいくつか持っています。 検討する IList<TObject> AllFromCache() { ... } TObject FetchById(guid id) { ... } IList<TObject> FilterByPropertry(int property) { ... } Fetch..そして、Filter..呼んでAllFromCache、それがない場合、キャッシュとリターンを移入し、ちょうどそれがある場合、そこから返していました。 私は通常、これらの単体テストを避けます。このタイプの構造に対する単体テストのベストプラクティスは何ですか? TestInitializeでキャッシュにデータを追加し、TestCleanupでキャッシュを削除することを検討しましたが、それは私には適切ではないと感じました(そうかもしれません)。

1
一部のウェブサイトがChromeの開発者ツールで0バイトを表示するのはなぜですか
私は自分のウェブサイトのページ速度の最適化を行っており、他のウェブサイトがそれをどのように行うかを研究しています。FacebookやRinggitplusなどの一部のWebサイトでは、Chromeの開発者ツールの[ネットワーク]タブでリソースの一部に0バイトが表示されていますが、実際のコンテンツサイズは数キロバイトです。 サイズはフェッチされる量であり、コンテンツは応答の実際のサイズであるという記事をいくつか読みました。したがって、サイズが0バイトの場合、キャッシュから提供されることを意味します。しかし、シークレットモードを使用してページを開いたり、すべてのキャッシュをクリアしたりしても、同じことが起こりました。 どのようにしてこれを可能にし、どのように私のウェブサイトで同じことを達成できますか?
14 http  caching  chrome 

2
共有キャッシュ-無効化のベストプラクティス
キャッシュオブジェクトを無効化/更新するためのより良いアプローチは何か知りたいです。 前提条件 リモートmemcachedサーバーを持つ(複数のアプリケーションのキャッシュとして機能する) すべてのサーバーはAzure(アフィニティリージョン、同じデータセンター)によってホストされます キャッシュオブジェクトのサイズは200バイトから50キロバイトまでの範囲です アプローチ1(できるだけ早くキャッ​​シュに保存) オブジェクトAが作成されます->データベースに保存し、キャッシュに保存します クライアントによって要求されたオブジェクトA->キャッシュの存在をチェック、そうでなければデータベースからフェッチしてキャッシュに保存 オブジェクトAが更新されます->データベースに保存、キャッシュに保存 アプローチ1はより簡単なようです。何かが作成されたら、できるだけ早くキャッ​​シュに入れてください。誰かに関係なくそれが必要になります。 アプローチ2(遅延キャッシュストア) オブジェクトAが作成されます->データベースに保存 クライアントによって要求されたオブジェクトA->キャッシュの存在をチェック、そうでなければデータベースからフェッチしてキャッシュに保存 オブジェクトAが更新されます->データベースに保存、キャッシュのキーを削除 アプローチ2は、より多くのメモリを認識しているようです。このアプローチでは、リクエストされたアイテムのみがキャッシュに保存されます。 質問1:パフォーマンスを考慮して、より良いアプローチは何でしょうか?メモリもCPUもまだカウントされません。 質問2:私の考えは一種の時期尚早な最適化ですか? 質問3:他に考えはありますか?他のアプローチ?

2
Memcachedの使用:データベースを更新するときにキャッシュを更新することをお勧めしますか?
この質問は、アーキテクチャのベストプラクティスに関するものです。 現在のアーキテクチャ ユーザー情報のためにMySQLにアクセスするPHPクラスがあります。それを呼び出しましょうUser。 Userに何度もアクセスされるため、負荷を軽減するためにキャッシュのレイヤーを実装しました。 最初のレイヤーは、「リクエストごと」キャッシュと呼ばれるものです。MySQLからデータを取得した後、データをのプライベートプロパティに保存しますUser。データに対する後続のリクエストは、MySQLからデータを再リクエストする代わりにプロパティを返します。 Webリクエストはリクエストごとに存続および終了するため、このキャッシュは、アプリケーションが1回のリクエストでMySQLに複数回アクセスすることを防ぎます。 2番目のレイヤーはMemcachedです。プライベートプロパティが空の場合、最初にMemcachedでデータを確認します。Memcachedが空の場合、MySQLにデータを照会してMemcachedを更新し、のプライベートプロパティを更新しますUser。 質問 私たちのアプリケーションはゲームであり、いくつかのデータが可能な限り最新であることが不可欠な場合があります。約5分間で、ユーザーデータの読み取り要求が10回または11回発生する場合があります。その後、更新が行われる場合があります。後続の読み取り要求は最新である必要があります。そうしないと、ゲームの仕組みが失敗します。 そのため、データベースの更新が発生したときに実行されるコードを実装しました。このコードは、更新されたデータを使用してMemcachedのキーを設定するため、Memcachedへの後続のリクエストはすべて最新です。 これは最適ですか?このような「リビングキャッシュ」のようなものを維持しようとするとき、パフォーマンスの問題やその他の「注意点」を知っておく必要がありますか?

4
CPUキャッシュ(C)を最適化する際に重要なことは何ですか?
これら 2つの質問を読んで、メモリ内の大量のデータを扱う場合、CPUキャッシュの動作を理解することが重要になることがわかります。最適化ツールボックスに別のツールを追加するためのキャッシュの仕組みを理解したいと思います。 CPUキャッシュがうまく機能するように、キャッシュを賢明に使用するコードを書くことができる中核となる点は何ですか?これに関連して、コードのプロファイルを作成して、キャッシュの使用が悪いために速度が低下していないかどうかを確認する方法はありますか?


2
ランダムキャッシュの有効期限
私はランダムなキャッシュの有効期限を実験して、個々のリクエストが複数のものを一度に更新する状況を回避しています。たとえば、Webページには5つの異なるコンポーネントが含まれる場合があります。それぞれが30分でタイムアウトするように設定されている場合、ユーザーは30分ごとに長い待機時間を持ちます。そのため、代わりに、15〜45分のランダムな時間にすべてを設定して、特定のページのロードで最大1つのコンポーネントのみがリロードされるようにします。 このトピックに関する調査やガイドライン、たとえば最適分散パラメーターを見つけようとしています。Google(?)がこの手法をどのように使用しているかについての記事を1つ見たのを覚えていますが、それを見つけることができず、そのトピックについてあまり書かれていないようです。

5
キャッシングを管理するためにクラス内のSRPに違反しないようにする方法は?
注:コードサンプルはc#で記述されていますが、それは問題ではありません。適切なものを見つけることができないため、c#をタグとして配置しました。これはコード構造についてです。 Clean Codeを読んで、より良いプログラマーになろうとしています。 私はしばしば、単一の責任原則(クラスと関数は1つのことだけを行うべきです)、特に関数に従うことに苦労しています。たぶん私の問題は、「一つのこと」が明確に定義されていないことですが、それでも... 例:データベースにFluffiesのリストがあります。Fluffyが何であるかは気にしません。クラスに綿毛を回復させたい。ただし、綿毛はいくつかのロジックに従って変化する可能性があります。いくつかのロジックに応じて、このクラスはキャッシュからデータを返すか、データベースから最新のデータを取得します。毛羽立ちを管理していると言えますが、それは一つのことです。簡単にするために、ロードされたデータが1時間有効であり、それを再ロードする必要があるとしましょう。 class FluffiesManager { private Fluffies m_Cache; private DateTime m_NextReload = DateTime.MinValue; // ... public Fluffies GetFluffies() { if (NeedsReload()) LoadFluffies(); return m_Cache; } private NeedsReload() { return (m_NextReload < DateTime.Now); } private void LoadFluffies() { GetFluffiesFromDb(); UpdateNextLoad(); } private void UpdateNextLoad() { m_NextReload = DatTime.Now …

5
最も効率的なキャッシュ置換アルゴリズム[終了]
閉じた。この質問には、詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善したいですか?詳細を追加し、この投稿を編集して問題を明確にします。 6年前に閉鎖されました。 ウィキペディアには、11のキャッシュ置換アルゴリズムがリストされています。私が開発しようとしているアプリケーションについてほとんど何も知らないと仮定すると、「デフォルト」のキャッシュ置換アルゴリズムとして何を使うべきでしょうか? 私のOSコースから正しく思い出せば、LRUは最高の汎用キャッシュ置換アルゴリズムです。しかし、多分私は間違っています。 また、これは一般に、メインメモリが安価で豊富であり、キャッシュサイズについてあまり心配する必要がないため、学術的な問題です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.