2012-04-09 6 views
1

データベースはメモ作成のための妥当なデータ構造ですか?非常に大量のデータをキャッシュする必要がある場合、通常のソフトウェアでは積極的にメモリに保持するのは無理かもしれません。データベースを使用すると、計算結果を後で使用するために保存することが容易になり、プログラムの進捗に影響を与えることなく、いつでも計算を停止して開始することができます。データベースが共有されている場合は、処理を複数のシステム(コンピュータクラスタ)に分散することもできます。データベースMemoization?

私の唯一の予約は、データベースへのクエリによる遅延がアルゴリズムのパフォーマンスに影響を与える可能性があることです。アルゴリズムが多くの並べ替えを非常に迅速に処理する場合は特にそうです。もちろん、アルゴリズム/アプリケーションの空間の複雑さが非常に高い場合(ギガバイト)、データベースのメモを必要とするだけです。何かご意見は?

+1

は、定義によると、 –

+0

によって定義されています。memoizationは、関数呼び出しにより、以前に処理された入力の結果の計算を繰り返さないようにすることによってコンピュータプログラムを高速化するために使用される最適化手法です。 –

+1

はい、あなたはそれを手に入れました。価値があるためには、回収(および保管)のコストは、再計算のコストよりも大幅に少なくする必要があります。 – RBarryYoung

答えて

3

大きなデータが1台のマシンで応答されることが心配なら、これに対する答えはほぼ確実ですNO!現代のハードウェアでは、答えがノーでない場合、計算のパターンがあるか、計算が実行不可能であるべきです。しかし、それが意味を成すことができるいくつかのバリエーションがあります。

メモを取って勝利するのは、再計算のコストが以前の回答を取り出すこと以上のものであるということです。しかし、あなたの答えがRAMに収まるならば、データベースを使用することに勝つことはできません。なぜなら、ストアをメモリに保持するほうが速いからです。したがって、データベースにとって唯一の興味深いケースは、答えがRAMに収まらないところです。

引数のために、それぞれのキーと値のペアには640バイトが含まれているとします。 64 GBのRAMがあるとします。したがって、RAMに収まらないようにするには、無作為に作成/アクセスされる1億以上の事実が必要です。しかし、実際のハードウェアについて考えてみましょう。これらの事実は、RAMに収まらない場合、ハードドライブに保存されます。ハードドライブは、6k RPM、つまり100回/秒で回転します。これにより、データのランダムな断片を平均して1/200秒(平均してデータを見つけるために途中まで回転させなければならない)に取得/格納する時間がかかります。だから、あなたがデータ構造を完成した後、それに再びアクセスするためには、ランダムに1億回* 0.005秒= 500,000秒がかかります。これはほぼ590日間です。ハードウェアの故障の平均時間に危機に瀕しているデータにアクセスするだけでは何の問題もありません。 (ここではいくつかの並列性がありますが、ハードドライブカムは一度に複数のディスクセクタを探しますが、それは限られており、あなたを救うことはできません)

道徳的には、ディスク上の大きなデータセットは実現不可能です。たとえあなたの前にデータベースを置いても。ハードドライブはRAMではないので、そのように考えるべきではありません。

しかし、すべてが失われません。

データベースが理にかなっているシナリオは、分散計算の提案です。あなたの計算のステップが高価な場合、メモに記録されたコールは比較的少なく、データはメモリに収まるので、データベースは非常に便利です。データベースへの呼び出しは高速になります(物事はメモリ内にあります)。ローカルハードドライブにデータを保存するだけでは(データを複数のマシンに分散してCPUを使用するため、共有ハードドライブは存在しません)それがそこにあるので単に便利かもしれません。 (これまではデータベースをこの方法で使用していましたが、非常に満足しています)

ただし、このシナリオではデータベースは単なるキー/値ストアです。 SQLデータベースは機能しますが、SQLを使用しないソリューションも検討してください。また、SQLを使用しないソリューションに移行すると、データの量にかかわらず、データがすべてRAMに収まるようにデータが格納されるオプションが用意されています。 eBayは、私が知っている会社の良い例ですが、いったんそれをすると、 "リレーショナル"な部分を失う傾向があります。彼らの主張には大きな注意が必要です。)

実際にGoogle検索を実行すると、この種の断片化されたデータストアに対して実行されています。これには、どのキーワードがどのキーワードに一致するかについての多くの質問に対する基本的なメモの回答と、最も関連性が高い。メモなしでは、彼らは決してそれをすることができませんでした。しかし、彼らは答えのためにハードドライブに行く必要があった場合、実際にそれを行うことはできませんでした。 (彼らもSQLを使用していません...)

+0

それは素晴らしい答えでした。あなたの批判的な視点のためにありがとう! – collinjsimpson

関連する問題