1

こんにちは、cql3を使用してマップタイプのテーブルにデータを挿入する際に発生しているこの問題を理解しようとしています。通常、cql3スレッドごとに平均約1000 iopsのデータを問題なく挿入できます。マップ タイプを追加すると、〜 100,000 エントリの後に次のエラーで挿入がタイムアウトしました: 要求を完了できません: 1 つ以上のノードが利用できませんでした。複数のノード (データセンター間でも) で、挿入中に CPU 負荷が異常に高くなっていることに気付きました。

各ノードの仕様は次のとおりです。 CPU: 16 コア メモリ: 64GB

これは、私が設定したテスト テーブル スキーマです。

CREATE TABLE test (
    id text,
    q text,
    g text,
    gt text,
    gi map<text,text>,
    ts timestamp,
    PRIMARY KEY (id, ts)
) WITH CLUSTERING ORDER BY (ts DESC);

CREATE KEYSPACE testkeyspace WITH replication = {
    'class': 'NetworkTopologyStrategy',
    'DC1': '2',
    'DC2': '2'
};

カサンドラ バージョン 1.2.4

更新: 現時点では、他の rdbm からデータをインポートしているだけです。ほぼ 100% の確率で、マップ列に新しい行または新しい要素を追加しています。マップ列に含めることができる要素数の制限については承知しています。

4

3 に答える 3

0

Map タイプに実際にエントリを挿入することは、実際には更新です。コレクションへの挿入は、パフォーマンスに影響を与えます。

于 2014-08-04T14:22:43.983 に答える
0

最近、CQL3 コレクションを使用するとパフォーマンスが大幅に低下するというレポートをいくつか見ましたが、これは私自身が経験したいくつかの問題を説明しています。何が問題を引き起こしているのか、それがコレクション自体なのか、それとも何か他のものなのか、正確にはわかりません。

人々が遭遇する最も一般的なことは、スキーマがホットスポットを作成することです。それが問題であるかどうかは、ステートメントを見ただけではCREATE TABLEわかりませんが、パーティション キー (主キーの最初の項目) の個別の値の数が少ない場合は、常に同じノードに書き込みを行っています。また、Cassandra が理論的には何十億行もの行を処理する場合でも、幅の広い高トラフィックの行は、Cassandra がそれらを継続的に圧縮する必要がある場合に、多くのオーバーヘッドにつながります。読み取りと書き込みも混在させると、Cassandra は行を具体化するために SSTable を何度も掘り下げる必要があります。

常に新しい行を書き込んでいる場合、既存の行を変更している場合、特にそれらのマップ列をどのように操作しているか、実行中の挿入に関する詳細情報を投稿してください。新しい要素を追加したり、要素を削除したりしていますか? これらのマップ列の 1 つに、常にいくつの要素が含まれていると予想されますか?

他にできることは、トレースを使用して操作の 1 つまたはいくつかを実行し、Cassandra が何をしているかを確認することです (方法については、 http://www.datastax.com/dev/blog/tracing-in-cassandra-1-2を参照してください)。トレースを有効にして結果を分析します)。

于 2013-06-25T06:54:53.563 に答える