Cassandra 1.2.1、複合キーを使用して、特定の partitionID のすべてのレコードを取得しようとしています。以下は、私が使用しているスキーマです。
- タイムスタンプ
- デバイスID
- データ転送
- ロケーション ID
- デバイス所有者
主キーは複合キー (タイムスタンプ、デバイス ID) です。したがって、TimeStamp はパーティション キーです。各レコードは 70 ~ 80 バイトになります。
1000 の異なるタイムスタンプがあり、タイムスタンプごとに 50 万のデバイス ID があります。5 億件のレコードがあり、特定のタイムスタンプのすべてのレコードを取得したいと考えています。次のようなもの:
Select * from schema where TimeStamp = '..'
私の理解では、関連する行はすべて連続したディスクの場所に格納されているため、このクエリはすべてのレコードを高速に取得できるはずです。つまり、結果が得られるディスク シークはほとんどありません。フィルタは TimeStamp に基づいています。つまり、クエリでヒットするノードは 1 つだけです。また、データの総量は 500K * 80 バイト ~ 40 MB と、それほど多くはありません。ただし、これを CQL (3) または Astyanax で実行すると、RPC タイムアウトが発生します。
partitionID のすべてのレコードが連続したディスクの場所にあるという私の理解は間違っていますか? そのようなデータを一括取得する正しい方法は何ですか?