芭蕉VimeoがVoxerについて話すのを見て、マットは「読み取り操作は本当に高価です」と言いました。
読み取りが発生すると、Riakはある種のクォーラムを使用してデータを提供するノードを選択しますか?
Riakはマスターレスなので、すべてのノードに同じデータが含まれている必要がありますね。(明らかに、結果整合性に起因する不整合ウィンドウの後)
ありがとう
あなたは彼が何について話しているのか少し理解していません。彼は回転するディスクとそれらから読み取る費用について話している。これはRiak固有の問題ではありません。
それらには、メモリに収まらない大量のデータがあります。SSDは、現在のサイズ制限ではサーバーに十分に詰め込めないため、大きすぎて簡単に使用できません(これが、SSDから離れて、彼の講演で述べているように回転ディスクに戻った理由です)。
インメモリデータベースを使用していない場合(インメモリバックエンドを使用している場合を除き、Riakは使用していません)、Mattが講演のそのセクションで述べているように、IOPSの数によって制限されます。ディスクから読み取る必要がある場合は、ディスクを使用できます。それを回避する方法はありません。あなたはディスクから読んでいます。彼は続けて、あなたがそれを助けるためにあなたができるすべてをキャッシュしたいと述べています。
これは、ディスクへのアクセスに関して、使用しているデータベースプラットフォームに関係なく、ほぼ同じように機能します。フリーランチはありません:)
Riakを使用していて、データセットが使用可能なメモリの量を超えている場合、「キャッシュミス」が発生したときにディスクから読み取る必要があります。デフォルトのBitcaskバックエンドを使用している場合、Riakは基盤となるOSのディスクキャッシュに依存します。他のバックエンドはこれを実行する場合と実行しない場合があり、代わりに独自のメモリ内キャッシュを実行します。
ノード上のデータに関する質問については...Riakはマスターレスであり、元々はAmazonDynamoの論文に基づいています。コンシステントハッシュを使用してデータをリング全体に分散し、レプリカを使用して隣接ノードに書き込み、構成する「N値」によって制御します(これはバケットごと、さらにはリクエストごとに構成可能です)。これを読むと、同じハッシュ方法を使用して、データが「存在する」ノードを見つけます。
読み取りはデフォルトで(n_val / 2)+ 1ノードから読み取られますが、ニーズに合わせてリクエストごとにこれを調整できます。結果整合性があるため、読み取りを行った時点でこれらのノードのデータが同じであるという保証はありません。ビジネスロジックによっては、競合の解決を実行する必要がある場合があります。そうは言っても、何かが矛盾している時間は、通常の操作ではミリ秒単位で測定されることを理解してください(たとえば、ネットワークパーティションやノードがダウンから回復していない場合)。
私たちのウェブサイトにはこれらのことに関するたくさんの情報があり、簡単に見つけられるように整理するために一生懸命努力しています。特に、Riak(データの分散方法についてのクラスタリング)を確認することをお勧めします。