2012-08-03 90 views
0

作为一个小背景故事,我正在研究一个应用程序,该应用程序基于来自网状网络的分组数据将KML管理到googleearth。例如:Django视图之间的保留状态

UDP数据包---> Django ORM将有序数据放置在数据库---> Django视图中读取数据库并将包数据(gps,连接等)的KML表示返回给Google地球。

这里的问题是数据库行告诉故事,做一个查询或一系列查询,不足以“绘制该网状网络的图片”。我需要保留一些内部的python结构和类来维护请求/响应之间的网络“状态”。

这里是我需要帮助的地方。目前,为了保留这个“状态”,我使用Django的低级高速缓存API来存储无限制超时的类。而每一个请求,我只是从缓存中检索这个类,添加到它的结构中,并将其保存回缓存。这似乎是有效的,实际上相当不错;但它感觉不对。

也许我应该沟通Django并扩展Python的BaseHTTP类来处理我的请求/响应?

也许我应该创建一个单独的应用程序来保留“状态”和Django管道通过套接字请求数据?

我只是觉得我误用了Django并且对关键数据不安全。并帮助?

我知道这是非常规的,有点疯狂。

(注:我目前使用Django的ORM Django的实例为UDP套接字监听的外面,所以我知道我可以使用Django的环境的实例外)

+0

会话有什么问题? – Marcin 2012-08-03 14:49:23

+0

会议是一个很好的建议,谢谢!我想我应该清楚表明,我是在寻求整体设计决策建议,而不是真正如何适应Django来做它并不真正意义的事情。我在不使用django的情况下对我的应用程序进行原型开发,并使用基本的Python CGI库进行谷歌地球响应/请求处理;而且它的工作到目前为止。当我决定要做什么时,我会用适当的推理发布更新。 – anthonygclark 2012-08-03 16:51:55

回答

2

也许我应该沟Django并扩展Python的BaseHTTP类来处理我的请求/响应?

用于Python的BaseHTTP的开沟Django不会改变HTTP是无状态协议的事实,并且您希望为其添加状态。根据缓存后端,在缓存中存储状态有些不稳定是正确的。您可以将其切换到会话而不是缓存。

也许我应该创建一个单独的应用程序来保留“状态”和Django管道它通过套接字请求数据?

是的,这似乎是一个可行的选择。 HTTP又是无状态的,所以如果你想声明你需要将它保存在某个地方,而DB是另一个你可以存储它的地方。

+0

感谢您的回复Mark!我相信在我的情况下,数据库无法存储这个状态(尽管你不知道)。这个数据太多了。理想情况下,这些国家将生活在记忆中。 – anthonygclark 2012-08-03 15:15:15

+0

“太多的数据”和“全部纳入记忆”并不是很好。除关系数据库以外,还有很多其他数据存储可用。 – 2012-08-03 15:37:14

+0

啊,是的,这听起来有点矛盾。你让我迈出了正确的一步,我要做出正确的答案(当我决定做某件事时,我会更新我的帖子)。 – anthonygclark 2012-08-03 16:10:54

1

这听起来真的很喜欢那种存储问题的Redis和MongoDB的是由有效处理。您应该能够找到合适的数据结构来跟踪您的数据包数据,并匹配支持创建廉价的原子更新来引导。

+0

感谢您的回复! MongoDB很好,我会承认的。我认为我没有足够复杂的数据来将Redis引入此中,因为Django的低级缓存对于关键价值存储是必不可少的。我在这里使用'值'作为'状态'对象。 现在你让我重新思考一切。 ;) – anthonygclark 2012-08-03 16:08:52