我正在寫一個使用谷歌應用程序引擎的錯誤數據庫,我遇到了問題得到的錯誤的唯一編號。每個錯誤都需要一個唯一的編號,以便用戶可以輕鬆地引用它們,並且編號應該儘可能簡單和儘可能小。 「嘿,我修正了錯誤27」或「我重新打開了錯誤1867」。錯誤編號也應該增加,以便用戶可以粗略地瞭解哪個錯誤後發生了哪些錯誤。谷歌應用程序引擎碎片計數器不工作,獲取倍數
App Engine沒有像SQL這樣的真正的計數器,所以我實現了以下基本上是Google推薦的代碼的函數,但它並不是一直工作。
我偶爾會看到重複的錯誤號。目前,我是唯一使用錯誤數據庫的人(標誌性地說,這個錯誤在我的錯誤數據庫中),並且我不會更快地輸入錯誤,然後每5秒或10秒輸入一次錯誤(如果我輸入更快)。雖然最終會有多個用戶可能同時進入錯誤。
class SimpleCounterShard(db.Model):
count = db.IntegerProperty(required=True, default=0)
def getNewID():
def txn():
index = random.randint(0, NUM_SHARDS - 1)
shard_name = "shard" + str(index)
counter = SimpleCounterShard.get_by_key_name(shard_name)
if counter is None:
counter = SimpleCounterShard(key_name=shard_name)
counter.count += 1
counter.put()
db.run_in_transaction(txn)
total = 0
for counter in SimpleCounterShard.all():
total += counter.count
return total
我在做什麼錯(或不理解)?或者,有更好的理由來獲得唯一的數字,這些數字不僅僅是密鑰或ID在生產服務器上的某些情況下似乎是隨機的。
感謝您的回覆。就bug數而言,在一個包含數千和數千個bug的巨大項目中可能並不重要,但對於一個擁有幾百個bug的小型獨立項目而言,當最後一個bug是71時,將10201看作bug數,確實會導致一些人恐慌。當涉及到這樣的東西時,我也是OCD。 :-) –