【问题标题】:How to find the delta difference for a table in cassandra using uuid column type如何使用 uuid 列类型在 cassandra 中查找表的增量差异
【发布时间】:2020-04-15 15:46:53
【问题描述】:

我的 Cassandra 数据库上有下表,我想找出 cassandra 查询方面的差异。例如,如果我对表进行任何插入、更新、删除操作,我应该能够显示哪些行/行受到影响作为我的最终结果。

  1. 假设在第一个实例中我执行了大约 10 行插入,所以如果我采用增量差异,输出应该只显示插入了 10 行。同样,如果我们修改任意数量的行或删除一些行,那么应该捕获这些更改。
  2. 如果我们下一次运行查询,它最好给出 0,因为我们没有插入/修改/删除任何行/行 这是下表
CREATE TABLE datainv (
  datainv_account_id uuid,
  datainv_run_id uuid,
  id uuid,
  datainv_summary text,
  json text,
  number text,
  PRIMARY KEY (datainv_account_id, datainv_run_id));

我在互联网上搜索过很多东西,但大多数解决方案都是基于 timeuuid,但在这种情况下,我只有 uuid 列。所以我没有得到任何可以使用 uuid

实现相同用例的解决方案

【问题讨论】:

    标签: cassandra cassandra-3.0


    【解决方案1】:

    在 Cassandra 中生成 2 个表状态之间的差异并不容易,因为您无法轻松检测是否插入了新分区。您可以基于timeuuidtimestamp 作为聚类列来实现某些东西 - 在这种情况下,您将能够过滤掉自最新更改以来的数据,因为您对 @ 没有的值进行排序987654323@ 完全随机。但它仍然需要您对所有表执行完整扫描。另外它不会检测到删除...

    理论上,您可以使用 Spark 实现此功能,如下所示:

    • 读取所有主键值并将这些数据存储在其他表中/磁盘上;
    • 下一次,读取所有主键值并找出原始主键集与新集之间的差异 - 例如,进行完全外连接并使用左侧的 None 的存在作为添加,以及 None 的存在删除权;
    • 将新的主键集存储在单独的表中/磁盘上,但应截断以前的版本。

    但它会消耗相当多的资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-14
      • 1970-01-01
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      • 2022-01-07
      相关资源
      最近更新 更多