2012-05-14 7 views
10

ためのキー・バリューストア低レイテンシー:私たちは、次のプロパティを持つSSD担保キーと値のソリューションに取り組んでいるSSD

  • スループット:10000 TPS。 50/50はputs/gets;
  • 遅延:1ms平均、99.9百分位数10ms
  • データ量:〜10億の値、それぞれ〜150バイト。 64ビットキー。ランダムアクセス、20%のデータが適合RAM

Linux IOスケジューラ、ext3/xfsファイルシステムが異なる汎用SSDで、KyotoCabinet、LevelDB、およびRethinkDBを試しました。 Rebenchを使用していくつかのテストを行いました。読み取り専用スループット/レイテンシの

  • 書き込み/更新のみを通じて中程度であるが、多くの高レイテンシの外れ値がある
  • 読み出し/書き込みが混在ワークロードに非常に優れている。そして、すべての場合にことがわかりました下の写真は、3つの期間、横軸は時間(KyotoCabinetのためのそのような挙動を示してもブロック・デバイスへの直接アクセス(ファイルシステムをバイパスして)

の場合にスループット/レイテンシに壊滅的な振動を引き起こします読み取り専用、混在、更新のみ)。

問題は、SSDを使用して記述されたSLAのレイテンシを短くすることが可能であり、どのキー値ストアが推奨されるかです。

enter image description here

+2

これは良い質問ですが、本当にディスカッションスレッド(これはSOの範囲外です)であるため、SOの話題です。それは直接のプログラミング関連ではなく、どこが適切であるか分からない。 –

+0

私はこれを理解していますが、コアの質問はかなり簡単です。商品SSDで1ms未満の読み取り/書き込みレイテンシを達成するキーバリューストアがあります。 – user1128016

+2

私が言ったように、よい質問ですが、直接プログラミングに関連していません。あなたは[sf]またはおそらく[dba.se]でより良い牽引力を得るかもしれません –

答えて

0

これは一種-のharebrainedアイデアですが、それはうまくいくかもしれません。あなたのSSDが128GBだとしましょう。

  1. マシンでmemcachedをスワップ
  2. セットアップとしてそれを使用して
  3. ベンチマーク

128ギガバイトのメモリ制限を設定するには、あなたのマシンを構成SSD

  • に128ギガバイトのスワップパーティションを作成します。カーネルは十分に速く出入りすることができるでしょうか?知るべき方法はありません。それはカーネルよりハードウェアに依存します。

    Poul-Henning Kampは、カーニングにVarnishを実行させるのではなく、カーネルにVarnishのもの(仮想メモリと物理メモリ)を記録させることで、これと非常に似た動作をします。 https://www.varnish-cache.org/trac/wiki/ArchitectNotes

  • 3

    非常に異なる書き込み待ち時間は、SSD(特にコンシューマモデル)の一般的な属性です。なぜこののAnandTech reviewのかなり良い説明があります。 SSDの書き込みパフォーマンスは、ウェアレベリングオーバーヘッドが増加するにつれて、時間外で悪化することが要約されています。ドライブ上のフリーページの数が減少すると、NANDコントローラはページのデフラグメントを開始しなければならず、レイテンシに寄与する。 NANDはまた、様々なNANDブロックにわたるデータのランダムな分布を追跡するためにマップをブロックするLBAを構築しなければならない。このマップが大きくなると、マップ上の操作(挿入、削除)が遅くなります。

    SWアプローチで低レベルのHW問題を解決することはできません。エンタープライズレベルのSSDに移行するか、待ち時間要件を緩和する必要があります。

    1

    Aerospikeは、読み書きのための1秒の待ち時間と、非常に高いTPS(数百万に達する)のために、<の1msの待ち時間でSSDから完全に実行できる新しいキー/値(行)ストアです。

    SSDにはランダムな読み取りアクセスがありますが、書き込みのばらつきを小さくする鍵はシーケンシャルIOです(これは通常のハードディスクと同じです)。また、SSD上での多くの書き込みで発生するウェアレベリングやフェードを大幅に軽減します。

    独自のキーバリューシステムを構築する場合は、ログ構造のアプローチ(Aerospikeなど)を使用して、書き込みが大量になり、大量のチャンクで追加/書き込まれるようにします。インメモリー索引は値の正しいデータ位置を維持することができますが、バックグラウンド・プロセスは古くなった/削除されたデータをディスクから除去し、ファイルをデフラグします。

    関連する問題