增量线是否安全?

时间:2014-05-20 07:49:38

标签: mysql grails

我通过Grails为我的数据库实现了一个序列生成器。我已经定义了我的域类,我想指定一个序列。目前,我正在使用:

static mapping = {
    id generator: 'uuid'
    version false
}

但是这会产生很长的128位ID,我意识到用户可能很难使用。为了解决这个问题,我决定使用正常的递增ID可能会更好,所以我找到了this资源,告诉我有关预配置序列生成器的各种选项。

我看了increment,发现了这个描述:

  增量 -   生成long,short或int类型的标识符,仅当没有其他进程将数据插入同一个表时才是唯一的。不要在群集中使用。

我有一个Grails应用程序插入数据,但有几个用户可能同时输入数据。据我所知,Grails(就像普通的Servlet一样)会为用户发出的每个请求分配一个新线程。这是否意味着,increment不适合,因为即使只有一个应用程序,也会有多个线程试图插入?

如果increment不合适,我还有其他选择吗?

2 个答案:

答案 0 :(得分:1)

  

如果增量不合适,我还有其他选择吗?

正如IsidroGHIf在评论中所述,如果你没有指定id生成器,GORM默认会选择生成id的本机策略,在MySQL的情况下是自动递增列。

它们绝对是线程安全的,它们也可以在集群中工作(与增量相比),它们默认以1开始,也递增1,因此不会长128位ID。

答案 1 :(得分:-2)

在单个实例应用程序中运行的所有线程都在同一进程中执行,因此使用increment是线程安全的。 在这种情况下,与进程关联的Hibernate会话(与进程中运行的线程相关联)管理这些ID并确保唯一性。

无论如何,increment模式通常(至少在我的情况下)用于测试和/或早期开发阶段。

如果您的数据库支持序列,我可能会使用序列模式。