2

現在、複数のノードを持つ Cassandra クラスターを使用していますが、

シナリオ:レコードを挿入するときに、特定の行が指定されたノードに挿入されていることを確認する必要があります。カスタムパーティションを作成することでこれを処理できますか? または、そのようなことを処理するために利用できるパーティショナーはありますか?

これは、オーバーフローまたはデータが多すぎる場合にクラスターに新しいノードを追加するときに、今後のすべての挿入を新しいノードで行う必要があるためです。したがって、上記のシナリオが機能する必要があります。これはカサンドラで可能ですか?

前もって感謝します。

4

3 に答える 3

2

はい、実装を提供し、フィールドorg.apache.cassandra.dht.IPartitionerでクラス名を参照することで可能です。conf/cassandra.yamlpartitioner:

于 2015-05-11T19:00:16.833 に答える
1

申し訳ありませんが、あなたの解決策はあなたがcassandraに対して行うことができる最悪のことのようです.

Cassandra 1.2 では VNodes http://www.datastax.com/dev/blog/virtual-nodes-in-cassandra-1-2が導入されました。

これにより、クラスターに新しいノードを挿入して、新しいノードに負担をかけずにグローバル負荷を少し迅速に緩和できるはずです (新しいノードは、起動時に書き込みと読み取りを行う以外にも多くのことを行う必要があることに注意してください)。ニュース ノードの挿入を高速化するには、(Vnode を使用した) トークン リングの初期設定に注意する必要があります。

あなたのアプローチは、手動で分割された MySQL サーバーを使用する企業が行ってきたことと非常によく似ています。手動のシャーディングは、Cassandra のようなシステムで解決しようとする主な問題です。

Cassandra が負荷に対処できない 2 つのケースを見てきました。

  1. クラスター全体が過負荷になっている場合、新しいノードを導入することが唯一の解決策です。この場合、VNode はあなたの味方です。これは主に、アプリの負荷を過小評価したことが原因です。クラスターを大きくするか、インスタンスを大きくするかは、あなたの選択です。

  2. クラスター内に特にハンマーで打たれているノードが 1 つあります。これは、アプリが非常に間違ったことを行っていることを示しており、ハードコードされた 1 つ (または非常に少数) のキーに書き込みを行っています。これにより、すべての読み取りと書き込み (そのキーの) が 1 つのノードに集中し、クラッシュするまで過負荷になり、クラスターの残りの部分がその負荷を引き受けようとします (最悪の場合はすべてがダウンし、最良の場合は大きなエラーが表示されます)。性能が落ちる)。
    これに対する解決策は、ハードコーディングされたキーを多くのサブキーにバケット化することです (クラスター全体に確実に収まるように、ハッシュを生成し、nodetools でどこに落ちるかを確認することをお勧めします)。
    この最後のケースは、sysops ソリューションでは解決できないため、そのキーを叩いているアプリのコードに戻って修正する必要があります。

ちなみに、最後のケースは、実装するソリューションで正確に起こることです。単一の cassandra インスタンスは、そのサイズ (メモリに関して) と同じくらい優れており、無敵ではありません。cassandra クラスターが (正しく使用された場合) 単一障害点がないという点で非常に優れているという事実が、cassandra が膨大なワークロードを処理するために使用できる理由です。その単一障害点を自分で挿入しないでください。

于 2013-04-07T12:38:43.917 に答える
1

あなたはこれをしたくありません。それは非常に悪い考えです。

その結果、古いノードはすべて何もしない一方で、新しいノードは完全に打ちのめされます。パフォーマンスは、新しいノードのパフォーマンスによって制限されます。次に、レプリケーション係数が 1 でない限り、新しい行は多数のノードに書き込まれます。これが必要です。

datastax.com にある Cassandra のドキュメントをもう少し読むことをお勧めします。

于 2013-04-05T15:45:18.257 に答える