【发布时间】: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 无法有效解决此问题。