我正在写一个使用谷歌应用程序引擎的错误数据库,我遇到了问题得到的错误的唯一编号。每个错误都需要一个唯一的编号,以便用户可以轻松地引用它们,并且编号应该尽可能简单和尽可能小。 “嘿,我修正了错误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。 :-) –