2016-11-21 10 views
2

私はCassandraに保存しているフィールドをいくつか持っていますが、それらのいくつかは任意の時点でnullになることがあります。かなり多くのものがあるので、INSERTにそれを追加する前にそれぞれのnullをチェックしなければ、コードをもっと読みやすくします。cassandraにヌル値を挿入する

そうする際に害がありますか?

EDIT !!

私が見つけたジラのチケットがあります。しかし、私はどのような解決策が最終的にチケットから実装されたのか理解できません。 https://issues.apache.org/jira/browse/CASSANDRA-7304

答えて

7

null値を挿入すると、墓石が作成されます。あなたは墓石を作成するべきではありません

1.墓石にはスペースを取ると、実質的に必要なストレージの量を増やすことができます。
2.墓石が多数あるテーブルを照会すると、パフォーマンス上の問題が発生し、レイテンシとヒープ・プレッシャーが発生します。

+0

私は何かできることを提案できますか?私は各挿入中にすべての列をチェックしたくない。また、私は多くの時間がかかるので、すべてのケースで動的にクエリを作成する必要はありません。 – ArchitGarg

+0

独自のコードを記述するか、QueryBuilderのINSERTおよびUPDATEコードを変更して、NULL挿入の設定を解除することができます –

6

カッサンドラの新しいストレージエンジンについての美しいものは、にはの値が格納されています。それが意味することは、それが意図されたものです:null値は単にそこにはいけない値です。 が明示的に(または暗黙的に、後で参照してください)挿入されていないと、ストレージスペースが消費されず、処理能力とIO帯域幅も使用されないため、これは大きな柔軟性をもたらします。

確かに、NULL値を持つ行を移入するのは簡単です:

INSERT INTO mytable (pk, c2, c3) VALUES (0x1234, null, null); 

明示的にC2とC3の両方にNULL値を格納するためにC *を言っているこの方法です。あなたが明示的にNULL値を挿入すると、C * フードnuder墓石を挿入しますので、私は、肉眼効果を言う

INSERT INTO mytable (pk) VALUES (0x1234); 

注意:ただし、同じ肉眼効果を得ることができます。長期的には、これはC *が検索、圧縮などを実行する方法のおかげであなたを噛んでしまいます。可能な限り避けるべきです。

今や、罠があります。墓石暗黙にを作成することもできます。このは、TTLの機能をCassandraに組み込んで使用すると、になります。

結論として、自分自身について気にしている場合は、null値の挿入を実行しないことをお勧めします。アプリケーションレベルでチェックを行うと、読み込み中など、後で時間とお金を節約できます。

関連する問題