02_conceptos básicos de elasticsearch

1. La vida pasada y presente de Lucene y elasticsearch

1. La vida pasada y presente de Lucene y elasticsearch

Lucene: la biblioteca de búsqueda más avanzada y potente. Sin embargo, el desarrollo directo basado en Lucene es muy complejo: la API es compleja (implementa algunas funciones simples y escribe mucho código Java) y requiere una comprensión profunda de los principios (varias estructuras de índice).

Elasticsearch: basado en Lucene, oculta la complejidad de Lucene y proporciona interfaces API RESTful e interfaces API de Java simples y fáciles de usar (también hay interfaces API en otros idiomas)

(1) Motor de almacenamiento de documentos distribuidos

(2) Motores de búsqueda distribuidos y motores de análisis.

(3) Datos distribuidos y de apoyo a nivel de PB

Listo para usar desde el primer momento, excelentes parámetros predeterminados, no se requieren configuraciones adicionales, código completamente abierto

Hay una leyenda sobre elasticsearch, hay un programador que perdió su trabajo y acompañó a su esposa a Londres, Inglaterra, para estudiar cursos de chef. Cuando el programador estaba desempleado, quería escribir un motor de búsqueda de recetas para su esposa, pero sintió que Lucene era demasiado complicado, por lo que desarrolló un proyecto de código abierto que encapsulaba Lucene, Compass. Más tarde, el programador encontró trabajo en proyectos distribuidos de alto rendimiento y sintió que Compass no era suficiente, por lo que escribió elasticsearch para convertir a Lucene en un sistema distribuido.

2. Conceptos centrales de elasticsearch

(1) Casi en tiempo real (NRT)

Casi en tiempo real. Hay dos significados. Hay un pequeño retraso (aproximadamente 1 segundo) desde que se escriben los datos hasta que se pueden buscar; la búsqueda y el análisis basados ​​en es pueden alcanzar el segundo nivel. En términos convencionales, tiempo real se refiere a escribir datos de consulta a nivel de milisegundos.

(2) Clúster

grupo. Contiene múltiples nodos. El clúster al que pertenece cada nodo está determinado por una configuración (nombre del clúster, el valor predeterminado es elasticsearch). Para aplicaciones pequeñas y medianas, es normal que un clúster tenga solo un nodo al principio.

(3)Nodo

nodo. Un nodo en el clúster también tiene un nombre (asignado aleatoriamente de forma predeterminada). El nombre del nodo es muy importante (al realizar operaciones de gestión de operación y mantenimiento). El nodo predeterminado se unirá a un clúster llamado "elasticsearch". Si se inicia directamente A grupo de nodos, automáticamente formarán un grupo de elasticsearch. Por supuesto, un nodo también puede formar un grupo de elasticsearch.

(4)Documento y campo:

documento. La unidad de datos más pequeña en ES, un documento, puede ser un dato del cliente, un dato de clasificación del producto y un dato del pedido. Generalmente se representa mediante una estructura de datos JSON. Se pueden almacenar varios documentos en el tipo debajo de cada índice. . Hay varios campos en un documento y cada campo es un campo de datos. Ejemplos a continuación:

product document
{
    
    
  "product_id": "1",
  "product_name": "高露洁牙膏",
  "product_desc": "高效美白",
  "category_id": "2",
  "category_name": "日化用品"
}

(5) Índice:

índice. Contiene un montón de datos de documentos con una estructura similar. Por ejemplo, puede haber un índice de clientes, un índice de categorías de productos, un índice de pedidos y el índice tiene un nombre. Un índice contiene muchos documentos y un índice representa un tipo de documentos similares o idénticos. Por ejemplo, si crea un índice de productos, puede almacenar todos los datos y documentos del producto.

ps: índice -》
documento de tabla-》》un registro

(6) Tipo:

tipo. Cada índice puede tener uno o más tipos. El tipo es una clasificación lógica de datos en el índice. Los documentos bajo un tipo tienen los mismos campos. Por ejemplo, el índice de productos almacena todos los datos y documentos del producto. Sin embargo, hay muchos tipos de productos y los campos de cada tipo de documento pueden ser diferentes. Por ejemplo, los productos eléctricos también pueden incluir algunos campos especiales como el rango de tiempo de posventa; los productos frescos también pueden incluir algunos como los alimentos frescos. vida útil Para campos especiales, se necesitan varios tipos: tipo de producto químico diario, tipo de producto de electrodomésticos y tipo de producto fresco.

PD: Gao Ben ha eliminado el concepto de tipo

日化商品type:product_id,product_name,product_desc,category_id,category_name
电器商品type:product_id,product_name,product_desc,category_id,category_name,service_period
生鲜商品type:product_id,product_name,product_desc,category_id,category_name,eat_period

Cada tipo contiene un montón de documentos.

{
    
    
  "product_id": "2",
  "product_name": "长虹电视机",
  "product_desc": "4k高清",
  "category_id": "3",
  "category_name": "电器",
  "service_period": "1年"
}
{
    
    
  "product_id": "3",
  "product_name": "基围虾",
  "product_desc": "纯天然,冰岛产",
  "category_id": "4",
  "category_name": "生鲜",
  "eat_period": "7天"
}

Cabe señalar que en la versión Elasticsearch, varios tipos anteriores a 5.x aún pueden funcionar normalmente, pero el índice recién creado en 6.x solo permite un tipo y, a partir de 7.0, se verá obligado a tener solo un tipo.

Desventajas del índice único y la estructura de tipos múltiples

La gente suele decir que el índice es similar a la "base de datos" de una base de datos SQL tradicional y que el tipo es similar a "tabla". Ahora que lo pienso, ésta es una metáfora muy mala y que crea muchas suposiciones erróneas.

En una base de datos SQL tradicional, cada "tabla" es independiente entre sí y las columnas de una tabla no tienen nada que ver con las columnas del mismo nombre en otra tabla.

①. Bajo el mismo índice en nuestra búsqueda elástica, los tipos de campo con el mismo nombre deben ser los mismos, incluso si son tipos diferentes;

② Bajo el mismo índice, el campo de tipo A ocupará los recursos de tipo B (consumiendo los recursos de cada uno), lo que formará una situación de almacenamiento escaso. Especialmente valor doc, ¿por qué dices eso? El valor del documento reservará una parte del espacio en disco por razones de rendimiento, lo que significa que es posible que TypeB no necesite el valor de documento de este campo pero TypeA sí, por lo que TypeB ocupará algunos recursos inútiles;

3. El mecanismo de puntuación de puntuación es para todo el índice y la puntuación entre diferentes tipos también provocará interferencia.

4. Los metadatos del índice en sí se mantienen en el nodo maestro, diseño de CP. Esto significa que las operaciones que involucran una gran cantidad de cambios de campos y cambios de metadatos harán que el Índice se bloquee o suspenda. Deberíamos aislar dicho índice para evitar afectar la adición, eliminación, modificación y consulta normales de otros índices. Incluso cuando se trata de escenarios en los que los campos cambian con mucha frecuencia y el esquema no se puede predefinir, ¡debes considerar cuidadosamente si usar ES!
(7)fragmento

Fragmentación. Una sola máquina no puede almacenar una gran cantidad de datos. ES puede dividir los datos de un índice en varios fragmentos y distribuirlos para su almacenamiento en varios servidores. Con los fragmentos, puede expandirse horizontalmente, almacenar más datos y distribuir operaciones como búsqueda y análisis a múltiples servidores para su ejecución, mejorando el rendimiento y el rendimiento. Cada fragmento es un índice de Lucene.

(8) réplica

Copiar. Cualquier servidor puede fallar o dejar de funcionar en cualquier momento y el fragmento puede perderse en ese momento, por lo que se pueden crear múltiples copias de réplica para cada fragmento. La réplica puede proporcionar servicios de respaldo cuando el fragmento no logra garantizar que los datos no se pierdan. Múltiples réplicas también pueden mejorar el rendimiento y el rendimiento de las operaciones de búsqueda. fragmento primario (denominado fragmento. Se establece una vez al crear el índice, no se puede modificar, el valor predeterminado es 5), fragmento de réplica (denominado repica. El número se puede modificar en cualquier momento, el valor predeterminado es 1), el valor predeterminado es 10 fragmentos por índice (5 fragmentos primarios, 5 fragmentos de réplica), la configuración de alta disponibilidad más pequeña es 2 servidores.

ps: fragmentación: la base de datos de comparación se divide en tablas. Si el almacenamiento de una tabla es demasiado grande, debe almacenarse por separado. Copiar:
la base de datos de comparación es la base de datos esclava. Si la base de datos principal no funciona, se utiliza la base de datos esclava como alternativa.

Insertar descripción de la imagen aquí
Entiendo la imagen de arriba: Tabla de instalación del índice, esta comprensión es más precisa Sentimiento personal

Supongo que te gusta

Origin blog.csdn.net/wufagang/article/details/132918791
Recomendado
Clasificación