Fiz uma pergunta no SO e descobri que não existem ORMs sem bloqueio para minha estrutura da web favorita. Por não-bloqueio, refiro-me a um ORM com suporte a retorno de chamada para recuperação assíncrona. O ORM seria fornecido com um retorno de chamada ou algo parecido para executar quando os dados fossem recebidos.
Quero criar uma, mas tenho algumas perguntas que me impedem de iniciar o desenvolvimento:
Quais problemas podem ser encontrados ao desenvolver o ORM?
O suporte à recuperação sem bloqueio aumenta drasticamente a complexidade de um ORM?
Por que existem tão poucos ORMs sem bloqueio por aí?
Atualização: parece que tenho que melhorar minha pergunta. Temos soluções que já nos permitem receber dados de maneira não-bloqueadora e acredito que a maioria das empresas que usam essas soluções utiliza SQL bruto. Queremos criar uma solução mais genérica que possamos reutilizar em projetos futuros. Que dificuldades podemos encontrar?
Atualização 2: o idioma preferido é o python, mas estou interessado em princípios. Esta pergunta é realmente para mim, pois examinarei as plataformas que já possuem ORM sem bloqueio.
web orm server-side
— Nikolay Fominyh
fonte
2
O que é um "ORM sem bloqueio?" Como você pode exibir os dados antes de recebê-los?
— Robert Harvey
6
@RobertHarvey: a recuperação assíncrona parece muito boa, na verdade. O ORM seria fornecido com um retorno de chamada ou algo como "ativar" quando os dados fossem recebidos. Caso contrário, seu ORM precisará ser dividido em um thread separado para garantir a capacidade de resposta da interface do usuário.
— Marjan Venema
@MarjanVenema, sim, quero ORM com suporte para retorno de chamada.
— Nikolay Fominyh
11
Então, por que não usar apenas retornos de chamada assíncronos com seu ORM síncrono favorito? stackoverflow.com/q/1239035
— Robert Harvey
@RobertHarvey, porque o ORM síncrono bloqueia o servidor assíncrono.
— Nikolay Fominyh
Respostas:
2
Quais problemas podem ser encontrados ao desenvolver o ORM?
Você precisará abordar a lista completa de problemas necessários para preencher a incompatibilidade de impedância relacional do objeto , além de lidar com as idiossincrasias do SQL fornecidas por cada fornecedor do RDBMS. Quanto mais avançados forem seus requisitos, piores serão seus problemas neste departamento: por exemplo, o SQL que você gerar para implementar a paginação de resultados diferirá bastante drasticamente entre Oracle, SQL Server e mysql. Felizmente, isso não é diferente entre as implementações de ORM de bloqueio e de não bloqueio; portanto, se houver um ORM de código aberto para Python, você poderá emprestá-lo fortemente para resolver quase todos esses problemas.
O suporte à recuperação sem bloqueio aumenta drasticamente a complexidade de um ORM?
O maior problema que você enfrentará é que a biblioteca de conexões para acessar o próprio RDBMS estaria bloqueando. Essa é outra diferença que você deve abordar. Gerenciar os threads invisíveis para seus usuários será o desafio adicional para você. Além disso, o carregamento de dependências sob demanda seria um desafio, porque a operação é percebida como síncrona pelos usuários de sua estrutura: afinal, eles normalmente não esperam uma notificação sobre quando está certo acessar uma propriedade de coleção de seu objeto.
Por que existem tão poucos ORMs sem bloqueio por aí?
Só posso especular sobre esse último ponto, mas acho que tem a ver com a baixa demanda por essas estruturas: como você pode simular parcialmente o ORM sem bloqueio adicionando outro nível de encadeamento ao código do aplicativo, conforme necessário, e manter o bloqueio regular em qualquer outro lugar, o desenvolvimento de uma estrutura especializada para ela pareceria não ideal.
— dasblinkenlight
fonte
Não tenho certeza, se a resposta a esta pergunta puder ser melhor. Obrigado.
— Nikolay Fominyh
6
Você não disse qual idioma está usando, então eu recomendarei o Node.js e um ORM para ele: Nó ORM , tudo no nó é assíncrono, isso não é diferente.
— gbjbaanb
fonte
Pergunta atualizada.
— Nikolay Fominyh
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.