web-dev-qa-db-ja.com

null値をcassandra

Cassandraに保存しているフィールドがいくつかありますが、それらのいくつかは任意の時点でnullになる可能性があります。それらは非常に多いので、INSERTに追加する前にそれぞれのnullをチェックしないと、コードがはるかに読みやすくなります。

そうすることで何か害はありますか?

編集!!

私が見つけたjiraチケットがあります。しかし、チケットから最終的にどのようなソリューションが実装されたのか理解できません。 https://issues.Apache.org/jira/browse/CASSANDRA-7304

6
ArchitGarg

Cassandraの新しいストレージエンジンのすばらしい点は、値を[〜#〜] not [〜#〜]保存できることです。それが意味するのは、それが意図されていたものです。null値は、単にそこにあるべきではない値です。

Null値明示的に(または暗黙的に、後で参照)挿入されないはストレージスペースを使用せず、処理能力とIO帯域幅)を使用しないため、これにより大きな柔軟性が得られます。

実際、行にnull値を入力するのは非常に簡単です。

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

このようにして、c2とc3の両方にnull値を格納するようにC *に明示的に指示しています。ただし、次の場合と同じ巨視的効果を得ることができます。

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

巨視的効果と言っていることに注意してください。明示的にnull値を挿入すると、C * willフードに墓石が挿入されるためです。長期的には、C *が検索や圧縮などを実行する方法が原因で、これはあなたを悩ませます。したがって、可能な限り避ける必要があります。2番目のバージョンの方がはるかにパフォーマンスが向上します。

ここで、トラップもあります。トゥームストーンを作成することもできます暗黙的に。このwillは、Cassandraに組み込まれている[〜#〜] ttl [〜#〜]機能を使用すると発生します。

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

13
xmas79

null値を挿入するとトゥームストーンが作成されます。
トゥームストーンを作成しないでください
1。トゥームストーンはスペースを占有し、必要なストレージの量を大幅に増やすことができます。
2。トゥームストーンの数が多いテーブルをクエリすると、パフォーマンスの問題が発生し、レイテンシとヒープのプレッシャーが発生します。

11
Ashraful Islam