环境:JBoss,(h2,MySQl,postgres),JPA,Hibernate 3.3.x
@Id
@GeneratedValue(strategy = IDENTITY)
private Integer key;
目前我们的主键是使用上面的注释创建的。我们希望能够支持大量用户(〜百万用户),应该使用什么密钥。它应该是整数还是长整数,还是应该使用上述声明的无符号版本。
我们有一个j2ee应用程序,需要在安装时填充一些种子数据。在购买时,客户在应用程序之上创建自己的数据。我们只是想确保有足够的空间来发布,修改或添加未来版本的数据。支持这一点的最佳机制是什么,我们已经考虑从某个id(比如1000)启动所有表标识符,但这要求修改主键生成以使基于表或序列的生成器,并且我们有大约100个表。我们不确定这是否是正确的策略。
如果我们对密钥使用有符号整数方法,那么将种子数据作为从0和以下开始的所有内容(即-ve数)是否有意义,以便所有客户特定数据在0及以上可用(即+ ve数字)
答案 0 :(得分:1)
目前,我们的主键是使用上述注释创建的。我们希望能够支持大量用户(〜百万用户),应该使用什么密钥。它应该是整数还是长整数,还是应该使用上述声明的无符号版本
来自Java教程的Primitive Data Types:
int:
int
数据类型是32位带符号的二进制补码整数。它的最小值为-2,147,483,648,最大值为2,147,483,647(含)。对于整数值,此数据类型通常是默认选择,除非有理由(如上所述)选择其他内容。此数据类型很可能足以容纳您的程序将使用的数字,但如果您需要更广泛的值,请改用long
。
由您决定是否安全:)
(...)我们只是想确保有足够的空间来发布,修改或添加未来版本的数据。什么是最好的机制来支持这个
我会用上面提到的数据库对此进行测试,但是对种子数据使用负ID似乎是更安全的解决方案(没有可能的冲突)。如果它不起作用(我认为它应该),那么我相信TABLE策略将是最便携的解决方案。