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

发布于 2024-12-07 15:40:41 字数 416 浏览 0 评论 0原文

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

我只是不确定哪种解决方案可以处理更好的可扩展性,是大量列族还是 1 个巨型超级列?

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

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

,如何处理第 92838 页的大量不同日期:条目?

Been playing around with Cassandra and I am trying to evaluate what would be the best data model for storing things like views or hits for unique page id's? Would it best to have a single column family per pageid, or 1 Super-column (logs) with columns pageid? Each page has a unique id, then would like to store date and some other metrics on the view.

I am just not sure which solution handles better scalability, lots of column family OR 1 giant super-column?

page-92838 { date:sept 2, browser:IE }
page-22939 { date:sept 2, browser:IE5 }

OR

logs {
page-92838 {
date:sept 2,
browser:IE
}
page-22939 {
date:sept 2,
browser:IE5
}
}

And secondly, how to handle lots of different date: entries for page-92838?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

难如初 2024-12-14 15:40:41

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

一种解决方案是每个页面占一行,并以 pageid 为键。

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

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

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

You don't need a column-family per pageid.

One solution is to have a row for each page, keyed on the pageid.

You could then have a column for each page-view or hit, keyed and sorted on time-UUID (assuming having the views in time-sorted order would be useful) or other unique, always-increasing counter. Note that all Cassandra columns are time-stamped anyway, so you would have a precise timestamp 'for free' regardless of what other time- or date- stamps you use. Using a precise time-UUID as the key also solves the problem of storing many hits on the same date.

The value of each column could then be a textual value or JSON document containing any other metadata you want to store (such as browser).

page-12345 -> {timeuuid1:metadata1}{timeuuid2:metadata2}{timeuuid3:metadata3}...
page-12346 -> ...
梅倚清风 2024-12-14 15:40:41

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

假设您想查询页面上的点击量以及浏览器的点击量,您可以有一个 计数器列对于每个页面,例如,

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

如果您需要进行基于时间的查询,请查看 twitters rainbird当它写入 cassandra 时,会进行非规范化

With cassandra, it is best to start with what queries you need to do, and model your schema to support those queries.

Assuming you want to query hits on a page, and hits by browser, you can have a counter column for each page like,

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

If you need to do time based queries, look at how twitters rainbird denormalizes as it writes to cassandra.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文