Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nosql 网页信标的数据模型_Nosql_Cassandra - Fatal编程技术网

Nosql 网页信标的数据模型

Nosql 网页信标的数据模型,nosql,cassandra,Nosql,Cassandra,我想在Cassandra中存储数百万个网页信标,每个信标大致类似于以下JSON: '{ "uri": "http://foo.com/bar/index.html", "metric1": 74, "metric2": 123, "conntime": "2011-12-30T13:43:34", "city": "CAMBRIDGE", "state": "MA", "ua": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/53

我想在Cassandra中存储数百万个网页信标,每个信标大致类似于以下JSON:

'{
  "uri": "http://foo.com/bar/index.html",
  "metric1": 74,
  "metric2": 123,
  "conntime": "2011-12-30T13:43:34",
  "city": "CAMBRIDGE",
  "state": "MA",
  "ua": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2",
  "plat": "Win32"
 }'
其中字符串包含URI、多个度量,后跟地理/浏览器/平台数据。正如你所能想象的,将有一个较小数量的不同 uri/UAs/Plats/Cities/States,而每个度量的值将有很大的差异

我已经阅读了和,但我的查询看起来更像以下内容,这似乎不适合计数器:

  • 每个(‘ua’、‘plat’、‘state’、‘city’)的“metric1”中位数是多少
  • 在《康奈德时报》2011-12-30T13:43:34中,“metric2”的第95个百分位数是多少
是否可以(并且明智地)将我的数据反规范化为计数器?还是有更好的方法对数据进行建模


谢谢

这取决于指标集和查询维度集是否定义良好(即,您只需要每个“ua”、“状态”的平均值、中位数。这两个集合可能很长,但有限)

加法指示符可能存储在计数器列中(如果您有count&sum,则始终可以计算平均值):

为了计算中位数和百分位数,我建议创建带有计数器子列的超级列。度量值是子列名称,事件计数是子列值:

CF[event.ua].metric1_values[event.metric1]++;
CF[event.state].metric1_values[event.metric1]++;
...
如果不同度量值的数量过高,则可能会在没有严重不一致的情况下对度量值进行取整

其他指标类型可能需要其他优化


尽管如此,我还是建议以非规范化的形式存储单个事件,类似于前面提到的JSON。卡桑德拉写数据非常快。拥有原始数据将允许您通过在完整数据集上运行Map/Reduce来计算其他指标的历史值。

这很有意义。如果我理解正确,要计算中位数,数据大致如下:
CF[”http://foo.com/bar/index.html““Mozilla/5.0(Windows NT 6.1)AppleWebKit/535.2(KHTML,像Gecko)Chrome/15.0.874.121 Safari/535.2”]。metric1_74[”http://foo.com/bar/index.html“.metric1]++或者,由于大多数数据分析都是离线完成的(比如,每小时一次),只存储原始JSON而只进行Map/Reduce是否更好?
CF[event.ua].metric1_values[event.metric1]++;
CF[event.state].metric1_values[event.metric1]++;
...