我通过Grails为我的数据库实现了一个序列生成器。我已经定义了我的域类,我想指定一个序列。目前,我正在使用:
static mapping = {
id generator: 'uuid'
version false
}
但是这会产生很长的128位ID,我意识到用户可能很难使用。为了解决这个问题,我决定使用正常的递增ID可能会更好,所以我找到了this资源,告诉我有关预配置序列生成器的各种选项。
我看了increment
,发现了这个描述:
增量 - 生成long,short或int类型的标识符,仅当没有其他进程将数据插入同一个表时才是唯一的。不要在群集中使用。
我有一个Grails应用程序插入数据,但有几个用户可能同时输入数据。据我所知,Grails(就像普通的Servlet一样)会为用户发出的每个请求分配一个新线程。这是否意味着,increment
不适合,因为即使只有一个应用程序,也会有多个线程试图插入?
如果increment
不合适,我还有其他选择吗?
答案 0 :(得分:1)
如果增量不合适,我还有其他选择吗?
正如IsidroGHIf在评论中所述,如果你没有指定id生成器,GORM默认会选择生成id的本机策略,在MySQL的情况下是自动递增列。
它们绝对是线程安全的,它们也可以在集群中工作(与增量相比),它们默认以1开始,也递增1,因此不会长128位ID。
答案 1 :(得分:-2)
在单个实例应用程序中运行的所有线程都在同一进程中执行,因此使用increment
是线程安全的。
在这种情况下,与进程关联的Hibernate会话(与进程中运行的线程相关联)管理这些ID并确保唯一性。
无论如何,increment
模式通常(至少在我的情况下)用于测试和/或早期开发阶段。
如果您的数据库支持序列,我可能会使用序列模式。