异步ORM的含义是什么
答
这意味着它的呼叫立即返回(不会阻止)。你稍后会得到结果,很可能是因为回调触发。
像这样(伪代码):
function printResult(result)
if result is "foo" print "FOO" else print "BAR"
function fooBar()
Orm.myQuery().setCallback(printResult)
Orm.myOtherQuery().setCallback(printResult)
在这个例子中,这两个查询将在同一时间被执行(和来自第二查询的响应能来之前第一)。
它在使用非阻塞IO的程序中非常有用。查询在同一时间执行,可能在多个数据库上执行,具有很好的延迟性。 如果每个查询需要1毫秒,执行10个查询仍然只需要1毫秒,而不是10毫秒。
不阻止线程实际上并不是最重要的问题:无论如何,通常不能异步使用连接(即,只有在不同连接上发送查询时,此方法才有效)。通常将多个查询分组在一起通常更重要:无论如何,当查询被执行时,您可以在客户端上做一些工作;但是如果查询相对简单,将它们分组在一起会节省大量往返数据库的时间。许多ORM(至少NHibernate,DataObjects.Net)为未来(延迟)的查询提供支持,从这一点来看,这些查询更具吸引力。 – 2009-12-23 13:29:04