No meu cenário, tenho um SQL Server Express que é minha fonte de dados. Periodicamente produz lotes de dados, que devem ser carregados em um repositório central (um SQL Server SE na nuvem). A fonte de dados conhece o repositório central, mas o repositório central não conhece nenhuma fonte de dados possível (pode mudar com o tempo). Não sei se o SQL Server Express suporta envio de logs, nem estou familiarizado com essa tecnologia; de qualquer forma, especificaria que, por outro motivo, não é uma solução viável.
Minha solução atual é fazer upload, da fonte de dados, através do servidor vinculado (apontar para a nuvem SQL Server SE), todos os dados quando necessário. Dá trabalho sem dúvida, mas monitorando o SQL Server SE central (na nuvem) vejo um grande volume de solicitação. A leitura da documentação me parece que o envio de dados é ineficiente e enviará uma linha por vez (isso explica o baixo desempenho que tenho e o volume de solicitações no SQL Server SE central).
Gostaria de saber se existe uma maneira de executar remotamente um pull no SQL Server central, acionado pelo remoto. Dessa forma, posso explorar o fato de que extrair dados deve ser eficiente, empurrá-los e contornar o problema de que o SQL Server central não sabe qual fonte de dados irá contatá-lo e quando.
Como sabemos que é mais eficiente ir de Central->Edge em vez de Edge->Central? Este parece ser um problema XY.
Um servidor vinculado não é eficiente, esteja indo para um lado ou para outro. Idealmente, isso seria concluído pelo aplicativo, não pelo mecanismo de banco de dados. Também não leva em consideração regras de firewall ou quaisquer outros itens que possam ser necessários.
Se você quiser ter uma lista de itens externos, como você conhece as informações do servidor central, faça com que os clientes externos coloquem suas informações no servidor central para que ele saiba com quem entrar em contato e quando. Isso também deve ser feito por meio de um aplicativo e não diretamente no mecanismo de banco de dados.
Novamente, isso não leva em consideração quaisquer outras configurações que possam ser necessárias.
Existem várias maneiras de atingir seu objetivo de transferir dados com eficiência do SQL Server Express local para um SQL Server SE central na nuvem. No entanto, entendo que você está procurando uma solução onde o servidor central possa extrair dados do servidor local sem saber de antemão. Isto pode ser um pouco desafiador devido a questões de segurança e conectividade, mas aqui está uma estratégia potencial:
Etapa 1: Configurar um serviço Web ou API Você precisaria configurar um serviço Web ou API no lado do seu servidor local. Este serviço pode ser configurado para expor os dados necessários ao servidor central. Você pode usar tecnologias como ASP.NET Core ou Flask (para Python) para criar este serviço.
Etapa 2: Segurança e autenticação Certifique-se de que seu serviço web ou API seja seguro, utilizando autenticação e criptografia apropriadas para proteger seus dados. Você pode usar OAuth, JWT ou outros mecanismos de autenticação para proteger seu serviço.
Passo 3: Disparar a partir do Servidor Local A partir do servidor local, sempre que houver novos dados a serem transferidos, você poderá enviar uma notificação ao servidor central. Esta notificação seria essencialmente uma solicitação ao servidor central para extrair dados do servidor local.
Etapa 4: Recuperação de dados pelo servidor central Ao receber a notificação, o servidor central pode fazer chamadas HTTP/REST ao seu serviço web para recuperar os dados. Você teria que desenvolver um mecanismo em seu servidor central para lidar com essas notificações e iniciar o processo de recuperação de dados. Pode ser um serviço ou uma tarefa agendada que escuta notificações e recupera dados quando notificado.
Etapa 5: Importação de dados para o servidor central Assim que os dados forem recuperados pelo servidor central, ele os importará para o banco de dados SQL Server. Você pode usar várias técnicas para isso, como operações de inserção em massa, para melhorar a eficiência. Você pode tentar usar um processo ETL para importar dados com base na frequência.
Conclusão: Ao seguir esta estratégia, você estaria efetivamente configurando um mecanismo onde o servidor central pode extrair dados do servidor local ao ser notificado. Essa abordagem aproveitaria os serviços da Web para facilitar a transferência de dados, fornecendo uma solução flexível e segura para o seu problema.