2011-03-16 76 views
1

我是新來的Django,並可能以一種不正常的方式使用它。這就是說,我想找到一種方法來擁有站點內存。 解釋。DJANGO持久性網站寬內存

我有一個非常簡單的設置,其中一個compter將每隔幾秒發佈一次到站點的帖子。 我想將這些數據保存在某個地方。 我希望每個查看網頁的人都能通過一些javascript近乎實時地查看基於這些數據的更新。

所以使用下面的示例代碼。 計算機A將做一個post_set_data並將數據設置爲「數據集」 計算機B,C,D等....然後會做一個get_data並看到「數據集」 不幸B,C,D只是看到「」

我有一種感覺,我需要的是memcached,但我在一個hostgator共享服務器上,無法安裝它。在此期間,我只是把它們寫入文件。這有效,但真的很無用,而且我希望能爲龐大的用戶羣提供服務。

感謝您的任何幫助。

#view.py 
data="" 

def set_data(request): 
    data = request.POST['data'] 
    return HttpResponse(""); 

def get_data(request): 
    return HttpResponse(data); 
+0

如果你想推動基於瀏覽器的客戶端的實時更新,你可能想看看「彗星」,例如:http://www.rkblog.rk.edu.pl/w/p/django- and-comet/ – 2011-03-17 00:06:27

回答

2

memcached是有損的,因此不符合「持久性」。

文件很好,但切換到通過mmap訪問它們。

+0

謝謝,但我有點困惑如何mmap幫助。看起來這很有用,如果你可能在同一個會話中多次訪問一個文件。我想要的是讀取文件一次,爲10,000會議。作爲參考,我來自一個控制類型的世界,在這個世界中,UDP數據包飛得很快而且很多網絡的東西只是巨大的不同。 – user602622 2011-03-17 00:34:20

2

持久性存儲也稱爲數據庫(儘管在某些情況下,Django的高速緩存後端也可能工作)。千萬不要嘗試在Web開發中使用全局變量。

是否應該使用Django模型或緩存後端實際上取決於您的用例,但是您只是描述了一個人爲的示例(或者,您的Web應用程序由getter和setter組成?)。

+0

感謝您的回答。我並不是指持久存儲,我需要RAM而不是硬盤。你爲什麼稱自​​己的例子是人爲的,正是我需要做的。此外,從來沒有真正處理數據庫,但我認爲這是一個硬盤驅動器寫每次我設置數據,我想避免。我的系統由設置數據的非網頁程序和接近實時訪問數據的網頁(希望有許多網頁)組成。舊數據被丟棄,只有20個字節的數據需要在任何時候存儲。 – user602622 2011-03-17 00:18:05

+0

例如,如果我打算用C#程序來做到這一點,那麼我可以在不訪問文件系統的情況下做到這一點,並且可能每秒鐘處理數以千計的請求。我只是喜歡在django中完成它,因爲這個功能被封裝在一個網頁中。 – user602622 2011-03-17 00:24:45

+0

@ user602622:好的,如果用例真的很簡單,那麼可以使用Django的memcached後端。查看[如何設置它的文檔](http://docs.djangoproject.com/en/dev/topics/cache/#memcached)。但是請注意,如果您重新啓動memcache守護進程,您的數據將會丟失。因此,根據更新的頻率,您可能希望將其存儲在數據庫中 - 然後從memcached中檢索它,並且如果memcached沒有可用值,請從數據庫中獲取它。 – AndiDog 2011-03-17 09:47:18