ElasticSearch elimina datos en el índice (delete_by_query)

1. Eliminar datos con más de dos meses de antigüedad

En Elasticsearch, para eliminar datos con más de dos meses de antigüedad, se pueden seguir los siguientes pasos:

Para calcular la fecha dos meses antes de la hora actual, puede usar el módulo de fecha y hora de Python para lograrlo.

import datetime

# 获取当前日期
now = datetime.datetime.now()

# 计算两个月前的日期
two_months_ago = now - datetime.timedelta(days=60)

Cree la solicitud de eliminación de Elasticsearch y use la biblioteca Elasticsearch-Py para interactuar con Elasticsearch.

from elasticsearch import Elasticsearch

# 创建 Elasticsearch 连接
es = Elasticsearch([{'host': 'localhost', 'port': 9200}])

# 构造删除请求
delete_query = {
    "query": {
        "range": {
            "timestamp": {
                "lt": two_months_ago.strftime("%Y-%m-%dT%H:%M:%S")  # 格式化日期为 Elasticsearch 支持的格式
            }
        }
    }
}

# 发送删除请求
es.delete_by_query(index='your_index_name', body=delete_query)

        Esto elimina los datos del índice que tienen más de dos meses. Cabe señalar que la operación de eliminación de datos es irreversible, utilícela con precaución y realice suficientes pruebas en el entorno de producción. Además, los nombres de índice específicos, los nombres de campo y los nombres de campo de fecha deben modificarse de acuerdo con su situación real.

2. Eliminar datos por alias

        Elasticsearch Alias ​​​​se puede usar para eliminar datos en múltiples índices a la vez. Un alias se puede entender como una referencia a uno o más índices, y el alias se puede eliminar para eliminar los datos de varios índices al mismo tiempo.

El siguiente es un código de muestra que utiliza la biblioteca Elasticsearch-Py para eliminar datos en varios índices a la vez:

from elasticsearch import Elasticsearch

# 创建 Elasticsearch 连接
es = Elasticsearch([{'host': 'localhost', 'port': 9200}])

# 定义要删除数据的索引别名
index_alias = "your_index_alias"

# 构造删除请求
delete_query = {
    "query": {
        "range": {
            "timestamp": {
                "lt": "now-2M"  # 删除两个月以前的数据
            }
        }
    }
}

# 发送删除请求,并指定索引别名
es.delete_by_query(index=index_alias, body=delete_query)

        En este ejemplo, usamos la variable index_alias para especificar el alias de índice de los datos que se eliminarán y luego enviamos una solicitud de eliminación a través del método es.delete_by_query(), en el que especificamos el rango de datos que se eliminarán. matemáticas se usa aquí La expresión "ahora-2M" para representar un punto en el tiempo hace dos meses. Esto eliminará los datos que tengan más de dos meses en todos los índices asociados con el alias.

        Cabe señalar que el uso de un alias para eliminar datos en un índice es una operación poderosa, por lo que debe usarse con precaución y probarse completamente en un entorno de producción. Al mismo tiempo, los alias de índice específicos y los nombres de campo deben modificarse de acuerdo con su situación real.

3. Si pertenece a la eliminación lógica

        Usar el método delete_by_query de Elasticsearch para eliminar datos en el índice no es una lápida. En realidad, ejecuta una operación de consulta y, a continuación, realiza una operación de eliminación basada en los resultados de la consulta para eliminar físicamente los documentos que cumplen las condiciones de consulta del índice.

        La eliminación lógica generalmente se logra agregando un campo de marca (como eliminado) al documento y estableciéndolo en verdadero para indicar que está marcado como eliminado, y luego filtrando estos documentos marcados como eliminados al consultar, para lograr el efecto de borrado lógico. Este enfoque puede conservar el historial de documentos eliminados para necesidades posteriores de recuperación o consulta.

        Sin embargo, usar el método delete_by_query es eliminar físicamente los documentos que cumplen con las condiciones de la consulta directamente desde el índice. Estos documentos no se restaurarán y la operación de eliminación generará cierta sobrecarga y afectará el rendimiento en Elasticsearch. Por lo tanto, cuando se utiliza el método delete_by_query, se requiere una consideración cuidadosa y se deben realizar pruebas y verificaciones adecuadas en un entorno de producción.

4. ¿Sigue ocupando espacio de almacenamiento después de eliminar los datos?

        En Elasticsearch, cuando los documentos se eliminan mediante el método delete_by_query, los documentos en realidad se marcan como eliminados, pero no se eliminan inmediatamente del disco. En su lugar, estos documentos eliminados se eliminan del disco durante las operaciones de combinación de segmentos posteriores.

        Por lo tanto, aunque los documentos se eliminen mediante el método delete_by_query, estos documentos seguirán ocupando espacio de almacenamiento hasta que se active y se complete la operación de combinación de segmentos. Esto también significa que incluso si se elimina una gran cantidad de documentos con el método delete_by_query, el espacio de almacenamiento en el disco no se liberará de inmediato, sino que deberá esperar a que se limpie la operación de combinación de segmentos.

        En Elasticsearch 7.x y versiones posteriores, se introdujo una nueva API _delete_by_query, que se puede actualizar en tiempo real a través del parámetro de actualización al eliminar un documento (de manera predeterminada, Elasticsearch realizará una operación de actualización periódica para garantizar que los datos persistan para disco). Esto libera espacio de almacenamiento más rápidamente, pero aún debe tener en cuenta el impacto potencial en el rendimiento y el almacenamiento. Al usar el método delete_by_query, se recomienda tener cuidado en un entorno de producción y monitorear de cerca el uso del almacenamiento cuando se eliminan grandes cantidades de datos.

5. ¿El uso del método delete_by_query afecta el almacenamiento de big data?

        Para eliminar una gran cantidad de datos, usar el método delete_by_query puede tener cierto impacto en el rendimiento y el espacio de almacenamiento. Porque el método delete_by_query necesita realizar una operación de consulta en Elasticsearch y marcar y eliminar documentos coincidentes, y estos documentos eliminados marcados aún ocupan espacio de almacenamiento y deben limpiarse en operaciones de combinación de segmentos posteriores.

        Para la eliminación de grandes cantidades de datos, se recomienda utilizar métodos más eficientes, como eliminar todo el índice o usar el índice basado en el tiempo de Elasticsearch para eliminar periódicamente los datos antiguos. Esto evita una presión excesiva sobre las consultas y el espacio de almacenamiento mediante el método delete_by_query.

Por ejemplo, se pueden considerar los siguientes enfoques:

  • Eliminar todo el índice : si los datos que se eliminarán son grandes y tienen un rango de tiempo claro, puede eliminar directamente todo el índice. Por ejemplo, un índice por mes. Cuando los datos de un índice superen los dos meses, elimine el índice directamente.
  • Use el índice de marca de tiempo de Elasticsearch : los datos se pueden almacenar en diferentes índices de acuerdo con la información de tiempo, como las marcas de tiempo, como un índice por día u hora. Cuando los datos caducan, solo necesita eliminar el índice correspondiente, para eliminar rápidamente una gran cantidad de datos.

        Los métodos anteriores pueden evitar el impacto potencial en el rendimiento y el espacio de almacenamiento causado por el uso del método delete_by_query, y son adecuados para grandes cantidades de escenarios de eliminación de datos. Es necesario seleccionar una estrategia de eliminación adecuada en función de las necesidades comerciales específicas y la escala de datos.

Supongo que te gusta

Origin blog.csdn.net/weixin_44799217/article/details/130192119
Recomendado
Clasificación