Esta pregunta se trata de hacer una elección arquitectónica antes de profundizar en los detalles de experimentación e implementación. Se trata de la idoneidad, en términos de escalabilidad y rendimiento, de elasticsearch vs MongoDB, para un propósito algo específico.
Hipotéticamente, ambos almacenan objetos de datos que tienen campos y valores, y permiten consultar ese cuerpo de objetos. Por lo tanto, presumiblemente filtrar subconjuntos de objetos según los campos seleccionados ad-hoc, es algo adecuado para ambos.
Mi aplicación girará en torno a la selección de objetos según los criterios. Seleccionaría objetos mediante el filtrado simultáneo de más de un campo, dicho de otro modo, sus criterios de filtrado de consultas generalmente comprenderían entre 1 y 5 campos, tal vez más en algunos casos. Mientras que los campos elegidos como filtros serían un subconjunto de una cantidad mucho mayor de campos. Imagine unos 20 nombres de campo existentes, y cada consulta es un intento de filtrar los objetos por unos pocos campos de esos 20 campos generales (puede haber menos o más de 20 nombres de campo generales existentes, solo utilicé este número para demostrar la proporción de campos a campos utilizados como filtros en cada consulta discreta). El filtrado puede ser por la existencia de los campos elegidos, así como por los valores de los campos, por ejemplo, filtrando objetos que tienen el campo A, y su campo B está entre x e y,
Mi aplicación realizará continuamente este tipo de filtrado, mientras que no habría nada o muy poca constante en términos de qué campos se utilizan para el filtrado en cualquier momento. Quizás en Elasticsearch se necesiten definir índices, pero quizás incluso sin índices la velocidad esté a la par con la de MongoDB.
Según los datos que ingresan a la tienda, no hay detalles especiales sobre eso ... los objetos casi nunca cambiarían después de haber sido insertados. Tal vez los objetos antiguos tendrían que descartarse, me gustaría asumir que el soporte de ambos almacenes de datos caduca eliminando cosas internamente o mediante una consulta realizada por la aplicación. (Con menos frecuencia, los objetos que se ajustan a una determinada consulta también deberían eliminarse).
¿Qué piensas? Y, ¿has experimentado este aspecto?
Estoy interesado en el rendimiento y la escalabilidad del mismo, de cada uno de los dos almacenes de datos, para este tipo de tarea. Este es el tipo de pregunta de diseño arquitectónico, y los detalles de las opciones específicas de la tienda o las piedras angulares de consulta que deberían hacerlo bien estructurado son bienvenidos como una demostración de una sugerencia completamente pensada.
¡Gracias!