Minha empresa está acorrentada a este formato MS Access '97 .MDB que temos desde o início dos tempos. Nosso esquema é hierárquico, com vários relacionamentos um-para-muitos. Estamos em um ponto em que estamos procurando alternativas, pois a lentidão e a falta de jeito geral do Access estão começando a afetar nossa produtividade.
Nossos métodos "modernos" de acesso ao banco de dados envolvem DAO.Net e grandes quantidades de cache baseado em hash. O tipo .NET System.Collections.Generic.Dictionary foi uma dádiva de Deus aqui, porque sem ele, não sei como faríamos nosso trabalho em tempo hábil. Temos vários projetos, cada um com um arquivo de banco de dados associado a ele (às vezes vários), e tendemos a interagir com eles de duas maneiras: o banco de dados é criado manualmente (usando nosso editor interno) ou gerado usando um programa que pega os dados que recebemos de outra empresa, em algum outro formato, e os converte para o nosso formato.
Em ambos os casos, nossa biblioteca .NET comum carrega todo o banco de dados em tabelas de hash por meio do Dicionário e resolve os relacionamentos de objeto com o código procurando valores na tabela de hash por ID. Ao gerar automaticamente o banco de dados, usamos outro conjunto de tabelas de hash para determinar se um objeto já existe no cache antes de adicioná-lo. Quando terminarmos de analisar os dados de origem, iniciaremos uma operação de inserção em massa multithread. Fazemos tudo isso porque qualquer outro método de acesso ao banco de dados é muito lento.
Espero ter dado contexto suficiente à minha pergunta: Existe um mecanismo de banco de dados por aí cuja velocidade de consulta possa rivalizar com as tabelas de hash como o que estou usando? O uso de memória e disco não é uma preocupação, esses bancos de dados existem apenas em máquinas de desenvolvedor, nós os convertemos para um formato diferente para uso com nosso software. Eu só quero me livrar das minhas tabelas de hash, mas não quero sacrificar a velocidade para fazer isso.
" Existe um mecanismo de banco de dados por aí cuja velocidade de consulta possa rivalizar com a de tabelas de hash como o que estou usando? " - Sim, quase qualquer sistema de gerenciamento de banco de dados relacional moderno (RDBMS), porque eles foram cuidadosamente construídos para utilizar os dados apropriados estruturas e algoritmos de mesclagem de dados, considerando o contexto e as estatísticas dos dados. Sempre usar tabelas de hash, dicionários e várias pesquisas de ID singleton nem sempre é a maneira mais eficiente de armazenar, ler e combinar dados.
Minha opinião pessoal é que o MS Access é péssimo como sistema de banco de dados, ainda mais que você está usando a versão '97. Portanto, quase qualquer RDBMS moderno deve ser uma atualização. Você provavelmente só precisará mudar os paradigmas para armazenar os bancos de dados em um servidor dedicado em vez de localmente nas máquinas clientes, pois essa é a prática padrão para RDBMS modernos.
Há uma infinidade de opções para escolher por aí, mas eu recomendo escolher uma opção convencional para que haja bastante suporte e documentação sobre como utilizá-la. Como você já está usando a pilha deles, a Microsoft oferece o SQL Server como solução, que é altamente funcional e bem projetada, mas é um software corporativo, portanto, pode custar dinheiro para usar. A Express Edition do SQL Server é gratuita com algumas limitações, sendo a mais aparente uma limitação de 10 GB de tamanho por banco de dados. Outras opções baratas e gratuitas também incluem PostgreSQL e MySQL.
Outro benefício notável ao mudar para um RDBMS moderno provavelmente incluirá simultaneidade aprimorada.