【问题标题】:Find rows from Cassandra table that contains IP address within a specific IP range从 Cassandra 表中查找包含特定 IP 范围内 IP 地址的行
【发布时间】:2021-12-01 02:49:41
【问题描述】:

我在 Cassandra 中有一个表格,它以文本格式存储 IP。 我想从该 Cassandra 表中删除其 IP 值为私有 IP 的行。

即位于以下范围内的 IP:

 172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
  240.0.0.0 - 255.255.255.255

我正在使用正则表达式进行查询,但找不到合适的答案。我该怎么办?

【问题讨论】:

    标签: cassandra cql


    【解决方案1】:

    首先,Cassandra 不允许通过正则表达式进行过滤。

    由于 Cassandra 仅通过 PRIMARY KEY 组件存储和检索数据,因此如果不知道 PRIMARY KEY 结构是什么,这将很难回答。但是,我可以给你一个例子,这可能会有所帮助。

    假设我有一个用于存储 IP 地址的简单表,在 IP 的前缀(在本例中为前两个八位字节)上有一个分区键,并在 IP 地址上聚集。这会产生如下 PK 结构:

    PRIMARY KEY (prefix, ip)
    

    这样就可以进行这样的范围查询:

    SELECT ip FROM ips WHERE prefix='172.16'
      AND ip >= '172.16.0.0'
      AND ip <  '172.16.0.4';
    
     ip
    ------------
     172.16.0.0
     172.16.0.1
     172.16.0.2
     172.16.0.3
    
    (4 rows)
    

    同样,您也可以使用范围过滤器DELETE

    DELETE FROM ips WHERE prefix='172.16'
      AND ip >= '172.16.0.0'
      AND ip <  '172.16.0.4';
    

    当然,这只是因为我正在过滤我的 PRIMARY KEY 定义的组件。

    但这个例子的重点是表明您确实可以对字符串/文本类型运行范围查询。 Cassandra 还为存储 IP 地址的特定目的提供了 INET 数据类型。

    【讨论】:

      【解决方案2】:

      您最好编写一个客户端代码来删除此类数据。编写逻辑来识别客户端要删除的键,并将删除查询一一发送到 Cassandra。

      【讨论】:

        猜你喜欢
        • 2011-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-22
        • 2013-11-23
        • 2023-03-28
        • 2017-05-21
        • 2014-09-14
        相关资源
        最近更新 更多