【问题标题】:application specific seed data population特定应用的种子数据群
【发布时间】:2011-03-02 12:05:35
【问题描述】:

环境:JBoss、(h2、MySQl、postgres)、JPA、Hibernate 3.3.x

@Id
@GeneratedValue(strategy = IDENTITY)
private Integer key;
  1. 目前我们的主键是使用上述注释创建的。我们希望支持大量用户(约百万用户),应该使用什么密钥。它应该是 Integer 还是 Long 还是我应该使用上述声明的未签名版本。

  2. 我们有一个 j2ee 应用程序,需要在安装时填充一些种子数据。购买时,客户在应用程序之上创建自己的数据。我们只是想确保有足够的空间来为未来的版本发布、修改或添加数据。支持这一点的最佳机制是什么,我们已经研究了从某个 id(比如 1000)开始所有表标识符,但这要求修改主键生成以具有基于表或序列的生成器,并且我们有大约 100 个表。我们不确定这是否是正确的策略。

如果我们对密钥使用有符号整数方法,将种子数据作为从 0 及以下开始的所有内容(即 -ve 数字)是否有意义,以便所有客户特定数据在 0 及以上可用(即 +ve 数字)

【问题讨论】:

    标签: java hibernate database-design jpa jakarta-ee


    【解决方案1】:

    目前我们的主键是使用上面的注解创建的。我们希望支持大量用户(约百万用户),应该使用什么密钥。它应该是 Integer 还是 Long 还是我应该使用上述声明的未签名版本

    来自Java教程的Primitive Data Types

    int: int 数据类型是一个 32 位有符号二进制补码整数。它的最小值为 -2,147,483,648,最大值为 2,147,483,647(含)。对于整数值,此数据类型通常是默认选择,除非有理由(如上述)选择其他类型。这种数据类型很可能对于您的程序将使用的数字足够大,但如果您需要更广泛的值,请改用long

    由您决定是否安全:)

    (...) 我们只是想确保有足够的空间来为未来的版本发布、修改或添加数据。支持这一点的最佳机制是什么

    我将使用上述数据库对此进行测试,但对种子数据使用负 ID 似乎是更安全的解决方案(不可能发生冲突)。如果它不起作用(我认为应该),那么我相信 TABLE 策略将是最便携的解决方案。

    【讨论】:

    • 它似乎对 -ve 数字工作正常。碰撞的可能情况是什么,生成的 id 在达到 2,147,483,647 后如何溢出,它会移动到 -2,147,483,648 并开始向零计数。只是想确保不会有任何问题
    • @user339108:好吧,如果您使用负 ID,那么碰撞应该是不可能的,这就是这个解决方案很好的原因。关于另一个问题,我认为生成器不会移动到 -2,147,483,648(但我需要检查一下)。如果你想安全,也许使用 long。
    • 我不确定尺寸要求,如果可能,我希望避免使用 Long
    猜你喜欢
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 2021-04-18
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多