2013-12-22 40 views
1

我想在appengine中實現datetime有序實體,就像Appengine自己的日誌一樣。所以我可能會需要某種獨特的有序ID生成算法。在AppEngine中實現Log類似結構的最佳方式

有沒有人對此有過任何建議?

+2

你真的只有一個時間戳工作。如果數據只保留一段時間,您也可以使用日誌系統,然後重新處理它。 –

+0

@husayt - 你應該解釋你想達到的目標。那麼我們可能會提供一個解決方案。 –

+0

@PeterKnego購買默認自動生成的ID是隨機均勻分散的數字。你如何獲得用於Appengine實體的有序ID? – husayt

回答

0

使用您追加的日期。一種方法是將其轉換爲unix時間(自1970年以來的ms)以及它的數字。 更好的方法,但更多的代碼是不使用數據存儲,而是使用bigquery。可能更便宜。

1

有一個類似的需求,我將一個長整數時間戳作爲標識符傳遞給Entity構造函數。根據Java Datastore Entities, Properties, and Keys,標識符可以只是一個字符串或長整數。爲了查看數據存儲查看器中的實際日期和時間,我將同一個轉換爲java.util.Date的值也放入了未索引的屬性中。誠然,一些非正規化的冗餘,但在實踐中方便。

+0

我想過這個。買你如何保證唯一性? – husayt

+1

哎呀,我忽略了唯一性。在Unix紀元中,long int time是毫秒。重複在這裏從來沒有出現過,但可以想象。我建議用微秒,納秒或皮秒來表示時間。 GAE中沒有時間源是精確的,但如果兩個事件共享同一時間,它可能會用合成的亞毫秒值區分它們。記錄時刻的獨特時間會很慢(鎖定等)。相反,後臺任務可以掃描並修復新編寫的時間戳,爲了獲得更好的時間可用性而犧牲短期一致性(布魯爾的CAP定理)。 –

0

我們需要更多關於你想要做什麼的信息。

如果你想做一些日誌,你可以確實使用時間戳。 Python和NDB很容易:

class Log(ndb.Model): 
    date = ndb.DateTimeProperty(auto_now_add=True) 
    message = ndb.StringProperty() 

然後,通過日期字段順序你的日誌。 如果您想製作AppEngine,您可以將日誌與父母關鍵字進行關聯,並按日期和父母關鍵字進行排序。

AppEngine Python ndb

我希望它幫你。

相關問題