Apache Ignite如何将主键设置为自动增长?

时间:2018-08-14 11:46:46

标签: ignite

好吧,我现在有一个要求Apache Ignite SQL。创建表时,它类似于将主键设置为在Mysql中自动增长。 Apache Ignite创建表时,将主键设置为自动增长吗?

1 个答案:

答案 0 :(得分:2)

Ignite SQL中没有自动增量。但是您可以实现一个自定义SQL函数,该函数根据IgniteAtomicSequence生成ID:

public class SqlFunc {
    @QuerySqlFunction
    public static long nextId() {
        Ignite ignite = Ignition.ignite();
        IgniteAtomicSequence seq = ignite.atomicSequence("seq", 0, true);

        return seq.getAndIncrement();
    }
}

这里是缓存配置,允许在SQL中使用nextId()函数:

<bean class="org.apache.ignite.configuration.CacheConfiguration">
    <property name="name" value="cache"/>
    <property name="sqlFunctionClasses" value="com.example.SqlFunc"/>
    <property name="sqlSchema" value="PUBLIC"/>
</bean>

有关自定义SQL函数的更多信息:https://apacheignite-sql.readme.io/docs/custom-sql-functions

UPD:

请注意,每次IgniteAtomicSequence保留一系列ID时,都会启动内部事务。如果使用显式事务,则可能导致死锁之类的意外后果。

因此,应谨慎使用此方法。特别是,使用nextId()函数的SQL查询不应在事务中运行。