Esta questão é sobre como fazer uma escolha arquitetônica antes de se aprofundar nos detalhes da experimentação e implementação. Trata-se da adequação, em termos de escalabilidade e desempenho, da elasticsearch vs MongoDB, para uma finalidade específica.
Hipoteticamente, ambos armazenam objetos de dados que possuem campos e valores e permitem consultar esse corpo de objetos. Portanto, presumivelmente filtrar subconjuntos de objetos de acordo com os campos selecionados ad-hoc, é algo adequado para ambos.
Meu aplicativo girará em torno da seleção de objetos de acordo com os critérios. Ele selecionaria objetos filtrando simultaneamente por mais de um único campo; em outras palavras, seus critérios de filtragem de consultas normalmente compreendiam entre 1 e 5 campos, talvez mais em alguns casos. Enquanto os campos escolhidos como filtros seriam um subconjunto de uma quantidade muito maior de campos. Imagine cerca de 20 nomes de campos existentes e cada consulta é uma tentativa de filtrar os objetos por alguns campos dentre esses 20 campos gerais (pode haver menos ou mais de 20 nomes de campos gerais existentes, apenas usei esse número para demonstrar a proporção de campos para campos usados como filtros em todas as consultas discretas). A filtragem pode ocorrer pela existência dos campos escolhidos, bem como pelos valores dos campos, por exemplo, filtrando objetos que possuem o campo A e seu campo B está entre x e y,
Meu aplicativo continuará fazendo esse tipo de filtragem, enquanto não haveria nada ou muito pouca constante em termos de quais campos são usados para a filtragem a qualquer momento. Talvez nos índices de pesquisa elástica precisem ser definidos, mas talvez mesmo sem a velocidade dos índices esteja a par com a do MongoDB.
Conforme os dados que entram na loja, não há detalhes especiais sobre isso. Os objetos quase nunca eram alterados após serem inseridos. Talvez os objetos antigos precisem ser descartados, eu gostaria de assumir que os dois armazenamentos de dados expiram, excluindo itens internamente ou por uma consulta feita pelo aplicativo. (Com menos frequência, os objetos que se encaixam em uma determinada consulta também precisariam ser descartados).
O que você acha? E você já experimentou esse aspecto?
Estou interessado no desempenho e na escalabilidade dele, de cada um dos dois armazenamentos de dados, para esse tipo de tarefa. Esse é o tipo de questão de arquitetura e detalhes de opções específicas da loja ou pedras angulares de consulta que devem torná-la bem arquitetada são bem-vindos como demonstração de uma sugestão totalmente pensada.
Obrigado!