Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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
Php UUID在MySQL中作为二进制存储_Php_Mysql_Database_Database Design - Fatal编程技术网

Php UUID在MySQL中作为二进制存储

Php UUID在MySQL中作为二进制存储,php,mysql,database,database-design,Php,Mysql,Database,Database Design,我想创建一个列(不是PK),其值表示为唯一标识符。它不用于加密或安全目的——严格地说是用于标识记录。每次插入新记录时,我都要生成并存储此唯一标识符。不确定这是否相关,但我现在有100万条记录,预计2年内会有300万条。我正在使用PHP中的web应用程序 我最初只是假设调用UUID()并将其直接存储为某种char数据类型,但我真的想做一些研究,学习一种更高效/优化的方法。我在这里找到了很多很好的文章,但是我对所有的文章都很难理解,因为很多文章都有点老,或者不同意最终让我感到非常困惑的方法。我想问问

我想创建一个列(不是PK),其值表示为唯一标识符。它不用于加密或安全目的——严格地说是用于标识记录。每次插入新记录时,我都要生成并存储此唯一标识符。不确定这是否相关,但我现在有100万条记录,预计2年内会有300万条。我正在使用PHP中的web应用程序

我最初只是假设调用UUID()并将其直接存储为某种char数据类型,但我真的想做一些研究,学习一种更高效/优化的方法。我在这里找到了很多很好的文章,但是我对所有的文章都很难理解,因为很多文章都有点老,或者不同意最终让我感到非常困惑的方法。我想问问是否有更聪明/更有经验的人能帮我一把

我看到人们在各种帖子上链接到这里,并建议以这种方式实施:

但是读了那篇文章后,我很难完全知道该做什么。有序UUID?我应该将其存储为什么?我想那一页可能有点让我不知所措。我想问是否有人能帮我澄清其中的一些问题。具体而言:

  • 我的列应该是什么数据类型来存储二进制数据(表示我的UUID)
  • 我应该使用什么函数将我的UUID转换为某个二进制值
  • 有人可以分享更多的进步或提示吗
    非常感谢

    我在最近的一个项目中使用了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
    谢谢你的帮助:)我想