为具有多个可查询字段的时间序列设计Cassandra表

时间:2019-03-07 20:29:10

标签: cassandra key partition

我们正在使用Cassandra存储基于时间的计数器。 这些表将包含与此类似的事件:

{
   ServerTimestamp,   // unix timestamp when it was analized
   GeneratedTimestamp,   // unix timestamp when it was generated
   CounterType,   // short int determining what is the type of event here
   CounterId, // unique for event,
   City,
   Region,
   ShopId,
   Value       // some monetary value in bigint
}

主要假设:

  • 我们正在设计用于报告的表格。
  • 我们必须举办所有活动5年
  • 报告通常生成1天(最多30天)。
  • 报表可以按CounterType,城市,地区和ShopId进行过滤
  • 写入本身不应超过每秒1000次写入。

我的第一个想法是创建两个按时间戳的一天部分划分的表(例如yyyyMMdd):

 First table with key: (ServerTimestampDay), ServerTimestamp, CounterId

 Second table with key: (GeneratedTimestampDay), GeneratedTimestamp, CounterId

写在这里会成问题吗? (我知道由于基于天的分区键,所有内容都会写入一个节点。)

我应该如何处理其余字段? (CounterType,City,Region和ShopId)。

首先,我考虑将它们放入分区键中……但是最常见的行为是搜索这些字段的1、2或ALL值。

我们将有大约1000家商店,因此将它们全部放入查询中(或对每个分区键day / shopId或day / city组合或类似内容发起一个查询将是一场噩梦。

目前,我需要此类报告: (每次选择“城市”,“地区”,“ ShopId”-这是一个多选选项)

报告1个过滤器集:

ServerTimestamp (from-to)
CounterType = [1,2,3]
SiteId = [...]

报告2个过滤器集:

GeneratedTimestamp (from-to)
CounterType = [1,3]
City = [...]
SiteId = [...]

我知道这是很多信息,但是我想尽可能地清楚自己的动机。非常感谢您的帮助!

0 个答案:

没有答案