【发布时间】:2021-07-29 22:16:49
【问题描述】:
为 UUID 数组创建唯一标识符的最佳方法是什么?
我有一个由多个组件组成的产品,每个组件都有一个分配给它的 UUID。
在使用其组件创建新产品时,我需要知道是否已经有另一个产品具有完全相同的组件。我认为通过 MySQL,加载每个产品及其组件并一一检查它们会很耗时。
这是我的想法:
products table
--------------
id, name, components_uuid_hash
product_components table
------------------------
product_id, component_id, ...
components table
----------------
id, uuid, name, ...
我会计算components_uuid_hash:
$product_component_uuids = ['227A0140-F0FB-4FDA-B780-85152AB02927', 'FA0E6D52-F0E4-4F55-87F5-8D73625AEDA3'];
sort($product_component_uuids);
$component_uuid_hash = md5(serialize($product_component_uuids));
我会为每个产品执行此操作,为我提供整个 UUID 数组的唯一哈希,我可以简单地在 Products table 中查找,以了解是否已经存在具有相同哈希的不同产品。
有人可以确认这是否可行,或者是否有其他更好的方法?
【问题讨论】:
-
它会工作 :) 您也可以在单个查询中执行此操作(即无需在 PHP 端加载所有内容),但它无法使用索引(它需要表之间的完整连接并进行完整扫描)。
-
可能不需要使用序列化,因为它添加了无关数据。 md5(implode(",",$product_component_uuids)) 应该也可以工作
-
@obe 谢谢,我只是有点害怕在
sort()函数上进行中继,但使用 UUID 应该不是问题。我忘了提到,我需要对照现有产品检查的那些组件 UUID 也来自 XML 中的第 3 方软件,并且有超过 15k 的产品,每个产品有 50 个组件,我希望最大限度地降低查询的复杂性。保存散列并索引列应该足够快。 -
@DobromirVelev 你是对的,我实际上是在考虑用逗号分隔 UUID,但由于某种原因,将它从数组中序列化感觉更合适哈哈,尽管它没有多大意义这里