20

我的网页需要 10 到 20 次数据库查询才能获取所有必需的数据。

通常在发出查询后,Django 线程/进程会被阻塞,等待结果返回,然后它会恢复执行,直到到达下一个查询。

有什么方法可以异步发出所有查询,以便数据库服务器可以并行处理它们?

我正在使用 MySQL,但也想了解其他数据库的解决方案。例如,我听说 Postgresql 有一个异步客户端库——在这种情况下我将如何使用它?

4

3 回答 3

5

这个最近的博客条目似乎暗示它没有内置到 django 或 rails 框架中。我认为它很好地涵盖了这个问题,并且非常值得与评论一起阅读。

http://www.eflorenzano.com/blog/post/how-do-we-kick-our-synchronous-adiction/(断开的链接)

我想我记得 Cal Henderson 在他出色的演讲中提到了这个缺陷http://www.youtube.com/watch?v=i6Fr65PFqfk

我天真的猜测是你可能能够用单独的 python 库破解一些东西,但是你会失去很多 django 给出的 ORM/模板惰性评估东西,以至于你可能会使用另一个堆栈。再说一次,如果您只是在大型 django 项目中优化几个视图,那可能没问题。

于 2010-02-12T06:54:55.757 回答
4

我有一个类似的问题,我用 javascript/ajax 解决了它

只需使用基本标记加载模板,然后执行 severl ajax 请求来执行查询并加载数据。您甚至可以显示加载动画。用户将有一种 web 2.0 的感觉,而不仅仅是令人沮丧的页面加载。当然,这意味着每个页面需要更多的 HTTP 请求,但由您决定。

这是我的示例的外观:http://artiox.lv/en/search?query=test&where_to_search=all(断开的链接)

于 2011-04-19T12:42:25.763 回答
1

试试Celery,运行ampq服务器会有一些开销,但它可能会做你想做的事。不确定数据库的并发性。此外,如果您想要数据库的速度,我建议您使用MongoDB(但您需要这样做django-nonrel)。

于 2011-04-19T06:56:29.327 回答