0

我在python中爲Google應用程序引擎編寫應用程序,其中每個用戶都可以提交帖子,每個帖子都有一個由其投票和評論數決定的排名。排名只是基於這兩個參數的簡單計算。我想知道是否應該將此值存儲在數據存儲中(並佔用空間),或者只是在每次需要時計算它。現在只是fyi的職位將按排名排序,因此需要考慮。將計算值存儲在數據存儲中或者只是對其進行計算

我主要是爲了效率而思考,並試圖平衡如果我應該嘗試保存數據存儲空間或保存讀/寫配額。

我認爲最好是簡單地存儲它,但是隨後我需要重新計算並重寫每次任何人對帖子投票或評論時的排名值。

任何輸入都會很好。

+2

在考慮效率時,考慮存儲數據所需的額外工作。一般來說,I/O比處理能力更大。因此,我傾向於隨時隨地進行計算。 –

回答

2

如何將排名存儲爲帖子中的屬性?這對於查詢/排序是不合適的。

如果您在存儲投票/評論計數時同時存儲排名(意思相同),則寫入成本的唯一增加將是該指數。 (確定最初的寫入成本,但這是2 [非常小])。

你需要做一個數據庫操作,每次有人投票或對帖子發表評論吧!?!還有什麼可以跟蹤投票/評論?

其實雖然,我想你會使用文本搜索來查找帖子中的數據。如果是這樣,我會考慮將排名作爲屬性存儲在搜索索引中並使用它來對匹配結果進行排名。

我們不需要考慮如何選擇要顯示的帖子。按票數和評論排名是唯一標準嗎?

+0

好,所以在寫一個實體的三個屬性而不是兩個時沒有太大區別?這不是增加了50%?我想不是,但很高興知道。有類別,但在每個類別內,帖子僅按創建日期或排名排序 – exployre

+0

爲什麼索引投票/評論?肯定不是投票!如果你正在索引評論,是不是文本搜索的方式去呢?無論如何,通過不索引你沒有查找的東西來節省寫入費用。無論如何,成本是(1寫+4寫入每修改後的索引屬性值+ 2寫入每個修改的複合索引值)。參考。 http://blog.xam.de/2011/11/analysis-of-datastore-operation-cost.html – user1258245

+0

你是什麼意思爲什麼索引票?選票只是我的郵政實體的財產,對不起,如果我不清楚。如果他們沒有編入索引,我將如何爲帖子附加評論? – exployre

1

當計算成本很高時,緩存是最有用的。如果計算簡單而便宜,則可以根據需要重新計算。

+0

而我寧願在內存中緩存而不是寫入數據庫。這意味着對我而言,永久性的狀態不如寫入持久性商店。我也喜歡讓它更接近內存,不需要網絡跳來獲取它。 – duffymo

1

如果您要依靠在實體中保持投票計數,那麼您必須願意失去偶爾的投票,或者您必須使用交易。如果您使用交易,則您對每秒可執行的交易次數有限制。 (請參閱關於交易和實體組的文檔)。如果您有很高的選票容量,限速可能會成爲問題。

對於低投票率,在實體中記數可能會正常工作。但是,如果您在投票率方面存在任何顯着的高峯,那麼將單獨的投票實體存儲在緩存計數中,或許可以通過保存在memcache中的(可能不可靠的)增量計數進行調整,這對您而言可能會更好。

這真的取決於你想要優化的東西。如果您試圖通過保持非交易緩存投票計數來最小化磁盤寫入,您可能會失去投票。

+0

我們在說1/100或更多像1/10? 1/100並不是太大問題 – exployre

+0

由於非交易獲得,增加,投入的投票計數會完全取決於投票到達的時間。如果投票相對不頻繁,您可能會很好。如果你正在做的事情會涉及幾乎同時投票的人羣,那麼你就有風險。 –

相關問題