2016-10-23 6 views
2

私たちは、たくさんのデータセットをcassandraの何百万行にも書き込んでいます。また、これらのレコードを処理し、それらを正常に処理した後に削除するスケジューラーもあります。パフォーマンス - TTL対カサンドラの行を削除する

処理後の行を削除するかどうかを疑問に思っていたのは、行をTTLでマークすること(基本的に削除を遅らせる)です。

Deletion vs TTL w.r.t Cassandraのパフォーマンスには賛否両論がありますか?

おかげで、私が読んだに基づいて多くの _DD

+0

私の意見は、私たちのシステムの観察だけに基づいていますが、私にはTTLが性能に関してより良くなるはずです。私たちはTTLを多く使用しており、パフォーマンスの問題はありません。しかし、手作業によるクリーニング作業を実行する場合があり、システムの負荷が高くなります。 – Michal

答えて

0

。あなたはここでその詳細を読むことができます:

http://www.datastax.com/dev/blog/cassandra-anti-patterns-queues-and-queue-like-datasets

しかしTTLと削除を使用しての性能にほとんど差があり、あなたの基本的な質問に答えるために。 C *のTTLは、削除と同じ墓碑として扱われます。主な違いは、TTLが期限切れになったレコードに、そのレコードが再度読み取られるまで、墓石が書き込まれないことです。削除が呼び出されると、すぐに墓石が作成されます。一般に、墓石はC *の中で重大なパフォーマンス上の問題を引き起こしますが、作成する問題を緩和するいくつかの方法がありますが、それらの多数が通常C *の貧弱なデータモデルまたは悪いユースケースを指しています。あなたが本当にC *を待ち行列として使用しているのであれば、Redisのような目的に適したものを使ってみませんか?

+0

bechbdのご注意ありがとうございます - はい私はこのアンチパターンを知っています。残念ながら、リソースの制約のために、別のデータソースに頼ることは望ましくありません。あなたの主張に戻る - 「大きな違いは、TTLが期限切れになったレコードに墓石が書き込まれないということです。これは、そのレコードが再度読み取られるまでに失効しました」ということです。 。 –

+0

まだ圧縮プロセスの一部として削除されません。 TTLのレコードが読み込まれない限り、追加の墓石レコードは書き込まれないということです。 – bechbd

0

、TTLは、おそらく早くあなたの最速の削除プロセスは可能性のようになります。理由は、TTLは、それを墓石でマークするためにデータを探す必要がないからです。 TTLはレコード上に存在し、レコードが読み取られ、TTLが満了したときには、それはトムソントーンでマークされます。あなたがここに与えている、それはあなたがよく知られているアンチパターンであるキューとしてカサンドラを使用しているように私には聞こえるなけなしの情報から

http://docs.datastax.com/en/cql/3.1/cql/cql_using/use_expire_c.html

1

TTLを使用すると、レコードはすぐにストレージから削除されません。このレコードは、削除のマークとしてマークされます。コンパクションが発生したときにのみ物理的に削除されます。その時間まで、データは、圧縮が起こるまでリソースを消費するので、ノードの処理に影響を与えます。レンジ・クエリー・イベントを実行すると、削除された(墓石としてマークされた)レコードがCassandraによってスキャンされます。したがって、TTLを使用してあまりにも多くのエントリを削除すると、アンチパターンとみなされます。推奨されるのは、個々の行を削除する必要がないように一時表を使用することです。テーブル全体をドロップしてください。

関連する問題