问题标签 [id-generation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
81 浏览

java - Hibernate:每个实体都有自己的 ID 生成器序列

我目前使用这种方法来生成 id:

效果是,当我保存 A 类型的实体时,它会获得 id '1',然后我保存实体 B 并获得 id '2'(而不是 1,因为它是另一种实体类型),然后我保存类型的实体A 再次得到 id '3' (而不是 2)。

我想要的是,Hibernate 自己计算每个实体类型的 ID 序列。那可能吗?

0 投票
1 回答
967 浏览

java - 这是对插入/更新的 Spring Data JDBC 问题的正确解决方案吗?

问题:

当我尝试使用 Spring Data JDBC(在 Spring-boot 应用程序中)创建新实体“客户”时

使用客户存储库:

对于这样的测试:

我收到了这个错误:

我正在使用带有此初始脚本的 postgresql 数据库的 testcontainer:

我希望持久性方式自动表现得像 JPA 中的 EntityManager.merge (),有没有办法做到这一点?我有一个,但我不知道它是否最正确。

(完整的源代码(非常基本和直接)可在https://github.com/FabianSR/spring_data_jdbc_example获得)

建议的解决方案:

我已经为这个问题实现了一个可能的解决方案,但我不知道这是否是正确的方法(不使用 JPA)。

我已经让 Customer 类扩展了一个实现 Persistable 接口的类,我已经实现了它的 getId () 方法,以便它在 Customer 字段中搜索带有 @Id 注释并返回其值的那个。我还添加了标志 isNew,默认值为 true。

客户如下:

现在我在 CustomerRepository 接口中添加了一个新方法,在保存一个 Customer 之前,它首先搜索它是否存在,修改它的 isNew 属性并保存它(否则只是保存它)

最后,在更改测试后,调用新的“合并”方法而不是“保存”,它已经可以工作了:

(分支中的代码https://github.com/FabianSR/spring_data_jdbc_example/tree/proposed_solution

这是最好的解决方案还是有更简单的解决方案?

0 投票
1 回答
78 浏览

c# - 在 C# 的构造函数中分配递增的 uint ID

我有一个类,据说可以处理 uint 类型的唯一 ID 的生成。然而,在多次使用后,uint 值似乎并没有增加。

每当在其他类上调用此类时,该类用于分配唯一的整数 ID。例如,下面的两个示例构造函数都有一个 ID 属性,该属性应该从 UniqueIdGenerator 类中获取其值

0 投票
0 回答
193 浏览

id-generation - Google Meet ID 是如何生成的?

我想讨论一下 Google Meet ID 是如何生成的。我们可能知道,生成唯一的、不可迭代的 ID 的最佳方法可能是使用 UUID。但是,Google Meet 使用完全不同的方法来生成 ID。Google Meet 似乎只是使用 10 个字母长的随机字符串作为 Meet ID。

ID背后是否有任何特殊算法,或者只是随机字符串?

0 投票
1 回答
188 浏览

spring-boot - 在 Kubernetes 中分配和维护顺序的 Worker-Number 或 NodeId

当一个 Kubernetes Spring-Boot 应用以 8 个实例启动时,每个节点上运行的应用需要获取 pod/container 的序列号。运行同一应用程序的 pod/容器不应有重复的编号。假设一个 pod 运行一个容器,而一个容器只运行一个应用程序实例。

应用程序可以从 Kubernetes API 中为每个 pod 提取一些唯一标识符,例如:

  • MAC 地址 ( networkInterface.getHardwareAddress())
  • 主机名
  • 节点名称 (aks-default-12345677-3
  • targetRef.name ( my-sample-service-sandbox-54k47696e9-abcde)
  • targetRef.uid ( aa7k6278-abcd-11ef-e531-kdk8jjkkllmm)
  • IP 地址 ( 12.34.56.78)

但是从 API 获取此信息的应用程序无法在指定的 pod 范围内安全地生成和分配唯一编号 [0 - Max Node Count-1]。任何在这些唯一标识符上运行的 reducer 步骤(按位 &)最终都会重复这些数字。与其他 pod 通信是一种反模式,尽管有些方法采用共识/协议模式来实现这一点。

我的问题是: Kubernetes 是否有一种简单的方法可以在创建每个节点/容器/pod 时为其分配一个序列号 - 可能在 pod 的环境变量中?这些数字可以以 0 或 1 开头,并且应该达到 uptown 的最大数量的 pod。

背景信息和一些研究: 执行UUID.randomUUID().hashCode() & 7 八次会让你重复 0 到 7 之间的数字。参考createNodeId(). 上述减速器步骤的实际运行示例输出。

我继续执行上述代码的 1 亿次运行,发现只有 0.24% 的案例分布均匀。

Uneven Reducers: 99760174 | Even Reducers: 239826