2

我正在寻找创建一个表来存储包含大量网站访问者的 URL 参数详细信息的信息。我正在为每个站点获取每个 user_id-session_id 对的参数和值字典,每个站点都有一个时间戳。

总之:每个站点都有用户(他们有会话),这些用户的参数有时具有值。

我想像这样查询这些数据......

对于每个网站,给定一个日期范围,获取具有一定参数值的客户的customer_id。

ps 我没有用户 ID/会话 ID 的列表,所以我不能在不执行“get_range()”查询的情况下将它们用作行键。这可能很昂贵。

尝试过的解决方案/想法...

我认为动态列在这里会是一个好主意,因为我们并不真正了解所有不同的参数集,我宁愿不尝试对它们进行硬编码。这给了我参数的名称作为列标题和单元格的值作为参数值。这一切都很好,但它给我留下了(站点、日期、客户 ID、会话 ID)的复合行键。

我完全支持大型复合行键,但我认为我(希望得到纠正)不能以这种方式查询数据以获取日期范围。如果是这样,请问我该怎么做?

还考虑过使用 site-datetime 复合列标题,因为它可以让我很好地过滤这些属性。然后我可以将行键作为 (param - param value) 复合键并构建一组 user_ids 作为值。实际上,我认为这听起来是我目前最好的选择,但它仍然看起来相当混乱。

如果有人有任何想法,我很想听听他们的意见!

谢谢,

马特

pps 我正在使用 Pycassa、CQL3 和 Cassandra 1.2,所以我拥有这些平台提供的所有工具

4

2 回答 2

2

@卡利

所有问题都有适当的解决方案

对于查询,我们有:

  • 网站即价值

我们想按日期范围搜索

CREATE TABLE my_index
(
   site text, // row key, also known as partition key
   date timestamp, // search by date range
   user_id bigint, // user id
   session_id uuid, // session id
   parameters map<text,text> // pairs of param key/param value
   PRIMARY KEY (site,date,user_id,session_id)
)

对于每个站点,我们都有一行,因为 site = row key

列名是 ( date ,*user_id*,*session_id*) 的组合。日期是第一个组件,因此您可以按日期查询。

*user_id* 和 *session_id* 是为了保证 UNICITY,这意味着对于每个时间戳,您可以存储超过 1 对 user_id/session_id 的参数

现在,要存储参数,请使用 CQL3 引入的 MAP 功能。参数名称是映射的键,可以存储为text。对于参数值,因为它们可以是任何类型(long、int、string、date ...),最好将它们作为文本进行 JSON 序列化,以便将它们一起存储在地图中。

此解决方案需要在从 Cassandra 持久化/重新读取之前进行一些序列化/反序列化

查询示例:

获取“2013-09-03”“2013-09-04”之间网站www.stackoverflow.com的所有用户、会话和参数

SELECT user_id,session_id,parameters FROM my_index 
WHERE site = 'www.stackoverflow.com' AND date>=1378166400 
AND date<=1378252800

获取网站www.stackoverflow.com在日期'2013-09-03'和 user_id =10的所有参数

SELECT parameters FROM my_index 
WHERE site = 'www.stackoverflow.com' 
AND date=1378166400 AND user_id=10
于 2013-09-08T19:05:42.050 回答
0

cassandra 数据建模基于基于查询的方法。

对于 cassandra 或 noSQL 数据建模初学者,有一个过程涉及对您的应用程序进行数据建模,例如

1- 了解您的数据,设计概念图
2- 详细列出您的所有
查询 3- 使用定义的规则和模式映射您的查询,最适合 cassandra
4- 创建一个逻辑设计,包含从查询派生的字段的表
5- 现在创建一个模式并测试它的接受度。

如果我们建模得好,那么处理新的复杂查询、数据过载、数据一致性设置等问题就很容易。

参加此免费的在线数据建模培训后,您将更加清晰

https://academy.datastax.com/courses/ds220-data-modeling

祝你好运!

于 2015-09-26T13:48:58.267 回答