1
A primeira verificação é realizada no backend da aplicação, que compara o dado inserido pelo usuário com uma lista de quase 300 itens armazenada no servidor, cada item contém uma média de 42 caracteres por item. Penso em utilizar algum tipo de índice para essa tabela.
Compara para fazer o que com o resultado da comparação?
2
A segunda verificação também é realizada no servidor da aplicação, também é necessário um índice para ela, pois irá comparar o dado inserido pelo usuário com uma blacklist com 600 a 800 itens.
Então a primeira e segunda etapa de verificação usarão o mesmo banco de dados. Como preciso da melhor performance nessa parte, penso em usar o MongoDB e deixar em cache de servidor os dados da lista. O que acham?
Pq você acha que MongoDB seria uma boa alternativa para isso?
Não tenho experiência com NoSQL, porém pelo que já estudei a respeito, se seus dados tem uma estrutura bem definida e você precisa de consistência e integridade os bancos relacionais atendem muito bem.
3
A terceira verificação é realizada com uma api própria, hospedada em outro servidor e se utilizando de outro banco de dados, está ao receber os dados, irá comparar o dado enviado pelo usuário com uma lista de 2000 a 10.000 itens (os 2000 eu tenho certeza que vai ter, enquanto o 10.000 é uma estimativa para caso eu deseje ampliar o projeto).
Mesma pergunta sobre o item 1, que comparação é essa? Vai fazer o que com o resultado?
Minha idéia para garantir melhor performance:
O dado do usuário irá percorrer toda a lista até achar seu idêntico na tabela, retornando um valor para a aplicação. Para que não percorra milhares de itens toda vez, planejo dividir em várias pequenas tabelas que se iniciam com a letra do alfabeto, e sequência de dois caracteres, (A, B, C… AA, AB, AC...).
Penso em utilizar o MySQL para esse banco de dados, mas tenho ficado em dúvida sobre este ser o melhor, pois encontrei discussões falando que só se pode ter um índice dentro dele, e eu precisaria de vários, um para a sequência do alfabeto, e um para cada letra do alfabeto + uma segunda letra.
Isso aqui pra mim é bem estranho, criar uma tabela por letra de alfabeto por conta de uma pequena quantidade de registros.
Trabalho com tabelas de milhões de registros, com uma boa estrutura de índices, queries bem trabalhadas, cache e etc. Não há problemas de performance.
10k de registros por tabela é quase nada para um SGBD tradicional.