gpt4 book ai didi

java - 从两个整数创建唯一整数

转载 作者:搜寻专家 更新时间:2023-10-30 20:15:52 25 4
gpt4 key购买 nike

了解我要归档的内容的一些背景知识。我有一个最大值。 1000 个数据库,每个数据库都有一个唯一的 ID。这些数据库的结构相同,但数据不同(每个客户一个数据库)。比方说,每个数据库都有一个名为 table1 的表:

DB1:

+----+---------+------+
| ID | col1 | col2 |
+----+---------+------+
| 1 | String1 | 23 |
| 2 | String2 | 56 |
| 3 | String3 | 35 |
+----+---------+------+

DB2:

+----+---------+------+
| ID | col1 | col2 |
+----+---------+------+
| 1 | String4 | 34 |
| 2 | String5 | 54 |
| 3 | String6 | 23 |
+----+---------+------+

我们正在重写应用程序,只为所有客户使用一个数据库。一开始,我们必须并行使用两个系统,我需要一些方法在新数据库中创建一个表,具有唯一的 ID。我希望能够从新 ID 计算回 DB ID 和旧 ID。所以新表将是:

+----+---------+------+
| ID | col1 | col2 |
+----+---------+------+
| ? | String1 | 23 |
| ? | String2 | 56 |
| ? | String3 | 35 |
| ? | String4 | 34 |
| ? | String5 | 54 |
| ? | String6 | 23 |
+----+---------+------+

我可以添加什么作为 ID(唯一限制:唯一!)以便新旧数据之间有明显的匹配。

当然,我可以只向新数据库的每个表添加一个列 sourceDB 和 sourceID,但我不想这样做。

一些规范:我有大约 1000 个数据库,每个数据库大约有 200 个表。即使是最大的表也不会超过 100 万行。新的数据库是 postgres,我们用 Java 编写 prpgram

最佳答案

这是划分标识符空间的经典问题。假设您有一个 n 位 resp m 位 int 类型表示表中的 id,然后通过使用 max(n, m) + 1 位标识符,您可以通过前导来区分所有值少量。如果需要区分两个以上的表,则需要将前缀的大小增加到适当大的位数。

当然,您也可以选择进一步分割空间,如果您确定在某处留下了一些前导位来执行此操作,就像 IP 网络中的 CIDR 允许您进一步分割地址空间一样。

这与创建 sourceDB 列的作用相同,只是生成的 ID 始终是唯一的,无需查找数据库。

关于java - 从两个整数创建唯一整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40970260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com