Estou tentando resolver um problema de desempenho e preciso de conselhos.
Eu tenho uma tabela, que cerca de duas vezes por dia tem um grande aumento de inserções chegando, e exatamente ao mesmo tempo todo mundo está tentando ler nela. Então eu tenho bloqueios e tudo se torna dolorosamente lento.
Meus requisitos de desempenho são os seguintes:
- muitos escritores, de diferentes fontes, e eu prefiro que cada escrita seja atômica.
- não me importo com a ordem das gravações, o número 7 pode vir antes do número 3.
- as gravações devem terminar o mais rápido possível, quero que os escritores esperem o mínimo de tempo possível.
- os dados nunca são atualizados , apenas inseridos.
- Eu tenho muitos muitos leitores.
- os leitores querem ver o instantâneo mais atualizado possível no momento da leitura.
- Posso viver com os leitores vendo dados atrasados (10 a 20 segundos)
- Eu preciso ocasionalmente fazer consultas complexas e grandes sobre esses dados, então preciso de vários índices nele.
Como você abordaria isso e como implementaria isso com o SQL Server?
Estou pensando em dividir em 2 tabelas... uma para as inserções, e outra para leitura, e um trabalhador movimentando os dados.
as consultas grandes rodarão somente na segunda, os leitores que precisam de dados atualizados, podem rodar na segunda, e completam o que precisam da primeira.