2011-06-23 81 views
1

可能重複:
How to implement 「autoincrement」 on Google AppEngineAppEngine上 - 在AppEngine上HR的DataStore奇怪的ID分配

我在AppEngine上有一個Python應用程序。我正在使用高複製數據存儲。

這是我的問題:

我有一個實體(稱之爲人爲了簡單),其保存沒有父母,這是在AppEngine上而言根實體。

在保存我的實體之前,我沒有設置key_name,因爲我想要DataStore指定的數字ID。某些代碼:

p = Person(name='Juan Roman Riquelme') 
p.put() 
p.key().id() # the numeric ID 

問題是ID不連續。每當我更新我的應用程序(appcfg.py更新。)時,ids將在下一個數千個應用程序中啓動。我的意思是,我第一次更新我的應用程序,1,2,3等的ID。下一次是:1001,1002,1003等等:2001,2002等

發生了什麼事?我應該怎麼做才能讓他們連續?

謝謝!

+1

看看[這個](http://stackoverflow.com/questions/3985812/how-to-implement-autoincrement-on-google-appengine)的問題。 –

+0

謝謝凱文。這非常有用。 – santiagobasulto

+0

它不是一個複製品!我討厭這個傢伙。我沒有問如何實現自動增量我不關心如何實現自動增量。我想知道如何在AppEngine管理中解決這個問題。你喜歡關閉的東西只是爲了感到重要? – santiagobasulto

回答

3

爲什麼你需要他們連續?

App Engine數據存儲不會將ID分配爲連續的。

如果你想要連續的ID,你必須自己分配ID。不要忘記使用allocate_id_range(http://code.google.com/appengine/docs/python/datastore/functions.html),以便應用引擎不會自動分配已存在的ID。

+0

我需要它們連續。我會看看這個。謝謝! – santiagobasulto

+0

@santiagobasulto爲什麼你需要連續?實際情況並非如此,嘗試這樣做本質上是不可行的 - 如果你嘗試,你會讓自己陷入一堆麻煩。 –

+0

@Nick。是的,你是對的。我正在做一個URLShortener,它將id映射到一個字母表(aprox 59個字符)。只要不浪費「字符組合」就可以連續使用ID。我正在考慮其他方式來做到這一點。我只是想用MySQL的方式。我現在在雲端!感謝您的關注。 – santiagobasulto