2017-12-26 14 views
0

私は3ノードセットアップNode1(172.30.56.60)、Node2(172.30.56.61)、Node3(172.30.56.62)の を持っています。パーティションはnodeipによって囲まれます。
nodeipのトークン/パーティション値を見つけてください - 以下に./nodetoolリング値を1として172.30.56.60Cassandraの単一パーティションからの読み取りを理解する

cqlsh:qnapstat> SELECT token(nodeip) FROM nodedata WHERE nodeip = '172.30.56.60' LIMIT 5; 

system.token(nodeip) 
---------------------- 
    222567180698744628 
    222567180698744628 
    222567180698744628 
    222567180698744628 
    222567180698744628 

を、「172.30.56.60」のみ値以来コーディネータにデータを返します173960939250606057から239923324758894350まではノード172.30.56.60で処理されます。 注:これは私がここに二つの質問を持って私の理解

172.30.56.60 rack1  Up  Normal 32.72 MiB  100.00%    173960939250606057       
172.30.56.62 rack1  Up  Normal 32.88 MiB  100.00%    239923324758894351       
172.30.56.61 rack1  Up  Normal 32.84 MiB  100.00%    253117576269706963       
172.30.56.60 rack1  Up  Normal 32.72 MiB  100.00%    273249439554531014       
172.30.56.61 rack1  Up  Normal 32.84 MiB  100.00%    295635292275517104       
172.30.56.62 rack1  Up  Normal 32.88 MiB  100.00%    301162927966816823       

である私は、次のクエリを実行しようとすると、

1)、それは)172.30.56.61言う(そのコーディネーターを意味していますすべての読み込み172.30.56.60からのデータ?

2)コーディネーターの100 Kエントリすべてを受け取った後、コーディネーターは100Kの集計を実行しますか?そうであれば、172.30.56.61のすべての100Kエントリーがメモリに保持されますか?

SELECT Max(readiops) FROM nodedata WHERE nodeip = '172.30.56.60'; 

おかげで、 ハリー

答えて

3

あなたが理解し、SELECTクエリが実行されると、イベントの流れを見ることができをトレースCQLと呼ばれる便利なツールがあります。

cqlsh> INSERT INTO test.nodedata (nodeip, readiops) VALUES (1, 10); 
cqlsh> INSERT INTO test.nodedata (nodeip, readiops) VALUES (1, 20); 
cqlsh> INSERT INTO test.nodedata (nodeip, readiops) VALUES (1, 30); 
cqlsh> select * from test.nodedata ; 

nodeip | readiops 
--------+----------- 
     1 |  10 
     1 |  20 
     1 |  30 

(3 rows) 
cqlsh> SELECT MAX(readiops) FROM test.nodedata WHERE nodeip = 1; 

system.max(readiops) 
----------------------- 
        30 

(1 rows) 

次に、cqlsh> TRACING ONを設定して、同じクエリを再度実行します。ご質問については

cqlsh> TRACING ON 
Now Tracing is enabled 
cqlsh> SELECT MAX(readiops) FROM test.nodedata WHERE nodeip = 1; 

system.max(readiops) 
---------------------- 
        30 

(1 rows) 

Tracing session: 4d7bf970-eada-11e7-a79d-000000000003 


activity                                      | timestamp     | source  | source_elapsed 
-----------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------+--------------+---------------- 
                                       Execute CQL3 query | 2017-12-27 07:48:44.404000 | 172.16.0.128 |    0 
                             read_data: message received from /172.16.0.128 [shard 4] | 2017-12-27 07:48:44.385109 | 172.16.0.48 |    9 
                         read_data handling is done, sending a response to /172.16.0.128 [shard 4] | 2017-12-27 07:48:44.385322 | 172.16.0.48 |   222 
                                    Parsing a statement [shard 1] | 2017-12-27 07:48:44.404821 | 172.16.0.128 |    -- 
                                   Processing a statement [shard 1] | 2017-12-27 07:48:44.404913 | 172.16.0.128 |    93 
Creating read executor for token 6292367497774912474 with all: {172.16.0.128, 172.16.0.48, 172.16.0.115} targets: {172.16.0.48} repair decision: NONE [shard 1] | 2017-12-27 07:48:44.404966 | 172.16.0.128 |   146 
                              read_data: sending a message to /172.16.0.48 [shard 1] | 2017-12-27 07:48:44.404972 | 172.16.0.128 |   152 
                              read_data: got response from /172.16.0.48 [shard 1] | 2017-12-27 07:48:44.405497 | 172.16.0.128 |   676 
                                Done processing - preparing a result [shard 1] | 2017-12-27 07:48:44.405535 | 172.16.0.128 |   715 
                                       Request complete | 2017-12-27 07:48:44.404722 | 172.16.0.128 |   722 

  1. コーディネーターは、それがあれば(1つのレプリカからの応答を受信しますが、より、RF = 1または(RF > 1CL=ONE)であれば、レプリカにクエリを渡します。 RF > 1CL > 1)、複数のレプリカからの返信を受信して​​回答を比較する必要があるため、コーディネータ側でオーケストレーションが行われます。 実際に実行される方法は、CLを満たすために必要な他のレプリカへのダイジェスト要求とスニッチを使用する最速のレプリカへのデータ要求です。 そして、コーディネーターは、データとダイジェスト要求からの応答をハッシュし、それらを比較する必要があります。 パーティションが特定のノードにハッシュされている場合、そのノードに存在し(RF = 1と仮定して)、そのノードから情報が読み取られます。

  2. クライアントはクエリをページサイズに送信するので、返信自体はバルク(デフォルト= 5000)で返されます。これはクライアント側から設定できます。

詳細については、このyoutubeクリップをCassandraの読み取りパスで見ることをおすすめします。

+0

次のクエリを実行しようとすると、コーディネータ(172.30.56.61と言う)が172.30.56.60からすべてのデータを読み込むのですか?あなたはこの質問に答えることができますか? – Harry

+0

または同じパーティションのデータであっても、多くのノードから読み取られますか? – Harry

+0

コーディネータはクエリをレプリカ/ sに送信し、レプリカ/ sはデータをバルクで返します。私はRF + CL設定に依存していると答えました。なぜあなたは-1に投票しましたか? – TomerSan

関連する問題