【问题标题】:Cassandra Data Model For Correlation Application用于关联应用的 Cassandra 数据模型
【发布时间】:2014-03-18 13:54:57
【问题描述】:

我已经在 youtube 上仔细研究 Cassandra 文档和视频了几个星期了。

我正在实现一个日志存储和关联系统,我想为此使用 Cassandra。不过,对于这种类型的应用程序,我似乎无法完全理解 Cassandra 数据模型。对于此类应用程序,我无法找到太多关于最佳数据模型的深入示例。

日志系统围绕 HTTP 网络流量展开。我的日志源会及时扩展,但目前它们将包括代理日志、应用程序日志和一些其他系统日志,其中包括主机名/IP 和事件数据。

我的关联将围绕源 IP 地址和目标 IP 地址以及主机名、域名、geoip 位置、http 方法 (GET/PUT/Connect) 以及围绕所请求文件类型的一些其他可能关联(例如 .jar .exe .pdf)。在所有这些情况下,时间相关性也很重要。

我在很多地方都读到过,Cassandra 的数据建模从考虑您将要运行的查询开始。所以我在这里指定了几个例子。还有更多示例,但以下是一个好的开始,任何查询都将遵循类似的相关模式。

示例查询 1: 显示过去 24 小时或过去一周内,在 URL 中带有 .jar 扩展名的日志中的哪些位置看到了 IP 10.0.0.1

示例查询 2: 显示过去 24 小时内转到域 xyz.com 的所有 PUT 请求

示例查询 3: 显示源主机 192.168.1.1 从 time01 到 time02 的所有日志事件

示例查询 4: 显示昨天发生的 10.0.0.1 和 192.168.1.1 之间的所有通信。

示例查询 5: 将所有新事件与现有的域和 IP 列表进行比较,并向我显示包含这些 IP 和域的任何新事件。

如果需要,我可以提供更多详细信息。任何指导都会很有用。

谢谢!

【问题讨论】:

  • 我只是在寻找指针和指导,正如我在上一句中所说的那样。即使只是指向类似项目或实施的链接也会有很大帮助。
  • 对于每个查询,找出您要询问的单个实体是什么:即您的分区键(主键中的第一列)。然后找出您的查询将在哪些列上进行切片(即:读取相邻的行) - 这些是您的“在 X 和 Y 之间”或“在最后一个 X 内”或类似的。这些列必须是您的集群键(PKey 的第 2 列以上)。最后,您需要在尽可能多的表中复制数据以支持所有查询。
  • 就相关性和其他复杂分析而言,您可能需要 MapReduce,仅 Cassandra 无法有效解决此问题。

标签: cassandra data-modeling


【解决方案1】:

对于查询 1,您可以将 IP 地址和文件类型作为复合键,将时间戳作为集群列。这样您就可以查询具有文件类型和时间戳范围的 IP。

对于查询 2,域和方法(put、get、...)作为复合键,时间戳作为集群列,您可能需要添加 UUID 或请求 id 作为集群 ID,以使您的复合主键唯一。

查询3,IP作为主键,时间戳聚类列,+UUID(如果需要)

查询 4,IPA 和 IPB 作为复合主键,时间戳作为集群列。 在这种情况下,如果通信是定向的,您还需要存储 IPB 和 IPA。

查询5,你必须在客户端程序中这样做

【讨论】:

    猜你喜欢
    • 2014-09-28
    • 2015-12-03
    • 1970-01-01
    • 2011-11-29
    • 2014-03-27
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多