从 Cassandra table 中查找包含特定 IP 范围内 IP 地址的行

Find rows from Cassandra table that contains IP address within a specific IP range

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

即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

我正在查看使用正则表达式的查询,但找不到 suitable 答案。我该怎么做?

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

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

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

假设我有一个简单的 table 用于存储 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 定义的组件。

但此示例的目的是表明您确实可以 运行 string/TEXT 类型的范围查询。 Cassandra 还提供了 INET 数据类型,用于存储 IP 地址的特定目的。