使用像“1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ”这样的字母表我想生成2到4个字母代码来识别唯一的数据存储条目。我有一个python函数能够在传递一个列表时执行此操作,该列表指示最后一个代码的字母位置[7,17,11] - > “7GA”。下一个代码可以通过将最右边的元素递增一个并在超出字母长度时携带一个来生成。
这种方法的优点是可以保持代码简短,顺序,一致,易于沟通,以及查看我希望它们的方式。
我想知道这是否适用于app引擎,因为该函数必须保留或传递最后一个标识符以强制执行唯一性,这可能与Google基础结构的非连续性无关。允许这种情况发生的替代方法或推理反对它的理由。
答案 0 :(得分:5)
如果您认为代码是顺序的,那么每次创建新实体时,您都需要一个事务锁定并递增的单个计数器对象。反对这一点的论点是,你正在击败App Engine的一个主要优势:并发。除非您的应用程序特别需要顺序ID,否则这是一个坏主意。
如果让App Engine自动分配ID,它们将是非顺序的,但您可以在向用户显示时将整数转换为基数36。 Here's a python function将一个整数转换为任意碱基。
答案 1 :(得分:2)
这很难在应用引擎上使用,因为您的应用程序的许多副本可能会立即运行。每个副本都需要访问“最后一个标识符”并能够以原子方式更新它。这可能需要太多的开销,除非你只需要以这种方式生成新的ID,而不是很少。
为什么不使用GAE的内置数字ID?它们保证是独一无二的,并且易于沟通。它们也通常顺序和增加,但这不能保证。