私はデータベースシステムとしてCassandraを使用してCMSのコードを書いています。カサンドラの墓石の問題を避けることはできますか?
CMSの強みの一つは、恒久的にCMSに変化するデータに対して実行するバックエンドコンピュータを使用して、あらゆる種類のものを事前に計算することです。例えば
、CMSは、ページが作成または変更されたリストシステムに指示します。リストシステムは、その情報をlist
という表に保存します。その情報は、どのページを作業しなければならないかを教えてくれる1つのライナーです。たまには
Column family: list
Row: concerned website (i.e. http://www.example.com/)
Column: full URI (i.e. http://www.example.com/this/page)
Value: true (because you need something for the column to exist)
(ほとんどの場合、単純なページ編集後の秒未満)、そのリストのバックエンドシステムが起動し、特定のページが変更されたことを認識し、含ますべてのリストを更新することによって、それに取り組んで開始し(またはこれ以上含まない)ページを要素として使用します。これにより、フロントエンドはに即座にがリスト内の要素の数を知り、リストが必要な時に複雑なクエリを実行することなく非常に迅速にリストを読み取ることができます(多くのCMSはSQLを使用して何を行うのですか?)...
実際には、list
テーブルをTODOリストとして使用しています。私が取り組むべき一連のページ。したがって、フロントエンドはそのリストにページ参照を追加し、バックエンドはそれらを使って完了した後でそれらを削除します。その結果、私はlist
テーブルに非常に多くの墓石が残ることになります。現実の世界の効果:私は墓石の故障があり、システムはランダムの場所で失敗し始めました。リストが機能しなくなると、システム内の他の多くのものが機能しなくなり、Webサイトは使用できなくなります。
私はそれが特定のテーブルに墓石の世話をするためにカサンドラのにかかる時間(およびいくつかの他の)減少したが、私は予想通り、私はカサンドラを使用しているかどうかを疑問に思って。この環境でこの種類のTODOリストを処理するためのより良い方法があるかどうか。サイドノートとして
:TODOリストは、様々な異なるバックエンドのコンピュータからの仕事をすることができます。小規模なシステムでは、リストデータに対して1つのバックエンドしか実行されない可能性があります。何千人ものユーザーがいる大規模なシステムでは、リストを処理するだけのバックエンドは2〜3つありません。したがって、カサンドラのデータを持つことは、コンピュータ間で迅速にデータを共有するのに非常に実用的です。 http://www.datastax.com/dev/blog/cassandra-anti-patterns-queues-and-queue-like-datasets
が回避策と物事の人々は彼らがより良いが、そのハードのゲームをプレイするために作るために何があります
新しいアプリケーションを作成すると恐らく倹約を避けるべきですが、そのアプリケーションは廃止されました。 –
@ChrisLohfink、私はCassandra 0.8から始めましたが、Cassandra 3.xでは残念ながら代わりにCQLを手に入れています。つまり、私はまだ並べ替えが異なるかどうかを知りたいと思っています... –