从 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 地址的特定目的。
我在 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 地址的特定目的。