非阻塞ORM问题


9

我问了一个SO 问题,发现我最喜欢的Web框架没有非阻塞ORM。所谓非阻塞,是指具有对异步检索的回调支持的ORM。ORM将提供回调或在接收到数据时执行的回调。

我想创建一个,但是有一些问题使我无法开始开发:

  • 开发ORM可能会遇到什么问题?
  • 支持无阻塞检索是否会大大增加ORM的复杂性?
  • 为什么周围的非阻塞ORM这么少?

更新:看来我必须改善我的问题。我们拥有的解决方案已经允许我们以非阻塞方式接收数据,我相信使用这种解决方案的大多数公司都使用原始SQL。我们希望创建一个更通用的解决方案,以便在以后的项目中重复使用。我们可能遇到什么困难?

更新2:首选语言是python,但是我对原理感兴趣。这个问题实际上是给我的,因为我将看一下已经具有非阻塞ORM的平台。


2
什么是“非阻塞ORM”?接收数据之前如何显示数据?
罗伯特·哈维

6
@RobertHarvey:异步检索实际上听起来不错。当接收到数据时,ORM将提供一个回调或一些类似的功能来“激活”。否则,您的ORM需要拆分到单独的线程中,以确保UI响应。
Marjan Venema 2012年

@MarjanVenema,是的,我想要具有回调支持的ORM。
Nikolay Fominyh 2012年

1
那么,为什么不将异步回调与您喜欢的同步ORM一起使用呢? stackoverflow.com/q/1239035
罗伯特·哈维

@RobertHarvey,因为同步ORM会阻止异步服务器。
Nikolay Fominyh 2012年

Answers:


2

开发ORM可能会遇到什么问题?

您需要解决桥接对象关系阻抗不匹配所需的问题清单,以及处理每个RDBMS供应商提供的SQL的特质。您的要求越高级,该部门的麻烦就越严重:例如,为实现结果分页而生成的SQL在Oracle,SQL Server和mysql之间将有很大的不同。幸运的是,在阻塞式和非阻塞式ORM实现之间没有什么不同,因此,如果有一个适用于Python的开源ORM,您将可以从中大量借用来解决几乎所有这些问题。

支持无阻塞检索是否会大大增加ORM的复杂性?

您将要面对的最大问题是,用于访问RDBMS本身的连接库将被阻塞。这是您必须解决的另一个区别。管理用户不可见的线程将是您面临的另一项挑战。此外,按需加载依赖关系将是一个挑战,因为您的框架用户认为该操作是同步的:毕竟,他们通常不希望在何时可以访问其对象的集合属性的通知。

为什么周围的非阻塞ORM这么少?

我只能推测这最后一点,但我认为这与对此类框架的需求低有关:因为您可以根据需要通过在应用程序代码中添加另一级线程来部分模拟非阻塞ORM,并保持常规阻塞在其他任何地方都不太友好,为此开发一个专门的框架似乎不太理想。


不确定,如果对这个问题的答案会更好。谢谢。
Nikolay Fominyh 2012年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.