2017-02-07 159 views
0

很多时候我有一个任务,我需要收集一个对象,并且在保存到DB(PostgreSQL)之前我需要知道它的ID。我应该使用UUID还是其他?

我能做到这一点与UUID,但它有很多缺点:
- 选择或包括
少的时候性能比较 - 更少的性能比较与加入
- 需要更多的空间

所以问题是:如何我是否可以预先为对象生成一个ID并将UUID负面影响降至最低?

+1

为什么不让数据库分配'serial' ID更好?这在很多很多很多的数据库中都有效。 –

+0

http://www.postgresql.org/docs/current/static/sql-createsequence.html – cshu

+0

+ @ GordonLinoff只需使用'INSERT ... RETURNING id' –

回答

1

我们遇到了一个项目的问题。我进行了一些测试(如果我没记错的话,大概有4M行),这表明uuids并没有真正打击PG的表现,与整数相比并不是太糟糕。一段时间以来,我一直使用uuids作为主键,我会毫不犹豫地再次这样做。虽然,我必须补充说明,我们还没有看到它如何在大规模生产中执行。

检查了这一点:http://www.codeproject.com/Articles/388157/GUIDs-as-fast-primary-keys-under-multiple-database

的好处关于使用UUID是你永远不用担心冲突。不是很好:如果您手动输入测试查询,它们有点麻烦。

如果你最终选择基于UUID的大名单上使用此招:https://www.datadoghq.com/blog/100x-faster-postgres-performance-by-changing-1-line/

希望这有助于

亚当。

0

您可以使用任何编程语言的uuid生成器来执行此操作。我建议在PostgreSQL中使用uuid类型以避免在空间或连接方面需要太多的开销。 PostgreSQL也不包含生成这些的方法,所以你必须先生成它们。

您可能遇到的一个主要问题是,使用数字标识符,许多事情相对无痛,这些问题会成为uuids的一个更大的问题。这些措施包括:

  1. 打字的标识符
  2. 选择一系列在相似的时间(因为数字ID是连续的)插入的记录。

但是,如果您在PostgreSQL中使用UUID类型,选择和连接性能应该不会太差。你如何生成UUID取决于你作为程序员

0

当然,UUID应该以低于整数的性能工作,问题在于哪些数据量。说实话,4M数据太小,不能说是否会出现性能问题,当然,如果要求映像的数据量仍低于4M,那也没关系。

在文档https://rclayton.silvrback.com/do-you-really-need-a-uuid-guid,它建议对如何以及何时使用UUID

相关问题