ログ収集には Cassandra を使用しています。1 時間あたり約 150,000 ~ 250,000 件の新しいレコード。列ファミリーには、「host」、「errorlevel」、「message」などのいくつかの列と、特別なインデックス付き列「indexTimestamp」があります。この列には、時間に丸められた時間が含まれます。
したがって、いくつかのレコードを取得したい場合は、最初に indexTimestamp による IndexExpression ( EQ operator を使用) で get_indexed_slices() を使用し、次にホスト、エラーレベルなどによるその他の IndexExpression を使用します。
indexTimestamp だけでレコードを取得すると、すべて正常に動作します。ただし、indexTimestamp でレコードを取得すると、たとえば、ホスト - cassandra は長時間 (15 ~ 20 秒以上) 動作し、タイムアウト例外がスローされます。
私が理解しているように、インデックス付きの列とインデックスなしの列でレコードを取得する場合、Cassandra はまずインデックス付きの列ですべてのレコードを取得し、次にインデックスのない列でそれらをフィルター処理します。
では、なぜ Cassandra はそれほど遅いのでしょうか? indexTimestamp によると、250,000 を超えるレコードはありません。それらを10秒でフィルタリングすることはできませんか?
私たちの Cassandra クラスターは、4 つの CPU と 4 GB のメモリを備えた 1 台のマシン (Windows 7) で実行されています。