web日志记录的cassandra数据模型

web日志记录的cassandra数据模型,cassandra,Cassandra,我一直在和Cassandra玩,我正在尝试评估什么是存储视图或唯一页面id的点击等内容的最佳数据模型?最好是每个pageid有一个列族,还是有一个pageid列的超级列(日志)?每个页面都有一个唯一的id,然后希望在视图上存储日期和一些其他指标 我只是不确定哪种解决方案处理更好的可伸缩性、大量列系列或1个巨型超级列 第92838页{日期:9月2日,浏览器:IE} 第22939页{日期:9月2日,浏览器:IE5} 或 日志{ 第92838页{ 日期:2001年9月2日, 浏览器:IE } 第-22

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

我只是不确定哪种解决方案处理更好的可伸缩性、大量列系列或1个巨型超级列

第92838页{日期:9月2日,浏览器:IE} 第22939页{日期:9月2日,浏览器:IE5}

日志{ 第92838页{ 日期:2001年9月2日, 浏览器:IE } 第-22939页{ 日期:2001年9月2日, 浏览器:IE5 } }


其次,如何处理大量不同的日期:page-92838的条目?

您不需要每个pageid都有一个列族

一种解决方案是为每个页面设置一行,并键入pageid

然后,您可以为每个页面视图设置一个列,或者按时间UUID(假设视图按时间排序会很有用)或其他唯一的、始终递增的计数器进行点击、键入和排序。请注意,所有Cassandra列都带有时间戳,因此无论您使用的是其他什么时间戳或日期戳,都会有一个精确的“免费”时间戳。使用精确的时间UUID作为密钥还解决了在同一日期存储多个点击的问题

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


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

假设您要查询某个页面上的点击率,并按浏览器查询点击率,则可以为每个页面设置一个

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

如果您需要进行基于时间的查询,请查看twitters在写入cassandra时的表现。

我喜欢此列设置的简单性,我假设stats是一个超级列?有趣的是,stats是一个普通列族?数据模型看起来像这样吗(使用cli监视器):stats['399485']['hits']=4;统计数据['129495']['hits']=56;因此,使用该数据模型,对于用户,我会有如下内容:userstats['bob'][timeuuid]=399485#pageid userstats['bob'][timeuuid]=455212#另一个pageid userstats['sally'][timeuuid]=129495#PageID将其存储为列是一种很好的做法吗?在我看来,假设行键为“page-12345”,这将导致大量行。如果行键包含时间指示器,建议对每个pageid使用不同的行吗?示例:stats['page-1-alltime]=100;统计数据['page-1-2011]=90;统计数据['page-1-2011-11]=20;stats['page-1-2011-11-21]=5这就是我对雨鸟非规范化的理解。我看到的优点是,您可以更好地跨行分布cluster@Christoph,将#列更改为#键,这是一个输入错误
stats { #cf 
    page-id { #key
        hits : # counter column for hits
        browser-ie : #counts of views with ie
        browser-firefox : ....
    }
}