linux UUID是啥?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux UUID是啥?相关的知识,希望对你有一定的参考价值。
UUID是设备唯一识别码,在挂载等的时候,是可以直接用UUID的,等同于相应的设备及设备编号 参考技术A UUID含义是通用唯一识别码,这是一个软件构建的标准,也是被开源软件基金会的组织应用在分布式计算环境领域的一部分。作用
UUID的目的是让分布式系统中的所有元素,都能有唯一的辨别资讯,而不需要通过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的UUID。在这样的情况下,就不需要考虑数据库建立时的名称重复问题。目前最广泛应用的UUID,即是微软的Microsoft's Globally Unique Identifiers,而其他重要的应用,则有Linux ext2/ext3档案系统、LUKS加密分割区、GNOME、KDE、Mac OS X等。
组成
UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。按照开放软件基金会制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。
UUID由以下几部分的组合
①当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
②时钟序列。
③全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。
UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID。在ColdFusion中可以用CreateUUID()函数很简单地生成UUID,其格式为:xxxxxxxx-xxxx- xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。而标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx (8-4-4-4-12),可以从cflib下载CreateGUID() UDF进行转换。
应用
使用UUID的好处在分布式的软件系统中就能体现出来,它能保证每个节点所生成的标识都不会重复,并且随着Web服务等整合技术的发展,UUID的优势将更加明显。根据使用的特定机制,UUID不仅需要保证是彼此不相同的,或者最少也是与公元3400年之前其他任何生成的通用唯一标识符有非常大的区别。
通用唯一标识符还可以用来指向大多数的可能的物体。微软和其他一些软件公司都倾向使用全球唯一标识符,这也是通用唯一标识符的一种类型,可用来指向组建对象模块对象和其他的软件组件。第一个通用唯一标识符是在网络计算机系统中创建,并且随后成为开放软件基金会的分布式计算环境的组件。
将Java生成的UUID存储到Oracle DB的有效方法是啥?删除或不删除 UUID 中的连字符是不是有用?
【中文标题】将Java生成的UUID存储到Oracle DB的有效方法是啥?删除或不删除 UUID 中的连字符是不是有用?【英文标题】:What is the efficient way to store UUID generated in Java to Oracle DB? Will removing or not removing hyphen in the UUID be any use?将Java生成的UUID存储到Oracle DB的有效方法是什么?删除或不删除 UUID 中的连字符是否有用? 【发布时间】:2012-11-16 14:49:11 【问题描述】:将Java生成的UUID存储到Oracle DB的有效方法是什么?删除或不删除 UUID 中的连字符是否有用 - 存储/性能?
将按原样存储07b319dc-7e64-4047-a3e3-63ab43864d81
或将07b319dc-7e64-4047-a3e3-63ab43864d81
存储为07b319dc7e644047a3e363ab43864d81
有什么不同吗?
【问题讨论】:
我认为将其存储为RAW(16)
在存储方面是最有效的,如果这就是“高效”对您的意义的话。
从/到字符串转换的错误增加了一个影响性能的额外步骤......了解用户究竟担心什么会有所帮助。
【参考方案1】:
删除连字符将为您在数据库中每行节省 4 个字符,这并不值得付出努力。 Oracle 不会因为这四个字符而显着变慢或变快。更糟糕的是,如果您想将值选择回 Java 应用程序并重新创建 java.util.UUID
对象,则需要在正确的位置重新插入连字符。
如果您想在数据库上节省一点内存,RAW(16)
(正如您的问题评论中提到的 vcsjones)将占用最小的空间。但是,如果要使用RAW
类型,则需要将UUID反汇编成byte[]
数组。这有点棘手,因为java.util.UUID
只返回一个String
表示或两个long
值。从byte[]
数组重新创建UUID
对象甚至更加棘手。
【讨论】:
同意,现在如果我将其存储为字符串;问题是它是否会对在该字段上创建的索引产生任何影响? 索引可能需要更多的存储空间,但在性能方面应该没有显着差异。此外,对于 UUID 的查询只有在WHERE
子句中的 =
才有意义,这对索引列非常有效。
请注意,我遇到过这样一种情况,即 Oracle 在更新具有约 250K 行的表时使用全表扫描,其 PK 是 UUID 存储为字符串,因为无法存储 PK 索引在内存中 => 可能在这种情况下,使用 RAW(16) 会显示出更好的性能。以上是关于linux UUID是啥?的主要内容,如果未能解决你的问题,请参考以下文章