Laravel UUID 和关系

问题描述 投票:0回答:1

我正在开发一个使用 UUID 的 API。我正在利用

michaeldyrynda/laravel-model-uuid
michaeldyrynda/laravel-efficient-uuid
使其尽可能高效。

laravel-model-uuid 的文档建议不要使用 UUID 作为模型的主键。这是否意味着对于我所有使用 UUID 的模型,我将有一个自动递增整数 PK(例如 id)和一个 uuid 列?

这是否意味着所有关系都必须使用常规 ID?

例如,假设我有一个端点来存储对一篇文章的评论,调用的正文可能包括文章 uuid,在创建评论之前,我必须通过 uuid 找到该文章以设置正确的article_id新评论。

是吗?

laravel uuid
1个回答
0
投票

TL;DR,强烈建议使用UUID作为主键

由于 MySQL 中的 PK 索引不会支持使用 UUID 的任何内容,因此它主要只会损害性能,因为随机 UUID 会使数据插入变慢(因为它需要在“查找表”中查找将 UUID 放入何处”)

在项目开始时不会感受到性能,但是当你的数据开始增长时,插入新记录时你就会感受到对性能的影响。

回到你的问题,

laravel-model-uuid 的文档建议不要使用 UUID 作为模型的主键。这是否意味着对于我所有使用 UUID 的模型,我将有一个自动递增整数 PK(例如 id)和一个 uuid 列?

这是否意味着所有关系都必须使用常规 ID?

答案是肯定的,如果这是您想要的,您可以使用普通的自动增量ID作为您的内部参考(例如另一个表上的外键),当您的应用程序想要显示ID时,您可以将UUID显示为您的应用程序资源 ID。

所以基本上 UUID 的工作只是公共 ID,所有内部参考都将使用旧的 AI ID。

了解更多信息:https://www.percona.com/blog/uuids-are-popular-but-bad-for-performance-lets-discuss/

© www.soinside.com 2019 - 2024. All rights reserved.