用于Web日志记录的cassandra数据模型

时间:2011-10-02 14:46:28

标签: cassandra

一直在玩Cassandra,我正在尝试评估什么是最好的数据模型,用于存储视图或点击唯一页面ID的内容?最好是每个pageid有一个列系列,还是带有pageid列的1个超级列(日志)?每个页面都有一个唯一的ID,然后想在视图上存储日期和其他一些指标。

我只是不确定哪种解决方案可以处理更好的可扩展性,很多列系列OR 1巨型超级列?

page-92838 {date:sept 2,browser:IE} 第22939页{日期:9月2日,浏览器:IE5}

OR

日志{    第92-838页{       日期:9月2日,       浏览器:IE    }    第22939页{       日期:9月2日,       浏览器:IE5    } }

其次,如何处理许多不同的日期:第92838页的条目?

2 个答案:

答案 0 :(得分:2)

每个pageid不需要列族。

一种解决方案是为每个页面添加一行,键入pageid。

然后,您可以为每个页面视图或命中,键入和按时间排序UUID(假设按时间排序顺序的视图将是有用的)或其他独特的,始终增加的计数器。请注意,无论如何所有Cassandra列都带有时间戳,因此无论您使用何种其他时间戳或日期戳,您都可以获得“免费”的精确时间戳。使用精确的时间UUID作为键也解决了在同一天存储许多命中的问题。

每列的值可以是文本值或包含您要存储的任何其他元数据的JSON文档(例如浏览器)。

page-12345 -> {timeuuid1:metadata1}{timeuuid2:metadata2}{timeuuid3:metadata3}...
page-12346 -> ...

答案 1 :(得分:1)

使用cassandra,最好从您需要执行的查询开始,并对模式进行建模以支持这些查询。

假设您要查询网页上的匹配,并按浏览器点击,您可以为每个网页设置counter column,例如

stats { #cf 
    page-id { #key
        hits : # counter column for hits
        browser-ie : #counts of views with ie
        browser-firefox : ....
    }
}

如果您需要执行基于时间的查询,请查看在写入cassandra时twitters rainbird denormalizes的方式。