2

次のものを保存したいという要件があります。

  • 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 を選択する必要がある場合、洞察は本当に役に立ちます。

4

3 に答える 3

5

これを Cassandra でモデル化する正しい方法は、MAC アドレスでパーティション分割され、タイムスタンプで並べ替えられ、ロケーション ID でインデックス付けされたテーブルを使用することです。Cassandra データ モデルのドキュメント、特にクラスタリング[定義済みの並べ替え] に関するセクションを参照してください。どのクエリでも、完全なテーブル スキャンは必要ありません。

于 2013-02-24T05:27:56.000 に答える
1

Cassandra のような NoSql インスタンスでは水平方向のスケーリングが可能であり、データのシャーディングがはるかに簡単になることを覚えておく必要があります。シャード戦略 (シャード キーの識別など) を開発することで、単一インスタンスのデータのサイズを劇的に削減し、クエリを実行可能にすることができます (大量のデータ セットをクエリしようとしている場合でも)。

于 2013-02-21T04:14:49.877 に答える
0

このクエリではどちらでも機能します。

過去 'N' 時間のすべてのエントリを教えてください MacAddress = "...."

cassandra では、順序付けされたパーティショナーを使用して、簡単にスキャンできるようにします。そうすれば、テーブル全体をスキャンする必要がなくなります。(私はCassandraで少し錆びています)。

hbase では、常に行キーによって順序付けられるため、スキャンが容易になります。開始行キーと停止行キーを設定するだけです。概念的には次のようになります。

  scan.setStartRow(mac+":"+timestamp);
  scan.setStopRow(mac+":"+endtimestamp);

そして、指定された期間、指定されたMACアドレスの行のみをスキャンします-データの小さなサブセットのみ。

このクエリははるかに困難です。

過去 'N' 時間のすべてのエントリを教えてください Where LocationID IN (locID1, locID2, ..);

Cassandra にはセカンダリ インデックスがあるため、「簡単」に思えるかもしれませんが、スキャンするデータの量はわかりません。セカンダリ インデックスが追加されたため、Cassandra については調べていません。

hbase では、テーブル全体をスキャンするか、2 つ目のテーブルを作成する必要があります。行キーが < location:timestamp > である 2 番目のテーブルを作成し、データを複製することをお勧めします。次に、そのテーブルを使用して、スキャンを使用し、開始キーと終了キーを設定して、場所ごとにデータを検索します。

于 2013-05-10T17:38:48.547 に答える