一直在玩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页的条目?
答案 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的方式。