Colección de citas famosas - Consulta de diccionarios - Preguntas de la entrevista de Elasticsearch "Debes memorizar para las entrevistas" (colección recomendada)

Preguntas de la entrevista de Elasticsearch "Debes memorizar para las entrevistas" (colección recomendada)

(1) Según las necesidades comerciales incrementales, cree un índice basado en una plantilla de fecha y transfiera el índice a través de la API de renovación.

(2) Utilice alias para la gestión del índice;

(3) Realice una operación force_merge en el índice regularmente todas las mañanas para liberar espacio

(4) Adopte un mecanismo de separación en caliente y en frío para almacenar datos calientes en SSD; para mejorar la eficiencia de recuperación; los datos fríos se reducen periódicamente Operación para reducir el almacenamiento

(5) Adoptar un curador para la gestión del ciclo de vida del índice

(6) Establecer segmentadores de palabras razonables solo para los campos; que requieren segmentación de palabras;

p>

(7) La etapa de Mapeo combina completamente los atributos de cada campo, ya sea que sea necesario recuperarlo, si es necesario almacenarlo, etc.

(1) Establezca el número de copias en 0 antes de escribir

(2) Desactive el intervalo de actualización antes de escribir y configúrelo en -1 para deshabilitar el mecanismo de actualización

(3) Durante el proceso de escritura: use escritura masiva;

(4) Restaure el número de copias y los intervalos de actualización después de escribir

(5) Intente usar; ID generados automáticamente.

(1) Deshabilitar comodines

(2) Deshabilitar términos por lotes (cientos o miles de escenarios

(3) Aprovechar al máximo lo invertido); Mecanismo de índice, el tipo de palabra clave puede tener tantas palabras clave como sea posible

(4) Cuando la cantidad de datos es grande, el índice se puede finalizar en función del tiempo antes de la recuperación; 5) Establecer un mecanismo de enrutamiento razonable.

La estructura de datos que Lucene ha utilizado ampliamente desde la versión 4+ es FST. FST tiene dos ventajas:

(1) Ocupa poco espacio. Al reutilizar prefijos y sufijos de palabras en el diccionario, el espacio de almacenamiento se comprime;

(2) La velocidad de consulta es rápida. Complejidad del tiempo de consulta de O (len (str)).

Entrevistador: Quiero conocer las capacidades de operación y mantenimiento de grandes volúmenes de datos.

Respuesta: La planificación de los datos indexados debe planificarse en la etapa inicial. Como dice el refrán, "diseñar primero, codificar después", esto puede evitar eficazmente los problemas en línea causados ​​por una capacidad de procesamiento de clúster insuficiente causada por situaciones repentinas. aumento de datos. La recuperación de clientes u otros servicios se ven afectados.

Cómo optimizar, como se mencionó en la pregunta 1, aquí hay un desglose:

Cree un índice basado en plantilla + tiempo + rollover de API, por ejemplo: Definición de fase de diseño: blog plantilla de índice El formato es: blog_index_timestamp, y los datos aumentan cada día. La ventaja de esto es que el aumento en el volumen de datos no hará que el volumen de datos de un solo índice sea muy grande, cerca de la potencia 32 de 2 -1, y el almacenamiento del índice alcanzará TB+ o incluso más.

Una vez que un único índice es grande, también surgirán varios riesgos, como el almacenamiento, así que considérelo con anticipación y evítelo lo antes posible.

Los datos fríos y calientes se almacenan por separado, los datos calientes (como los datos de los últimos 3 días o una semana) y el resto son datos fríos.

Para datos fríos donde no se escribirán datos nuevos, puede considerar operaciones regulares de compresión force_merge y reducción para ahorrar espacio de almacenamiento y eficiencia de recuperación.

Respuesta:

La búsqueda se divide en dos etapas: "consultar y luego recuperar".

El objetivo de la fase de consulta: localizar la ubicación, pero no recuperarla.

Los pasos se desglosan de la siguiente manera:

(1) Supongamos que los datos de un índice tienen 5 fragmentos primarios + 1 réplica *** 10, y se realizará una solicitud (en el fragmentos primarios o de réplica) uno.

(2) Cada fragmento se consulta localmente y los resultados se devuelven a la cola de prioridad ordenada local.

(3) El resultado del paso 2) se envía al nodo de coordinación, y el nodo de coordinación genera una lista ordenada global.

El propósito de la fase de recuperación: obtener datos.

El nodo de enrutamiento obtiene todos los documentos y los devuelve al cliente.

Entrevistador: Quiero conocer las capacidades de operación y mantenimiento del clúster ES.

Respuesta:

(1) Desactive el intercambio de caché;

(2) Configure la memoria del montón en: Mín. (memoria de nodo/2, 32 GB );

p>

(3) Establecer el número máximo de identificadores de archivos

(4) Ajustar el grupo de subprocesos + el tamaño de la cola según las necesidades comerciales; > (5) Método de incursión de almacenamiento en disco: el almacenamiento utiliza RAID10 de forma condicional para aumentar el rendimiento de un solo nodo y evitar fallas de almacenamiento de un solo nodo.

Entrevistador: Quiero saber la amplitud y profundidad de sus conocimientos.

Respuesta:

Lucene tiene dos procesos: indexación y búsqueda, incluidos tres puntos clave: creación de índice, indexación y búsqueda. Podemos ampliar este contexto.

(1) El módulo ZenDiscovery es responsable de la selección de Elasticsearch, que incluye principalmente Ping (los nodos se descubren entre sí a través de este RPC) y Unicast (el módulo unicast contiene una lista de hosts para controlar qué nodos necesitan ser ping) (pasar) estas dos partes

(2) Ordene todos los nodos que pueden convertirse en maestros (node.master: true) de acuerdo con el diccionario nodeId, y cada nodo ordena los nodos que conoce en cada uno. elección y luego seleccione el primer (0º) nodo, que se considera temporalmente como el nodo maestro.

(3) Si el número de votos para un nodo alcanza un cierto valor (el número de nodos que pueden convertirse en maestros es n/2+1) y el propio nodo se elige a sí mismo, entonces este nodo es el maestro. En caso contrario, se procederá a la reelección hasta que se cumplan las condiciones anteriores.

(4) Suplemento: las responsabilidades del nodo maestro incluyen principalmente la gestión de clústeres, nodos e índices, y no son responsables de la gestión a nivel de documentos, el nodo de datos puede desactivar la función http *.

¿Qué debo hacer si elijo un máster y los otros 10 eligen otro máster?

(1) Cuando el número de candidatos a maestro del clúster no es inferior a 3, el problema del cerebro dividido se puede resolver estableciendo el número mínimo de votos (discovery.zen.minimum_master_nodes) para que supere más de la mitad. de todos los nodos candidatos;

(3) Cuando el número de candidatos es dos, solo se puede modificar al único candidato maestro y los demás se utilizan como nodos de datos para evitar el problema del cerebro dividido.

TransportClient utiliza el módulo de transporte para conectarse de forma remota a un clúster de elasticsearch. No se une al clúster, sino que simplemente obtiene una o más direcciones de transporte inicializadas y se comunica con estas direcciones mediante sondeo.

El nodo coordinador utiliza el ID del documento para participar en el cálculo de forma predeterminada (también se admite el enrutamiento) con el fin de proporcionar fragmentos apropiados para el enrutamiento.

(1) Cuando el nodo donde se encuentra el se encuentra el fragmento y recibe un mensaje del nodo coordinador. Después de realizar la solicitud, la solicitud se escribirá en MemoryBuffffer y luego se escribirá en Filesystem Cache con regularidad (el valor predeterminado es cada 1 segundo). Este proceso de MomeryBuffffer a Filesystem Cache se llama actualización;

(2) Por supuesto, en algunos casos, los datos en Momery Buffffer y Filesystem Cache pueden perderse. ES utiliza el mecanismo de translog para garantizar la confiabilidad de los datos.

El mecanismo de implementación es que después de recibir la solicitud, también se escribirá en el translog. Cuando los datos en el caché del sistema de archivos se escriban en el disco, este proceso se llama flflush;

(3) Durante el proceso de descarga, el búfer en la memoria se borrará, el contenido se escribirá en un nuevo segmento, la sincronización del segmento creará un nuevo punto de confirmación y descargará el contenido en el disco, se eliminará el antiguo translog y Se iniciará uno nuevo.

(4) El tiempo de activación del flujo está programado (el valor predeterminado es 30 minutos) o cuando el translog se vuelve demasiado grande (el valor predeterminado es 512M Suplemento: Respecto al segmento de Lucene:

( 1) El índice de Lucene se compone de múltiples segmentos y el segmento en sí es un índice invertido completamente funcional.

(2) Los segmentos son inmutables, lo que permite a Lucene agregar incrementalmente nuevos documentos al índice sin reconstruir el índice desde cero.

(3) Para cada solicitud de búsqueda, se buscarán todos los segmentos del índice y cada segmento consumirá ciclos de reloj de CPU, identificadores de archivos y memoria. Esto significa que cuanto mayor sea el número de segmentos, menor será el rendimiento de la búsqueda.

(4) Para resolver este problema, Elasticsearch fusionará segmentos pequeños en un segmento más grande, enviará el nuevo segmento combinado al disco y eliminará esos segmentos pequeños antiguos.

(1) Consulta: Elasticsearch le permite realizar y combinar múltiples tipos de búsquedas (estructuradas, no estructuradas, ubicación geográfica, métricas) y el método de búsqueda cambia según lo desee.

(2) Análisis: Una cosa es encontrar los diez documentos que mejor se ajustan a la consulta. Pero si te enfrentas a mil millones de líneas de registros, ¿cómo deberías interpretarlo? Las agregaciones de Elasticsearch le permiten ver el panorama general y explorar tendencias y patrones en sus datos.

(3) Velocidad: Elasticsearch es muy rápido. Realmente, muy rápido.

(4) Escalabilidad: Puede ejecutarse en un portátil. También puede ejecutarse en cientos o miles de servidores que alojan petabytes de datos.

(5) Elasticidad: Elasticsearch se ejecuta en un entorno distribuido, y esto se ha tenido en cuenta desde el principio del diseño.

(6) Flexibilidad: Con múltiples escenarios de casos. Números, texto, geolocalización, estructurados, no estructurados. Todos los tipos de datos son bienvenidos.

(7) HADOOP & SPARK: Elasticsearch + Hadoop

Estos son algunos casos de uso para usar Elasticsearch:

(1) Tienes una tienda en línea, Permita que sus clientes busquen los productos que usted vende. En este caso, puede utilizar Elasticsearch para almacenar todo su catálogo e inventario de productos y proporcionar sugerencias de búsqueda y autocompletar para ellos.

(2) Quiere recopilar datos de registros o transacciones y desea analizar y extraer estos datos para encontrar tendencias, estadísticas, resúmenes o anomalías. En este caso, puede utilizar loghide (parte de la pila Elasticsearch/loghide/Kibana) para recopilar, agregar y analizar los datos y luego dejar que loghide introduzca estos datos en Elasticsearch. Una vez que los datos están en Elasticsearch, puede ejecutar búsquedas y agregaciones para extraer cualquier información que le interese.

(3) Administra una plataforma de alerta de precios que permite a los clientes conocedores de precios especificar reglas como: "Estoy interesado en comprar un dispositivo electrónico específico si el producto de algún proveedor tiene un precio inferior a X dólares el próximo mes. quisiera ser notificado". En este caso, puede extraer los precios del proveedor, enviarlos a Elasticsearch y utilizar su función de búsqueda inversa (Percolator) para hacer coincidir los movimientos de precios con las consultas de los clientes y, finalmente, enviar una alerta una vez que se encuentre una coincidencia.

(4) Tiene necesidades analíticas/de inteligencia empresarial y desea investigar, analizar, visualizar y hacer preguntas ad hoc rápidamente sobre grandes cantidades de datos (piense en millones o miles de millones de registros). En este caso, usa Elasticsearch para almacenar los datos y luego usa Kibana (parte de la pila Elasticsearch/loghide/Kibana) para crear paneles personalizados para visualizar aspectos de los datos que son importantes para usted. Además, puede utilizar las capacidades de agregación de Elasticsearch para realizar consultas complejas de inteligencia empresarial sobre sus datos.

(1) La eliminación y la actualización también son operaciones de escritura, pero los documentos en Elasticsearch son inmutables, por lo que no se pueden eliminar ni modificar para mostrar sus cambios.

(2) Cada segmento en; El disco tiene un archivo .del correspondiente. Cuando se envía una solicitud de eliminación, el documento en realidad no se elimina, sino que se marca para su eliminación en el archivo .del. El documento seguirá coincidiendo con la consulta, pero se filtrará de los resultados. Cuando se combinan segmentos, los documentos marcados para su eliminación en el archivo .del no se escribirán en el nuevo segmento.

(3) Cuando se crea un nuevo documento, Elasticsearch asignará un número de versión al documento. Cuando se realiza una actualización, la versión anterior del documento se marca para su eliminación en el archivo .del. la nueva versión del documento se marca como eliminada. El documento se indexa en un nuevo segmento. Las versiones anteriores de los documentos aún pueden coincidir con la consulta, pero se filtrarán en los resultados

(1) El proceso de indexación de Lucene es el proceso de escribir la tabla invertida en este formato de archivo de acuerdo con el proceso básico de completa -Recuperación de texto.

(2) El proceso de búsqueda de Lucene es el proceso de leer la información indexada de acuerdo con este formato de archivo y luego calcular la puntuación de cada documento.

(1) Una máquina con 64 GB de memoria es ideal, pero también son comunes las máquinas de 32 GB y 16 GB. Menos de 8 GB es contraproducente.

(2) Si tienes que elegir entre CPU más rápidas y más núcleos, elegir más núcleos es mejor. La simultaneidad adicional proporcionada por múltiples núcleos supera con creces una velocidad de reloj ligeramente más rápida.

(3) Si puedes permitirte un SSD, superará con creces a cualquier medio giratorio. Los nodos basados ​​en SSD han mejorado el rendimiento de consultas e índices. Si puedes permitírtelo, SSD es una buena opción.

(4) Incluso si los centros de datos están cerca, evite los clústeres que abarquen varios centros de datos. Definitivamente evite los grupos que abarquen grandes distancias geográficas.

(5) Asegúrese de que la JVM que ejecuta su aplicación y la JVM del servidor sean exactamente iguales. En varios lugares de Elasticsearch, se utiliza la serialización nativa de Java.

(6) Al configurar gateway.recover_after_nodes, gateway.expected_nodes, gateway.recover_after_time, puede evitar intercambios excesivos de fragmentos cuando se reinicia el clúster, lo que puede dificultar la recuperación de datos de varios

Las horas se reducen a segundos.

(7) Elasticsearch está configurado para utilizar el descubrimiento de unidifusión de forma predeterminada para evitar que los nodos se unan accidentalmente al clúster. Solo los nodos que se ejecutan en la misma máquina formarán automáticamente un clúster. Es mejor utilizar unidifusión en lugar de multidifusión.

(8) No modifique el tamaño del recolector de basura (CMS) y de cada grupo de subprocesos a voluntad.

(9) Dale a Lucene (menos de) la mitad de tu memoria (¡pero no más de 32 GB!) a través de la variable de entorno ES_HEAP_SIZE.

(10) Intercambiar memoria al disco es fatal para el rendimiento del servidor. Si la memoria se cambia al disco, una operación de 100 microsegundos podría convertirse en 10 milisegundos. Y piense en la suma de esos 10 microsegundos de latencia operativa. No es difícil ver cómo el intercambio es terrible para el rendimiento.

(11) Lucene utiliza una gran cantidad de archivos.

Al mismo tiempo, Elasticsearch también utiliza una gran cantidad de sockets para comunicarse entre nodos y clientes HTTP. Todo esto requiere suficientes descriptores de archivos. Debe aumentar el descriptor de su archivo a un valor grande, como 64.000.

(1) El índice del diccionario invertido debe residir en la memoria y no puede ser GCed. Es necesario monitorear la tendencia de crecimiento de la memoria de segmento en el nodo de datos.

(2) Varios cachés, como el caché fifield, el caché fifilter, el caché de indexación, la cola masiva, etc., deben configurarse en un tamaño razonable, y si el montón es suficiente debe juzgarse en función del En el peor de los casos, incluso cuando todos los tipos de cachés están llenos, ¿todavía hay espacio de almacenamiento dinámico que se puede asignar a otras tareas? Evite el uso de métodos "autoengañosos", como borrar el caché para liberar memoria.

(3) Evite búsquedas y agregaciones que devuelvan grandes conjuntos de resultados. Los escenarios que realmente necesitan extraer una gran cantidad de datos se pueden implementar utilizando la API de escaneo y desplazamiento.

(4) Las estadísticas del clúster residen en la memoria y no se pueden expandir horizontalmente. Para clústeres de muy gran escala, puede considerar dividirlos en múltiples clústeres y conectarlos a través de nodos de tribu.

(5) Si desea saber si el montón es suficiente, debe combinar los escenarios de aplicación reales y monitorear continuamente el uso del montón del clúster.

(6) Comprenda los requisitos de memoria según los datos de monitoreo, configure correctamente varios disyuntores y reduzca al mínimo el riesgo de desbordamiento de la memoria.

La primera agregación aproximada proporcionada por Elasticsearch es la métrica de cardinalidad. Proporciona la cardinalidad de un campo, que es el número de valores distintos o únicos para el campo. Se basa en el algoritmo HLL. HLL primero realizará una operación hash en nuestra entrada y luego estimará la probabilidad en función de los bits en el resultado de la operación hash para obtener la cardinalidad. Sus características son: precisión configurable, utilizada para controlar el uso de la memoria (más precisión, más memoria); la precisión de pequeños conjuntos de datos es muy alta; podemos establecer el uso de memoria fijo requerido para la deduplicación configurando parámetros. Ya sea que haya miles o miles de millones de valores únicos, el uso de la memoria solo es relevante para la precisión de su configuración.

(1) Se puede utilizar un control de concurrencia optimista a través del número de versión para garantizar que la versión anterior no sobrescriba la nueva versión y que la capa de aplicación maneje conflictos específicos

(2) Además, para las operaciones de escritura, el nivel de coherencia admite quórum/uno/todos, y el valor predeterminado es quórum, lo que significa que las operaciones de escritura solo se permiten cuando la mayoría de los fragmentos están disponibles. Pero incluso si la mayoría están disponibles, es posible que no se pueda escribir en la copia debido a la red y otras razones, por lo que la copia se considera fallida y el fragmento se reconstruirá en un nodo diferente.

(3) Para las operaciones de lectura, puede configurar la replicación en sincronización (predeterminado), lo que permitirá que la operación regrese después de que se completen tanto el fragmento principal como el fragmento de réplica si configura la replicación en asíncrona; También puede consultar el fragmento principal configurando el parámetro de solicitud de búsqueda _preference en primario para asegurarse de que el documento sea la última versión.

Marvel facilita el seguimiento de Elasticsearch a través de Kibana. Puede ver el estado y el rendimiento de su clúster en tiempo real, así como analizar métricas anteriores de clústeres, índices y nodos.

23. Presenta la arquitectura técnica general de tu búsqueda de comercio electrónico.

Implementación de búsqueda personalizada basada en word2vec y Elasticsearch

(1) Basado en word2vec, Elasticsearch y complementos de script personalizados, hemos implementado un servicio de búsqueda personalizado en comparación con el original. En algunas implementaciones, la tasa de clics y la tasa de conversión de la nueva versión se han mejorado enormemente;

(2) El vector de producto basado en word2vec también es útil, es decir, se puede utilizar para recomendar productos similares. productos;

(3) El uso de word2vec para implementar búsquedas personalizadas o recomendaciones personalizadas tiene ciertas limitaciones, porque solo puede procesar datos de series de tiempo, como el historial de clics del usuario, y no puede considerar de manera integral las preferencias del usuario. mucho margen de mejora y mejora;

La estructura de datos del diccionario comúnmente utilizada es la siguiente:

La idea central de Trie es intercambiar espacio por tiempo, utilizando el público atributos del prefijo strings*** para reducir la sobrecarga del tiempo de consulta y mejorar la eficiencia.

Tiene 3 propiedades básicas:

1) El nodo raíz no contiene caracteres y cada nodo, excepto el nodo raíz, contiene solo un carácter.

2) Desde el nodo raíz hasta un determinado nodo, los caracteres que pasan en la ruta se conectan para convertirse en la cadena correspondiente al nodo.

3) Todos los nodos secundarios de cada nodo contienen caracteres diferentes.

O utilice una matriz para simular la dinámica. El costo del espacio no excederá el número de palabras ni la longitud de las mismas.

(2) Implementación: abra una matriz del tamaño de un conjunto de letras para cada nodo, cuelgue una lista vinculada en cada nodo y use la notación de hijo izquierdo y hermano derecho para registrar esto.

Registre este árbol;

(3) Para los árboles de diccionario chino, los nodos secundarios de cada nodo se almacenan en una tabla hash, por lo que no es necesario desperdiciar demasiado espacio y la consulta. es

La velocidad de consulta puede conservar la complejidad del hash O(1)

(1) La corrección ortográfica se basa en la distancia de edición, que es un método estándar que se utiliza para representar; la inserción, el número mínimo de pasos para las operaciones de eliminación y reemplazo para convertir de una cadena a otra;

(2) Proceso de cálculo de la distancia de edición: por ejemplo, para calcular la distancia de edición de batyu y belleza, Primero cree una tabla de 7 8 (la longitud del batyu es 5, la longitud del café es 6, agregue 2 a cada uno), luego complete los números negros en las siguientes posiciones. El proceso de cálculo para otras celdas es tomar el mínimo de los siguientes

tres valores:

Si el carácter superior es igual al carácter más izquierdo, es el número superior izquierdo. De lo contrario, el número en la esquina superior izquierda es +1. (0 para 3,3)

Número a la izquierda +1 (2 para 3,3)

Número arriba +1 (para 3,3 En otras palabras, es 2 )

Finalmente, el valor en la esquina inferior derecha es el valor de distancia de edición 3.