当前位置: 首页 > 后端技术 > Node.js

UUIDVSID

时间:2023-04-03 22:51:56 Node.js

UUIDVSID标题内容UUID定义了UUID是什么,它的作用UUID定义UUID全称是通用唯一标识符(UniversallyUniqueIDentifier),是软件构建的标准,也是分布式计算环境领域开放软件基金会组织的一部分。UUID的作用是让分布式系统中的所有元素都拥有唯一的标识信息,而不需要通过中控端指定标识信息,类似于我们的身份证是表明我们唯一身份的标识。这样,每个人都可以创建不与其他人冲突的UUID。这样的话,在创建数据库的时候就不需要考虑重名的问题了。目前使用最广泛的UUID是微软的全球唯一标识符(GUIDGloballyUniqueIDentifier),其他重要应用包括Linuxext2/ext3文件系统、LUKS加密分区、GNOME、KDE、MacOSX等。UUID组合//Node-Eggjsconstuuidv1=require("uuid/v1");functiongenerateUUID(){//结果之一:"5d34f1f0c21711ec9a1717943883943e"returnuuidv1().replace(/-/g,"");}UUID是在一台机器上生成的数字,保证在同一时空的所有机器上都是唯一的。通常平台会提供生成的API。根据开放软件基金会(OSF)制定的标准计算,使用以太网卡地址、纳秒时间、芯片ID码和许多可能的数字UUI由以下部分组成:当前日期和时间,第一个UUID部分与时间有关,如果生成UUID后几秒生成UUID,则第一部分不同,其余部分相同。时钟序列。全球唯一的IEEE机器标识号。如果有网卡,则从网卡的MAC地址中获取。如果没有网卡,则通过其他方式获取。UUID唯一的缺点就是生成的结果字符串会比较长。标准的UUID格式为:XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXX(8-4-4-4-12(32位)),其中每个X为0-9或a-f范围内的十六进制数,可以下载CreateGUID()来自cflib的UDF内存转换。ColdFusion中的CreateUUID()函数可以轻松生成一个简单的UUID。格式为:XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXXXX(8-4-4-16)。到目前为止,业界有5种生成UUID的方法。IETF发布的UUID规范(AUniversallyUniqueIDentifier(UUID)URNNamespace)解释了为什么UUID主键可以成为主键(PrimaryKey)。事实上,在InnoDB存储引擎(Mysql)下,自增ID作为主键的性能已经达到了最佳。存储和读取速度最快,占用存储空间最小。但是在我们的实际项目中会出现问题。历史数据表的主键id会和数据表的id重复。两张id自增的表作为主键合并时,id肯定会冲突,但是如果各自的id还关联了其他表,操作起来就非常困难。如果使用UUID,生成的ID不仅是表无关的,也是库无关的。对以后的数据操作很有好处。可以说彻底解决了历史数据与新数据的冲突。这就是为什么可以选择UUID作为主键的原因,但是它也有缺点。作为主键vsID的缺点是影响插入(INSERT)的速度,并导致硬盘占用率低;UUID之间的比较比数字ID慢很多,影响查询速度;UUID占用空间大(一个是32字节),一般选择VARCHAR(36),如果建的索引多,影响会比较严重;作为主键VSID的优势非常明显,全局唯一,当需要数据拆分合并存储时,可以实现全局完整性唯一。以UUID为主键的InnoDB引擎表是基于B+树的索引组织表;B+树:B+树是为磁盘或其他直接访问辅助设备设计的平衡搜索树。在B+树中,所有的记录节点都按照key值的大小存放在同一层的叶子节点中,每个叶子节点的指针都是相连的。InnoDB主索引:叶子节点包含完整的数据记录。这种类型的索引称为聚焦索引。InnoDB的索引可以提供非常快速的主键查找性能。但是,它的二级索引也会包含主键列,所以如果主键定义得很大,其他索引也会很大。如果要在表上定义很多索引,尽量将主键定义得越小越好。InnoDB不压缩索引。聚焦索引的实现使得根据主键的查找非常高效,但是辅助索引需要查找两次索引:先查找辅助索引得到主键,然后使用主键检索索引中的记录主要指标。解决方案如果InnoDB表的数据写入顺序能够和B+树索引的叶子节点顺序保持一致,此时访问效率最高。为了存储和查询性能,应该使用自增ID作为主键。对于InnoDB的主索引,数据会按照主键进行排序。由于UUID的乱序,InnoDB会产生巨大的IO压力。这个时候不适合用UUID作为物理主键。它可以用作逻辑主键。添加ID。为了全局唯一性,UUID应该作为索引与其他表关联或作为外键。--ID继续为主键,UUID为外键CREATETABLE`system_roles`(`id`INT(11)NOTNULLAUTO_INCREMENTCOMMENT"序列号",`rid`VARCHAR(36)DEFAULTNULLCOMMENT"角色UUID",`name`VARCHAR(64)DEFAULTNULLCOMMENT"角色名称",`describe`VARCHAR(64)DEFAULTNULLCOMMENT"角色描述",`status`BOOLEANDEFAULTtrueCOMMENT"角色状态",`created_at`datetimeDEFAULTNULLCOMMENT'创建时间',`updated_at`datetimeDEFAULTNULLCOMMENT'更新时间',PRIMARYKEY(`id`),FOREIGNKEY(`rid`))ENGINE=InnoDBDEFAULTCHARSET=utf8;如果优化方式是主从或者M-S模式,最好不要使用mysql的内置函数UUID生成唯一主键,因为主表生成的UUID需要和从表关联,需要去数据库查UUID,需要再和数据库交互一次,而master表很可能在这个时间差里也有数据生成,所以很容易把关联的UUID弄错。如果你真的要使用UUID,你可以在服务器上生成它并直接存储在DB中。此时master和slave的UUID是一样的。思考在杰克丹https://cloud.tencent.com/dev...

最新推荐
猜你喜欢