使用机器名+表别名+序列进行数据库排序有什么缺点?

时间:2014-04-20 08:06:09

标签: database database-design distributed-computing distributed-system

我正在构建一个可以在一段时间后分布在多台机器上的系统 所以我已经完成了序列,uuid,梳子......的所有测序方法。

我发现他们中没有一个对我来说是完美的。

我想出了这个:

  • 给每台机器一个关键点:3et6
  • 为每个表提供一个密钥/别名ex:us // for users table
  • 正常序列
  • 连接它们以生成PK

所以用户行的PK看起来像这样:

3et6us1001

我有什么想念可以让这种方式无效吗?

2 个答案:

答案 0 :(得分:0)

你的计划听起来不错。唯一的问题(不一定是大问题)是许多DBMS被优化为使用整数键。你可以做两件事来利用这个:

  1. 为每台机器分配一个唯一的Id(1到999)并制作PK序列
    • 1000 +机器ID
  2. 只需使用序列作为PK。你唯一需要担心的时候 碰撞就是在多台机器上组合数据时;什么时候 你这样做,你可以将源机器名称/ ID添加到选择 区分他们。 (当然,如果来自的数据,这不会起作用 将不同的机器复制到所有其他机器上。)
  3. 但是,我不认为表名是必要的。它的标准做法是不把它放入密钥中:你知道它来自哪个表,因为你知道查询;添加这些冗余数据是过度工程化的。

答案 1 :(得分:0)

您可以使用带有整数的复合键:

primary key(machine_id, record_id);

单列密钥的一些好处是您不需要知道nr机器的上限。如果你的RDBMS支持它,这也很适合散列分区。从管理角度来看,这是有益的,因为您可以非常快速地移动大块数据。此外,从性能的角度来看,由于分区连接,这可以帮助实现连接性能。

复合键需要更多存储空间。如果支持表压缩,则额外存储将是最小的,因为每个块将具有高度重复。特别是如果你使用散列分区方案。