【问题标题】:Sparse denormalised relations using Cassandra - CQL3/2/1 or thrift?使用 Cassandra 的稀疏非规范化关系 - CQL3/2/1 还是 thrift?
【发布时间】:2013-07-06 07:22:11
【问题描述】:

或者...

如何使用 cassandra 记录我们的审计跟踪?

我使用以下关系模型作为实验的基础,看看我们是否可以使用 Cassandra 来存储数亿可查询的行。

| datetime | planet | continent | country | state | <...> | street | who_id | who_name | msg | p1 | p2 | p3 |

这些实体中的任何一个都可能生成审核日志条目。此外,一个低级条目将存储其祖先的所有参考资料;因此,基于高级实体的查找将返回其下方发生的所有内容。[1]使用 PostgreSQL,我们将有大量空的密集行:Cassandra 的一个好处是稀疏行。 (基于大陆的日志条目没有街道列 NULL)。目前共有 25 个实体存在各种排列关系。

我们还希望在事件发生时保留对象图中实体的名称。

我认为我必须掌握数据模型,并认为我会像这样对其进行建模。

对关系链接使用任意复合列。

| (row key)        | planet:1 | continent:101 | country:44 | who:4 | msg             | p1 | p2 | p3   |  
| COUNTRY:TimeUUID | ---------+---------------+------------+-------+-----------------+----+----+------| 
|                  |  "earth" | "europe"      | " UK"      | "Rob" | "*it happnzd!!" | 1  | 5  | true | 

我的目标是能够搜索 who:4 并获取他们的所有更改。 同样,抓取具有 planet:1 的行 - 显示地球上发生的所有变化。

实体链接列是动态的(或者至少我是这么认为的)它们将用于奇怪而奇妙的组合。它认为不必预先指定它们是一个福音,并且通过使用复合类型的列名,可以查询。

  • A.我仍然不确定这是否适用于任何口味的 cassandra。
  • 乙。我不知道如何在 CQL3 中解决这种情况。如有任何帮助,我们将不胜感激。
  • C.我应该使用/关心 CQL 吗?(3)? CQL3 是未来还是 thrift/pelops 仍然是面向未来的方式?

12 个月前 - 我阅读了有关 Cassandra 的文章并购买了几本关于该主题的书。当我阅读它们并开始一个可能受益的项目时,世界已经发生了变化,我在精神上挣扎的东西被抛弃了,转而使用看起来像 SQL 的东西。所以现在我也很困惑。

[1] 此处的非规范化是有意义的,因为事实上审计日志是历史快照,因此它记录了确切的对象图“事件发生时

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    我相信空值在 Cassandra 中是免费的。也就是说,如果一行中的一列是NULL,那就是不是通过记录某种“空标志”来存储的。相反,该列根本没有存储任何内容。因此,具有许多大部分为空的列的非规范化模式并不昂贵。

    【讨论】:

      猜你喜欢
      • 2013-05-04
      • 2016-05-13
      • 2014-12-21
      • 2013-07-08
      • 1970-01-01
      • 2013-05-22
      • 2023-03-07
      • 2020-05-21
      • 2018-07-31
      相关资源
      最近更新 更多