2012-08-03 73 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