2009-06-16 25 views
10

ソリッドステートディスク(SSD)の価格が下がり、すぐにシステムドライブとして普及することを考えれば、アクセス速度が磁気メディアを回転させるよりもはるかに高いということを考えると、SSDローカルストレージ用?たとえば、SSDのランダムな読み取り速度が速いと、ディスクベースのハッシュテーブルのようなものが大規模なハッシュテーブルの実行可能性になります。 4GBのディスク容量がすぐに利用可能で、32ビット整数の全範囲をハッシュ化できます(ただし、人口よりも検索に時間がかかります)。このハッシュテーブルのサイズは、アクセス速度のためにメディアを回転させて作業することはできませんが、SSDの問題ではありません。高速ディスクストレージ(SSD)による最適化アルゴリズム

SSDへの差し迫った移行がアルゴリズム性能の潜在的利益をもたらす他の領域はありますか?私はむしろ、意見よりもむしろ一つのことがどのように機能するかについての推論を見るだろう。私はこれが論争に至ることを望んでいない。

答えて

15

あなたのハッシュテーブルの例は、確かに重要なデータベース構造です。値を調べるために4GB以上のファイル全体をメモリにロードする必要はなく、SSDを直接探査することができます。 SSDは依然としてRAMよりはるかに遅いですが、大型鉄のために大きなお金を払わない限り、ディスクには50GBのハッシュテーブルがありますが、RAMにはありません。

例はチェスポジションデータベースです。私は50GB以上のハッシュポジションを持っています。ハッシュの中でお互いの近くに関連する位置をグループ化しようとする複雑なコードがあるので、一度に10MBのページでページを作成し、複数の同様の位置クエリに対してその一部を再利用したいと考えています。これを効率化するには、コードと複雑さがあります。

SSDに置き換えて、私はクラスタリングのすべての複雑さを落とし、本当にダムの無作為化されたハッシュを使用することができました。また、ディスクから必要なデータだけを取り出して、大きな10MBのチャンクではないため、パフォーマンスが向上しました。レイテンシは実際には大きいですが、ネットのスピードアップは重要です。スーパークリーンなコード(800以上ではない20行)はおそらくもっと良いでしょう。

+0

優れた例と優れた点。私はチェスのポジションについては考えていませんでしたが、非常に興味深いケースです。 –

0

あなた自身を育てないでください。 SSDはまだシステムメモリよりずっと遅いです。ハード・ディスク上でシステム・メモリーを使用するように選択するアルゴリズムは、他のすべてのものが同等の速度で高速化するでしょう。

+0

ポイントは、他のすべてが等しいわけではありません。特に例として、4GBのSSDスペースは比較的簡単に見つかります。簡単にアドレス可能な4GBのシステムメモリは、見つけるのがはるかに難しいです。 –

+0

4GBのRAMは、4GB相当のデータをソートする必要のあるコンピュータでは、かなり標準的です。 – Triptych

+0

メモリの1ギガバイトあたりの価格は、SSDと比べてRAMの方がまだ低いです。サーバーでは64ビットのアドレス空間が一般的で、デスクトップではより一般的になります。 – Michael

3

SSDは、ランダムアクセスの方が大幅に高速です。ディスクへのシーケンシャルアクセスは、主流の回転ドライブの2倍の性能を発揮します。 hereで説明されているように、多くのシナリオでパフォーマンスが低下する原因となっているSSDの多くは、パフォーマンスが悪いものです。

SSDは針をかなり動かしますが、CPU操作や物理メモリよりもずっと遅いです。あなたの4GBのハッシュテーブルの例では、ランダムなハッシュテーブルバケットにアクセスするためにSSDの250 MB/sを維持することができます。回転駆動の場合、1桁のMB/sを壊すのは幸運です。この4 GBのハッシュテーブルをメモリに保持することができれば、秒単位でギガバイト単位でアクセスすることができます。非常に迅速なSSDよりもはるかに高速です。

参照先の記事には、MSがSSDで実行しているときにWindows 7に加えられたいくつかの変更が記載されています。まず、ディスクからデータをプリフェッチするためのSuperFetchは無効になっています。SSDによって緩和されるディスクのランダムアクセス時間が遅くなるように設計されています。ディスク全体に分散したファイルがSSDのパフォーマンスヒットにならないため、デフラグは無効になっています。

+0

SSDの最適化の詳細については、私は、SSDのパフォーマンスによって可能になる(またはより実行可能になる)アルゴリズムのタイプを検討しています。私は、より低速の永続ストレージでは不可能だったさまざまなタイプのアルゴリズムやアプリケーションよりも、可能な(または必要な)最適化に興味がありません。 –

2

実際には、ランダムなディスクI/Oが多数必要であると考えることができるアルゴリズム(ランダムはキーワードになり、鳥に局所性の原則を投げるのに役立ち、多くのキャッシュの有用性を排除しますそれは続く)。

私は特定のデータベースシステムがこれから得ているのを見ることができました。 MyISAMストレージエンジン(データレコードは基本的に賞賛されるCSVです)を使用するMySQLなどです。しかし、私は非常に大規模なハッシュテーブルは、良い例のためのあなたの最良の賭けになると思う。

+0

実際には、アルゴリズム自体がディスクを使用していないということがありました。重要なのは、SSDの性能向上を利用して標準アルゴリズムを有効にすることができる点です。特定の速度とサイズのコンピュータによって管理されたコードがどのように有効にされたかのように... –

+0

アルゴリズムそのもの**はディスクを使用しません - アルゴリズムの実装は私たちが同意することができます。はい、マネージコードはハードウェアの改良によって可能になりましたが、そのためには、より多くの桁の「より良い」コンピュータハードウェアが必要でした。 HDDとSSDの間のジャンプは、大きさの誇張ではありません。唯一信頼できる利点はランダムアクセスです。私の最初の応答に戻って行く "...多くのランダムなディスクI/Oを必要とする..." –

1

SSDはランダムリードでは高速ですが、シーケンシャルリードではビットが小さく、書き込みには適切に遅くなります(ランダムまたは非同期)。

それが今非常に安い(通常のHDDと比較して)非常にそれを更新するには時間がかかりますが、ディスクを検索することになるのでそうdiskbasedハッシュテーブルは、SSDと適切ない便利です。

+0

元の質問では、その正確な理由でハッシュテーブルが人口よりもルックアップの方が実行可能であることを述べました;ハッシュルックアップの事前定義を可能にするソフトウェアと共に出荷される「事前設定済みの」ハッシュテーブルの概念を考えてください。 4GBのインストールスペースは、現代的なアプリケーションにとっては非常に合理的です。 –