Cassandra 卡桑德拉还是Hbase?

Cassandra 卡桑德拉还是Hbase?,cassandra,hbase,Cassandra,Hbase,我有一个要求,我想存储以下内容: Mac地址//PKEY 时间戳//PKEY 位置ID 所有者姓名 信号强度 插入逻辑如下所示: 在每个位置(LocationID)每小时存储一次每个活动设备(MacAddress)的上述统计信息 条目在每小时结束时创建,因此主键始终为MAC+时间戳 没有更新,只有插入 可以执行的查询如下: 给我过去“N”小时的所有条目,其中MacAddress=“…” 给我过去N小时的所有条目,其中LocationID位于(locID1,locID2,…) 不用说,

我有一个要求,我想存储以下内容:

  • Mac地址//PKEY
  • 时间戳//PKEY
  • 位置ID
  • 所有者姓名
  • 信号强度
插入逻辑如下所示:

  • 在每个位置(LocationID)每小时存储一次每个活动设备(MacAddress)的上述统计信息
  • 条目在每小时结束时创建,因此主键始终为MAC+时间戳
没有更新,只有插入

可以执行的查询如下:

  • 给我过去“N”小时的所有条目,其中MacAddress=“…”
  • 给我过去N小时的所有条目,其中LocationID位于(locID1,locID2,…)
不用说,有数以十亿计的条目,我想使用HBASE或Cassandra。我试着去探索,看来卡桑德拉可能不是正确的选择

原因是如果我在卡桑德拉有以下几点:

MacAddress:TimeStamp>
+LocationID
+所有者名称
+信号强度

两个查询都会扫描整个数据库,对吗?即使我在LocationID上添加了一个索引,这也只能在一定程度上帮助第二个查询,因为时间戳上没有索引(我相信搜索时间戳并不快,因为MacAddress:timestamp复合键不允许我们只在时间戳上搜索,相反,会发生完全扫描,对吗?)


我一直被困在这里,如果我们选择HBase或Cassandra,任何见解都会很有帮助。

您必须记住,像Cassandra这样的NoSql实例允许水平缩放,并使数据更容易共享。通过开发分片策略(识别分片密钥等),您可以大大减少单个实例上的数据大小,并使查询(即使在尝试查询海量数据集时)成为可能。

使用Cassandra对此建模的正确方法是使用按mac地址分区、按时间戳排序的表,并根据位置id编制索引。请参阅Cassandra数据模型文档,特别是[预定义排序]。您的任何查询都不需要进行完整的表扫描。

任何一个查询都适用于此查询:

给我过去“N”小时的所有条目,其中MacAddress=“…”

在cassandra中,您需要使用有序分区器,以便进行简单的扫描。这样您就不必扫描整个表。(我对卡桑德拉有些生疏)

在hbase中,它总是按行键排序,因此扫描变得很容易。您只需设置开始和停止rowkey。从概念上讲,这将是:

  scan.setStartRow(mac+":"+timestamp);
  scan.setStopRow(mac+":"+endtimestamp);
然后它只会在给定的时间段内扫描行中给定的mac地址——只扫描数据的一小部分

这个查询要困难得多:

给我过去“N”小时中LocationID所在位置的所有条目 (locID1,locID2,…)

Cassandra确实有二级索引,所以看起来很“简单”,但我不知道它会扫描多少数据。自从Cassandra添加了二级索引后,我就没有看过它了

在hbase中,您必须扫描整个表或创建第二个表。我建议创建第二个表,其中rowkey将是,您将复制数据。然后,您将使用该表通过扫描并设置开始键和结束键按位置查找数据