El tipo de datos IP en los índices de búsqueda permite almacenar y consultar direcciones IPv4 e IPv6 para escenarios de análisis de registros, seguridad de red y geolocalización.
Para usar el tipo de datos IP en un índice de búsqueda, y póngase en contacto con el soporte técnico de Tablestore para habilitar esta función.
Funcionamiento
Asigne un campo String de su tabla de datos al tipo IP en el índice de búsqueda. El tipo de datos IP admite tres métodos de consulta: consulta de término, consulta de rango y consulta compuesta. Una estructura de índice de direcciones IP especializada proporciona almacenamiento unificado y recuperación eficiente para IPv4, IPv6 y sus formatos variantes.
Formatos de IP compatibles
El tipo de datos IP admite los siguientes formatos de dirección IP.
|
Formato de dirección IP |
Descripción |
|
|
IPv4 |
Formato estándar de dirección IPv4: cuatro grupos de números decimales separados por puntos (.). |
|
|
IPv6 |
Formato estándar de dirección IPv6: ocho grupos de cuatro dígitos hexadecimales separados por dos puntos (:). |
|
|
Formato IPv6 abreviado |
Notación abreviada estándar para direcciones IPv6. |
|
|
Dirección IPv6 asignada a IPv4 |
Formato de dirección IPv6 asignada a IPv4. Admite consultas mediante el formato IPv4. Nota
Por ejemplo, si el valor de la columna |
|
Escenarios de consulta
Las consultas de tipo IP admiten tres métodos, cada uno adecuado para diferentes escenarios empresariales.
|
Tipo de consulta |
Descripción |
Implementación |
Caso de uso |
|
Consulta de término |
Coincide con una dirección IP específica. |
Especifique la dirección IP de destino en una consulta de término. |
|
|
Consulta de rango |
Coincide con datos dentro de un rango de direcciones IP especificado. |
|
|
|
Consulta compuesta |
Combina condiciones de dirección IP con otras dimensiones. |
Use la función de consulta compuesta para combinar varias condiciones. |
|
Uso de un campo de tipo IP
Los SDK de Java y Go de Tablestore admiten campos de tipo IP. A continuación se muestra un ejemplo que usa el SDK de Java. Use la versión 5.17.6 o posterior del SDK de Java de Tablestore.
Paso 1: Cree un índice de búsqueda que contenga un tipo IP
Al crear un índice de búsqueda, asigne el campo String para consultas de IP al tipo IP.
private static void createSearchIndex(SyncClient client) {
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName(TABLE_NAME);
request.setIndexName(INDEX_NAME);
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(Arrays.asList(
new FieldSchema("Col_Keyword", FieldType.KEYWORD).setIndex(true).setEnableSortAndAgg(true),
// Set the index for the Col_Ip column to the IP type.
new FieldSchema("Col_Ip", FieldType.IP).setIndex(true).setEnableSortAndAgg(true)
));
request.setIndexSchema(indexSchema);
client.createSearchIndex(request);
}
Paso 2: Escribir datos IP en la tabla de datos
Escriba datos de direcciones IP en el campo configurado como tipo IP.
private static void putRow(SyncClient client) {
String[] keywords = { "Router", "Phone", "PC1", "PC2", "Home Bot" };
for (int i = 0; i < 5; i++) {
// Build the primary key.
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_1, PrimaryKeyValue.fromString("pk1" + i));
PrimaryKey primaryKey = primaryKeyBuilder.build();
RowPutChange rowPutChange = new RowPutChange(TABLE_NAME, primaryKey);
// Add an attribute column.
rowPutChange.addColumn("Col_Keyword", ColumnValue.fromString(keywords[i]));
// Add an attribute column and write the IP address.
rowPutChange.addColumn("Col_Ip", ColumnValue.fromString("192.168.1." + i));
client.putRow(new PutRowRequest(rowPutChange));
}
}
Paso 3: Compruebe la configuración
-
Comprobar una consulta de término de IP
/** * To query for an exact IP address, use TermQuery. */ private static void searchExactIp(SyncClient client) { SearchQuery searchQuery = new SearchQuery(); TermQuery query = QueryBuilders.term("Col_Ip", "192.168.1.1").build(); searchQuery.setQuery(query); searchQuery.setLimit(100); SearchRequest searchRequest = new SearchRequest(TABLE_NAME, INDEX_NAME, searchQuery); SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet(); columnsToGet.setReturnAll(true); searchRequest.setColumnsToGet(columnsToGet); SearchResponse resp = client.search(searchRequest); System.out.println("TotalCount: " + resp.getTotalCount()); System.out.println("Row: " + resp.getRows()); } -
Comprobar una consulta de rango de IP
/** * To query for an IP address range, you can use CIDR notation in a TermQuery or use a RangeQuery. */ private static void searchIpSegment(SyncClient client) { SearchQuery searchQuery = new SearchQuery(); // Query for an IP range using CIDR notation. TermQuery query = QueryBuilders.term("Col_Ip", "192.168.1.1/24").build(); // Alternatively, use a RangeQuery to query for an IP range. // RangeQuery query = QueryBuilders.range("Col_Ip").greaterThanOrEqual("192.168.1.0").lessThanOrEqual("192.168.1.255").build(); searchQuery.setQuery(query); searchQuery.setLimit(100); SearchRequest searchRequest = new SearchRequest(TABLE_NAME, INDEX_NAME, searchQuery); SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet(); columnsToGet.setReturnAll(true); searchRequest.setColumnsToGet(columnsToGet); SearchResponse resp = client.search(searchRequest); System.out.println("TotalCount: " + resp.getTotalCount()); System.out.println("Row: " + resp.getRows()); }
Mejores prácticas
-
Especificar ambos límites en las consultas de rango
Especifique siempre los límites superior e inferior del rango de direcciones IP. Si su tabla de datos contiene direcciones IPv4 e IPv6, una consulta con solo una condición de límite para una dirección IPv4 podría devolver direcciones IPv6 no deseadas.
-
Preferir la notación CIDR
Para consultas de rango de IP, use la notación CIDR, como
192.168.1.1/24. La notación CIDR es más concisa y precisa que las consultas de rango tradicionales, y ayuda a prevenir errores en las condiciones de límite.