Si tengo una base de datos con millones de entradas y quiero encontrar elementos similares por título, ¿cuál debo elegir: MongoDB, Elasticsearch, MySQL, PostgreSQL u otro?

Al elegir la mejor solución de búsqueda de texto completo, hay dos consideraciones principales.

Primero, la búsqueda de texto completo de SQL es bastante simple de configurar para indexación y consultas. Pero hay inconvenientes importantes:

  • prácticamente no hay control sobre la indexación: puede hacer muy poco para especificar las claves de índice, lexers y stemmers
  • la búsqueda se ejecutará en el servidor DBMS, que a menudo es su infraestructura menos escalable

Por el contrario, Elasticsearch requiere más trabajo, ya que necesita configurar y mantener un grupo dedicado de nodos. También debe proporcionar un código que realice las operaciones de índice, lo que también puede implicar un trabajo programado que funciona desde un registro de cambios (procesamiento de datos nuevos / modificados) para construir los fragmentos para la indexación. Al igual que con SQL, también necesitará tiempo para generar la consulta.

La recompensa de tus esfuerzos con Elasticsearch será:

  • control preciso sobre el índice y la consulta
  • escalabilidad fantástica, ya que puede proporcionar un clúster para cualquier tamaño que necesite

Mira esto: StackOverflow se creó originalmente en una plataforma de búsqueda de texto completo de SQL. Se trasladaron a Elasticsearch cuando las limitaciones de características y rendimiento se volvieron demasiado restrictivas.

Blog de Qbox: Ven a visitar nuestro blog. Regístrese para recibir alertas para las próximas publicaciones de blog, simplemente ingresando su dirección de correo electrónico en la barra lateral derecha y haciendo clic en Suscribirse .

Preguntas? Simplemente envíenos una nota y le enviaremos una respuesta inmediata.

Créditos de uso de clúster gratuitos: ¿ aún no disfruta de los beneficios de una búsqueda empresarial ELK-stack alojada en Qbox? Regístrese para una prueba gratuita y descubra lo fácil que es administrar y escalar su entorno Elasticsearch en nuestro servicio de alojamiento en la nube.

Estoy tomando una visión holística sobre su pregunta.

Las 4 soluciones pueden soportar filas de 1M fácilmente.

Si desea desarrollar una aplicación web, tendrá muchos roles en su plato: tracción del usuario, experiencia del usuario, casos de uso, soporte al usuario. Le sugiero que mantenga su arquitectura realmente simple y use un único almacén de datos en lugar de tener múltiples db o la llamada solución híbrida. (Supongo que está más familiarizado con las bases de datos SQL que con las bases de datos NoSQL).

Mi experiencia me enseñó que lograr que 10 usuarios usen la aplicación es más difícil que migrar bases de datos de MySQL / pgsql a MongoDB.

Tiene una sola consulta de búsqueda de texto. Quizás eventualmente, tendrás una segunda. ¿Qué te hace pensar que este es un caso de uso lo suficientemente convincente como para agregar otra base de datos? Agregar una base de datos a un sistema no es una tarea trivial para sus equipos de operaciones. Puede disfrutar de la experiencia como desarrollador, tal vez la tecnología sea “genial”, pero alguien tiene que mantener, respaldar, monitorear, ajustar y resolver problemas en su instancia de producción y aunque millones de filas no son una gran base de datos, sigue siendo importante. Quizás su equipo de operaciones ya tenga un RDBMS en ejecución, entonces, ¿por qué no reducir el costo de mantenimiento y usar el suyo, ya que no parece importarle demasiado?

Use un RDBMS. Los RDBMS más populares admiten la indexación de búsqueda de texto completo y funciones útiles para implementar eso. Una vez que comience a encontrar que su RDBMS ya no es lo suficientemente bueno para el trabajo, aún puede agregar complejidad a la arquitectura de su sistema, por ejemplo, subcontratando la búsqueda de texto a Elasticsearch. Pero si está hablando de una sola consulta, por favor, no descarte toda la utilidad RDBMS.

(descargo de responsabilidad: no sé la configuración real de su sistema. Puede ser que en su caso particular, ir con MongoDB podría estar bien. Sin embargo, en un 80% de configuraciones similares, un RDBMS hubiera sido una mejor opción)

“Millones” no es un gran número. Una base de datos nosql o SQL moderna puede manejar “millones” fácilmente. (Tenemos bases de datos MySQL de instancia única con numerosas tablas que contienen más de 3 mil millones de registros cada una con requisitos de “tiempo de búsqueda interactiva” de unas pocas docenas de milisegundos).

Dicho esto, probablemente desee utilizar un motor de estilo de motor de búsqueda como elasticsearch o solr para esta aplicación en particular, ya que las bases de datos relacionales son buenas para búsquedas de coincidencias exactas, pero no funcionan bien con coincidencias inexactas que no se pueden indexar fácilmente.

La clave para que este tipo de cosas tenga un rendimiento y escalabilidad decentes son las estructuras de búsqueda preconstruidas que se pueden buscar, en lugar de intentar calcular en vivo la “distancia de búsqueda” o lo que sea en el momento del acceso del usuario; este último puede funcionar para demos, pero no escalará en absoluto.

Tenga en cuenta que, como muchos otros, puede terminar con un entorno híbrido, ya que hay muchas otras cosas que los motores SQL hacen mejor que los NoSQL.

Para un problema de búsqueda, use un motor de búsqueda. Elasticsearch o Solr lo harían.

Sin embargo, tiene un pequeño conjunto de datos, por lo que MongoDB, MySQL o PostgreSQL también lo gestionarían; la principal diferencia es la sofisticación de los términos de búsqueda.

Veo MongoDb allí! ¿Qué tipo de datos almacenarás?
¿Hay alguna búsqueda de texto completo o alguna GUSTA allí?
En cuanto a la elección del motor de base de datos, ¡millones de filas no son muchas! , pero como dije, ¡necesitamos saber qué tipo de datos almacena!

Millones no es un gran número en el mundo de la base de datos. Cualquiera de las bases de datos haría búsquedas de millones fácilmente (con el índice adecuado en su lugar)

Si tiene que comparar mucho texto, creo que debería ir con Elasticsearch. Otros DB que mencionó no son buenos cuando se va a realizar una comparación de texto. También puede buscar en Apache Lucene / Solr.

More Interesting

Cómo elegir las mejores tecnologías para mi aplicación web

¿Qué servicio web utilizas cuando contratas al programador?

¿Por qué los sitios populares no usan servidores web (como GoDaddy)? ¿Debo usar un servidor web que me proporcione un creador web para una startup?

¿Usaría Slim Framework para una aplicación PHP comercial, en lugar de una opción más tradicional como Laravel o Symfony?

¿Es una violación de derechos de autor si un sitio web de recursos de alto contenido de terceros se carga en un en mi sitio web?

¿Cuál es el mejor sitio y / o aplicación para iPhone para rastrear la colección de juegos / piezas LEGO de mi hijo?

¿Cómo analizamos informes resumidos en JMeter para probar la carga de una aplicación web?

Quiero implementar mi aplicación web Java en algún servidor en línea con compatibilidad DB y Java 8. ¿Hay algún servidor gratuito disponible como este?

¿Cuáles son las diferencias entre 'Aplicaciones' y 'Ámbitos'?

¿Cuáles son los desafíos con las pruebas de navegador cruzado?

¿Por qué debería elegir Yii 2?

Suponiendo que la industria tecnológica está en una burbuja, ¿afectará el pop a las proyecciones de estadísticas laborales del crecimiento del empleo en el desarrollo web?

¿Qué lenguajes de programación son mejores para un sitio web que puede escalar de 10k a 100k usuarios?

¿Cuál es el mejor agregador que proporciona noticias basadas en temas seleccionados por el usuario? (Preferiblemente no use Google)

¿Cuál es la forma más fácil de crear una aplicación web CRUD simple?