Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 我应该使用UUID还是其他什么?_Database_Performance_Postgresql_Join_Uuid - Fatal编程技术网

Database 我应该使用UUID还是其他什么?

Database 我应该使用UUID还是其他什么?,database,performance,postgresql,join,uuid,Database,Performance,Postgresql,Join,Uuid,通常我有一个任务,需要收集一个对象,并且在保存到DB(PostgreSQL)之前需要知道它的ID 我可以用UUID实现这一点,但它有很多缺点: -选择或包含时性能较差 -连接性能较差 -需要更多的空间吗 所以问题是:如何事先为对象生成一个ID,并将UUID的负面影响降至最低?您可以使用任何编程语言中的任何UUID生成器来实现这一点。我建议在PostgreSQL中使用uuid类型,以避免在空间或连接方面需要太多开销。PostgreSQL也不包含生成这些数据的方法,因此必须先生成它们 您可能会遇到的

通常我有一个任务,需要收集一个对象,并且在保存到DB(PostgreSQL)之前需要知道它的ID

我可以用UUID实现这一点,但它有很多缺点:
-选择或包含时性能较差
-连接性能较差
-需要更多的空间吗


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

您可以使用任何编程语言中的任何UUID生成器来实现这一点。我建议在PostgreSQL中使用uuid类型,以避免在空间或连接方面需要太多开销。PostgreSQL也不包含生成这些数据的方法,因此必须先生成它们

您可能会遇到的一个主要问题是,对于数字ID,许多事情相对来说都是无痛的,这成为UUID的一个更大问题。这些措施包括:

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

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

    我们在一个项目中遇到了这个问题。我运行了一些测试(大约400万行,如果我没记错的话),这表明UUID与ints相比对PG的性能并没有太大的影响。使用UUID作为主键已经有一段时间了,我会毫不犹豫地再次这样做。尽管如此,我必须补充一点,我们还没有看到它在大规模生产中的表现

    看看这个:

    使用UUID的好处在于,您永远不必担心冲突。这不是件好事:如果您手动输入测试查询,它们会有点麻烦

    如果最终基于大量UUID列表进行选择,请使用以下技巧:

    希望这有帮助


    Adam.

    当然,UUID的性能应该低于integer,问题在于数据量。老实说,4M数据太小,无法说明是否会出现性能问题,当然,如果需求映像显示数据量仍然小于4M,那也没关系


    在文档中,它更好地建议如何以及何时使用UUID

    为什么不让数据库分配一个
    serial
    id?这在很多很多数据库中都可以使用。+@GordonLinoff,只需使用
    INSERT。。。返回id