Php UUID在MySQL中作为二进制存储
我想创建一个列(不是PK),其值表示为唯一标识符。它不用于加密或安全目的——严格地说是用于标识记录。每次插入新记录时,我都要生成并存储此唯一标识符。不确定这是否相关,但我现在有100万条记录,预计2年内会有300万条。我正在使用PHP中的web应用程序 我最初只是假设调用UUID()并将其直接存储为某种char数据类型,但我真的想做一些研究,学习一种更高效/优化的方法。我在这里找到了很多很好的文章,但是我对所有的文章都很难理解,因为很多文章都有点老,或者不同意最终让我感到非常困惑的方法。我想问问是否有更聪明/更有经验的人能帮我一把 我看到人们在各种帖子上链接到这里,并建议以这种方式实施: 但是读了那篇文章后,我很难完全知道该做什么。有序UUID?我应该将其存储为什么?我想那一页可能有点让我不知所措。我想问是否有人能帮我澄清其中的一些问题。具体而言:Php UUID在MySQL中作为二进制存储,php,mysql,database,database-design,Php,Mysql,Database,Database Design,我想创建一个列(不是PK),其值表示为唯一标识符。它不用于加密或安全目的——严格地说是用于标识记录。每次插入新记录时,我都要生成并存储此唯一标识符。不确定这是否相关,但我现在有100万条记录,预计2年内会有300万条。我正在使用PHP中的web应用程序 我最初只是假设调用UUID()并将其直接存储为某种char数据类型,但我真的想做一些研究,学习一种更高效/优化的方法。我在这里找到了很多很好的文章,但是我对所有的文章都很难理解,因为很多文章都有点老,或者不同意最终让我感到非常困惑的方法。我想问问
非常感谢 我在最近的一个项目中使用了UUIDV4。生成UUID v4的代码可以从这里获得: 主要区别在于我们将其压缩为22字节的区分大小写格式。ElasticSearch也使用这种方法
结果值存储为char(22)。我在最近的一个项目中使用了UUIDV4。生成UUID v4的代码可以从这里获得: 主要区别在于我们将其压缩为22字节的区分大小写格式。ElasticSearch也使用这种方法
结果值存储为char(22)。如果调用MySQL的
UUID()
,则会得到一个大致按时间顺序排列的变量。因此,如果需要引用“最近的”记录而忽略“旧的”记录,那么在UUID中重新排列位可以提供更好的“引用位置”(即更好的性能)
第4版不提供此类信息
您可以将UUID从庞大的36个字符字符串转换为更紧凑的16字节(Q1)BINARY(16)
by code(Q2))。该文件讨论了你问题的其他各个方面。(第三季度)
您提供的Percona链接提供了一些“证明”好处的基准
3M个UUID,每个UUID占用16字节=48MB。它体积庞大,但不太可能造成严重问题。尽管如此,我还是建议尽量避免使用UUID。如果调用MySQL的
UUID()
,您会得到一个大致按时间顺序排列的变体。因此,如果需要引用“最近的”记录而忽略“旧的”记录,那么在UUID中重新排列位可以提供更好的“引用位置”(即更好的性能)
第4版不提供此类信息
您可以将UUID从庞大的36个字符字符串转换为更紧凑的16字节(Q1)BINARY(16)
by code(Q2))。该文件讨论了你问题的其他各个方面。(第三季度)
您提供的Percona链接提供了一些“证明”好处的基准
3M个UUID,每个UUID占用16字节=48MB。它体积庞大,但不太可能造成严重问题。尽管如此,我还是建议尽可能避免UUID。问题1和2在链接博客文章的结论部分得到了回答。不知道你希望我们回答3个问题。问题1和2在链接博客文章的结论部分得到回答。不知道你希望我们回答什么3.谢谢你的回复;为了清楚起见,我想使用UUID()并使用UUID v1而不是v4。我想使用您为MariaDB提供的代码将其存储为二进制文件(16)(我假设它的工作原理与MySQL完全相同?)。当你说48MB时,你是说整个开销只增加了48MB的磁盘总容量?如果你选择的是“最近的”,这个评论是完美的“UUID也将很容易缓存。另一方面,如果您的选择经常触及旧的UUID,那么它们将是随机的,并且不会很好地缓存。尽管如此,改进插入将有助于整个系统。“这正是我对系统的预期!谢谢!3M*16=48MB;由于开销、索引等原因,实际值/实际更改可能会更多。即使是200MB,这是否重要?(我提到的“v4“是针对Boris和其他任何从MySQL以外的地方获取UUID的人。)嘿@rick james对不起,还有一个问题-我想在这个专栏上放置索引吗?谢谢,谢谢你的回复;为了清楚起见,我想使用UUID()并使用UUID v1而不是v4。我想使用您为MariaDB提供的代码将其存储为二进制文件(16)(我假设它的工作原理与MySQL完全相同?)。当你说48MB时,你是说整个开销只增加了48MB的磁盘总容量?如果你选择的是“最近的”,这个评论是完美的“UUID也将很容易缓存。另一方面,如果您的选择经常触及旧的UUID,那么它们将是随机的,并且不会很好地缓存。尽管如此,改进插入将有助于整个系统。“这正是我对系统的预期!谢谢!3M*16=48MB;由于开销、索引等原因,实际值/实际更改可能会更多。即使是200MB,这是否重要?(我提到的“v4“是针对Boris和其他任何从MySQL以外的地方获取UUID的人。)嘿@rick james对不起,还有一个问题-我想在这个专栏上放置索引吗?谢谢。谢谢你的帮助:)我想那是
CHAR(22)字符集ascii排序规则ascii_bin
谢谢你的帮助:)我想