我想在appengine中實現datetime有序實體,就像Appengine自己的日誌一樣。所以我可能會需要某種獨特的有序ID生成算法。在AppEngine中實現Log類似結構的最佳方式
有沒有人對此有過任何建議?
我想在appengine中實現datetime有序實體,就像Appengine自己的日誌一樣。所以我可能會需要某種獨特的有序ID生成算法。在AppEngine中實現Log類似結構的最佳方式
有沒有人對此有過任何建議?
使用您追加的日期。一種方法是將其轉換爲unix時間(自1970年以來的ms)以及它的數字。 更好的方法,但更多的代碼是不使用數據存儲,而是使用bigquery。可能更便宜。
有一個類似的需求,我將一個長整數時間戳作爲標識符傳遞給Entity構造函數。根據Java Datastore Entities, Properties, and Keys,標識符可以只是一個字符串或長整數。爲了查看數據存儲查看器中的實際日期和時間,我將同一個轉換爲java.util.Date的值也放入了未索引的屬性中。誠然,一些非正規化的冗餘,但在實踐中方便。
我想過這個。買你如何保證唯一性? – husayt
哎呀,我忽略了唯一性。在Unix紀元中,long int time是毫秒。重複在這裏從來沒有出現過,但可以想象。我建議用微秒,納秒或皮秒來表示時間。 GAE中沒有時間源是精確的,但如果兩個事件共享同一時間,它可能會用合成的亞毫秒值區分它們。記錄時刻的獨特時間會很慢(鎖定等)。相反,後臺任務可以掃描並修復新編寫的時間戳,爲了獲得更好的時間可用性而犧牲短期一致性(布魯爾的CAP定理)。 –
我們需要更多關於你想要做什麼的信息。
如果你想做一些日誌,你可以確實使用時間戳。 Python和NDB很容易:
class Log(ndb.Model):
date = ndb.DateTimeProperty(auto_now_add=True)
message = ndb.StringProperty()
然後,通過日期字段順序你的日誌。 如果您想製作AppEngine,您可以將日誌與父母關鍵字進行關聯,並按日期和父母關鍵字進行排序。
我希望它幫你。
你真的只有一個時間戳工作。如果數據只保留一段時間,您也可以使用日誌系統,然後重新處理它。 –
@husayt - 你應該解釋你想達到的目標。那麼我們可能會提供一個解決方案。 –
@PeterKnego購買默認自動生成的ID是隨機均勻分散的數字。你如何獲得用於Appengine實體的有序ID? – husayt