通过Django从Twisted应用程序访问数据库

时间:2013-01-08 15:58:01

标签: python database django asynchronous twisted

原始问题

我想在Twisted async app中运行数据库查询。在示例中添加新记录,更新某些内容或只获取一些数据。

我的提案

我想在django中创建只有Twisted应用程序可以访问的特殊视图,这将对我需要的数据库进行所有类型的操作。

在示例中,url domain.com/server/getuserdata/{{ user_id }}/将以某种方便的格式(json)返回有关用户的数据。

GET / POST请求将在Twisted中被删除,因此它不会阻止我的Twisted应用程序(如果我错了,请更正我)。

我的Twisted应用程序只会偶尔运行这些请求。它不是实时更新数据。实时数据将存储在Redis中,一旦我准备存储Django数据库,我就会使用redis中存储的数据向Django运行请求。

但是每秒服务器的请求仍然很多(比方说从100到1000)。

我读到的另一种方法

  • twisted nadbapi,但自2007年以来它没有更新,所以我不想诚实地使用它
  • 在Redis中存储请求并由另一个deamon / app或cron运行。

问题

  • 对Django使用GET / POST请求的deffered对象是一个好方法吗?
  • 我可以告诉Django Twisted app是否值得信任,所以它不会像DDOS那样对待它?
  • 对于这么多请求(当然是使用缓存),这是否足够快?
  • 这项任务有更好的方法吗?

我是Twisted并将异步应用与同步应用程序整合在一起的新手,所以如果我输入一些愚蠢的东西,我很抱歉

1 个答案:

答案 0 :(得分:2)

  

使用deffered对象对Django的GET / POST请求很好   接近?

我希望我有经验可以深入回答这个问题。我相信只要请求是异步的,你就可以在扭曲的方面做得很好。我的基础是龙卷风的基本经验。对于应用程序来说,必须请求Web服务并且龙卷风提供了一种在框架中内置的异步方式,这是相对常见的。

  

我可以告诉Django Twisted app是否值得信任,所以不会   把它当作DDOS来对待?

我不认为django固有地知道什么服务请求它。它不会限制速度或开箱即用的请求。它只响应对它提出的任何请求。如果这些是它可以处理的更多请求,它将崩溃。很多请求django可以处理你的项目的变种以及如何部署它。您可以轻松地使用gunicorn运行它并让nginx坐在它前面。如果它没有像shoudl那样执行,您可以启动另一个gunicorn实例。

  

这对于如此多的请求(使用缓存)是否足够快   当然)?

我认为没有人能说出来。你可能要自己做基准测试。有许多博客文章/文章对各种django服务器配置进行了基准测试。

  

这项任务有更好的方法吗?

我认为这是一种相对常见的方法。通过RESTful接口通过django公开您的方法。从扭曲中做出异步请求。