次のものを保存したいという要件があります。
- Mac アドレス // PKEY
- タイムスタンプ // PKEY
- ロケーションID
- 所有者名
- シグナル強度
挿入ロジックは次のとおりです。
- 各ロケーション (LocationID) で 1 時間に 1 回、アクティブなデバイス (MacAddress) ごとに上記の統計を保存します。
- エントリは毎時の終わりに作成されるため、プライマリ キーは常に MAC+TimeStamp になります。
更新はなく、挿入のみ
実行できるクエリは次のとおりです。
- 過去 'N' 時間のすべてのエントリを教えてください MacAddress = "...."
- 過去 'N' 時間のすべてのエントリを教えてください Where LocationID IN (locID1, locID2, ..);
言うまでもなく、何十億ものエントリがあり、HBASE または Cassandra のいずれかを使用したいと考えています。調べてみましたが、Cassandra は正しい選択ではないようです。
その理由は、カサンドラに次のものがある場合です。
< < RowKey > MacAddress:TimeStamp > >
+ LocationID
+ OwnerName
+ 信号強度
どちらのクエリもデータベース全体をスキャンしますよね? LocationID にインデックスを追加しても、タイムスタンプにはインデックスがないため、2 番目のクエリである程度しか役に立ちません (MacAddress:TimeStamp 複合キーがそうでないため、タイムスタンプでの検索は高速ではないと思います)。タイムスタンプのみを検索できるようにすると、代わりにフル スキャンが実行されますが、正しいですか?)。
HBase または Cassandra を選択する必要がある場合、洞察は本当に役に立ちます。