当前位置: 首页 > news >正文

网上购物网站的设计与实现广州市数商云网络科技有限公司

网上购物网站的设计与实现,广州市数商云网络科技有限公司,上海网站排名seo公司,网站 手机版 电脑版 怎么做的UUID/GUID介绍、生成规则及生成代码 1. UUID介绍1.1 介绍1.2 UUID优势1.3 UUID劣势 2. UUID版本2.1 版本1 - 基于时间的UUID2.1.1优点2.1.2 缺点2.1.3 生成规则 2.2 版本2 - 分布式安全的UUID2.2.1 优点2.2.2 缺点2.2.3 生成规则 2.3 版本3 - 基于名字空间的UUID#xff08;MD… UUID/GUID介绍、生成规则及生成代码 1. UUID介绍1.1 介绍1.2 UUID优势1.3 UUID劣势 2. UUID版本2.1 版本1 - 基于时间的UUID2.1.1优点2.1.2 缺点2.1.3 生成规则 2.2 版本2 - 分布式安全的UUID2.2.1 优点2.2.2 缺点2.2.3 生成规则 2.3 版本3 - 基于名字空间的UUIDMD5版2.3.1 优点2.3.2 缺点2.3.3 生成规则 2.4 版本4 - 基于随机数的UUID2.4.1 优点2.4.2 缺点2.4.3 生成规则 2.5 版本5 - 基于名字空间的UUIDSHA1版2.5.1 优点2.5.2 缺点2.5.3 生成规则 3. UUID生成代码4. GUID介绍5. GUID 生成规则6. GUID 生成代码6.1 C#6.2 SQL server 1. UUID介绍 1.1 介绍 UUID全称为Universally Unique IDentifier通用唯一识别码UUID算法的目的是为了生成某种形式的全局唯一ID来标识系统中的任一元素尤其在分布式环境下该ID需要不依赖中心认证即可自动生成全局唯一ID。UUID是由一组32位数的16进制数字所构成故UUID理论上的总数为16322128约等于3.4 x 1038。也就是说若每纳秒ns产生1万亿个UUID要花100亿年才会将所有UUID用完。UUID的标准型式包含32个16进制数字以连字号分为五段形式为 8-4-4-4-12 的32个字符。示例 550e8400-e29b-41d4-a716-446655440000RFC 4122 为UUID 定义了统一资源名称URN名字空间。作为URN呈现的UUID如下 urn:uuid:123e4567-e89b-12d3-a456-426655440000 1.2 UUID优势 无需网络单机自行生成速度快QPS高支持100ns级并发各语言均有相应实现库供直接使用 1.3 UUID劣势 String存储占空间DB查询及索引效率低无序可读性差根据实现方式不同可能泄露信息 2. UUID版本 版本 1/2 适用于需要高度唯一性且无需重复的场景版本 3/5 适用于一定范围内唯一且需要或可能会重复生成UUID的环境下版本 4 适用于对唯一性要求不太严格且追求简单的场景。 2.1 版本1 - 基于时间的UUID 2.1.1优点 能基本保证全球唯一性 2.1.2 缺点 使用了Mac地址因此会暴露Mac地址和生成时间 2.1.3 生成规则 基于时间的UUID为例先梳理UUID的结构 UUID为32位的十六机制数因此实际上是16-byte (128-bit)各位分别为 时间值在基于时间的UUID中时间值是一个60位的整型值对应UTC的100ns时间间隔计数因此其支持支持一台机器每秒生成10M次。在UUID中将这60位放置到了15~08这8-byte中除了09位有4-bit的版本号内容。 版本号版本号即上文所说的五个版本在五个版本的UUID中都总是在该位置标识版本占据 4-bit分别以下列数字表示 因此版本号这一位的取值只会是1,2,3,4,5 变体值表明所依赖的标准X表示可以是任意值 时钟序列在基于时间的UUID中时钟序列占据了07~06位的14-bit。不同于时间值时钟序列实际上是表示一种逻辑序列用于标识事件发生的顺序。在此如果前一时钟序列已知则可以通过自增来实现时钟序列值的改变否则通过伪随机数来设置。主要用于避免因时间值向未来设置或节点值改变可能导致的UUID重复问题。 节点值在基于时间的UUID中节点值占据了05~00的48-bit由机器的MAC地址构成。如果机器有多个MAC地址则随机选其中一个如果机器没有MAC地址则采用伪随机数。 2.2 版本2 - 分布式安全的UUID 2.2.1 优点 能保证全球唯一性 2.2.2 缺点 很少使用常用库基本没有实现 2.2.3 生成规则 将基于时间的UUID版本1中时间戳前四位换为POSIX的UID或GID其余保持一致。 2.3 版本3 - 基于名字空间的UUIDMD5版 2.3.1 优点 不同名字空间或名字下的UUID是唯一的相同名字空间及名字下得到的UUID保持重复。 2.3.2 缺点 MD5碰撞问题只用于向后兼容后续不再使用 2.3.3 生成规则 将命名空间 (如DNS、URL、OID等) 及名字转换为字节序列 通过MD5散列算法将上述字节序列转换为16字节哈希值 (MD5散列不再推荐SHA1散列的20位只使用其15~00位) 将哈希值的 3~0 字节置于UUID的15~12位 将哈希值的 5~4 字节置于UUID的11~10位 将哈希值的 7~6 字节置于UUID的09~08位并用相应版本号覆盖第9位的高4位 (同版本1位置) 将哈希值的 8 字节置于UUID的07位并用相应变体值覆盖其高2位 (同版本1位置) 将哈希值的 9 字节置于UUID的06位 (原时钟序列位置) 将哈希值的 15~10 字节置于UUID的05~00位 (原节点值位置)。 2.4 版本4 - 基于随机数的UUID 2.4.1 优点 实现简单 2.4.2 缺点 重复几率可计算 2.4.3 生成规则 生成16byte随机值填充UUID。重复机率与随机数产生器的质量有关。若要避免重复率提高必须要使用基于密码学上的假随机数产生器来生成值才行 将变体值及版本号填到相应位置。 2.5 版本5 - 基于名字空间的UUIDSHA1版 2.5.1 优点 不同名字空间或名字下的UUID是唯一的相同名字空间及名字下得到的UUID保持重复。 2.5.2 缺点 SHA1计算相对耗时 2.5.3 生成规则 将命名空间 (如DNS、URL、OID等) 及名字转换为字节序列 通过SHA1散列算法将上述字节序列转换为16字节哈希值 (MD5散列不再推荐SHA1散列的20位只使用其15~00位) 将哈希值的 3~0 字节置于UUID的15~12位 将哈希值的 5~4 字节置于UUID的11~10位 将哈希值的 7~6 字节置于UUID的09~08位并用相应版本号覆盖第9位的高4位 (同版本1位置) 将哈希值的 8 字节置于UUID的07位并用相应变体值覆盖其高2位 (同版本1位置) 将哈希值的 9 字节置于UUID的06位 (原时钟序列位置) 将哈希值的 15~10 字节置于UUID的05~00位 (原节点值位置)。 3. UUID生成代码 go代码如下 package mainimport (fmtgithub.com/google/uuid )func UUIDv1() uuid.UUID {id, err : uuid.NewUUID()if err ! nil {panic(err)}return id }func UUIDv2G() uuid.UUID {id, err : uuid.NewDCEGroup()if err ! nil {panic(err)}return id }func UUIDv2P() uuid.UUID {id, err : uuid.NewDCEPerson()if err ! nil {panic(err)}return id }func UUIDv3(data []byte) uuid.UUID {id, err : uuid.NewDCEPerson()if err ! nil {panic(err)}return uuid.NewMD5(id, data) }func UUIDv4() uuid.UUID {return uuid.New() }func UUIDv5(data []byte) uuid.UUID {id, err : uuid.NewDCEPerson()if err ! nil {panic(err)}return uuid.NewSHA1(id, data) }func main() {fmt.Println(---------------UUIDv1---------------)for i : 0; i 5; i {fmt.Println(UUIDv1())}fmt.Println(---------------UUIDv2G--------------)for i : 0; i 5; i {fmt.Println(UUIDv2G())}fmt.Println(---------------UUIDv2P--------------)for i : 0; i 5; i {fmt.Println(UUIDv2P())}fmt.Println(---------------UUIDv3---------------)for i : 0; i 5; i {fmt.Println(UUIDv3([]byte(encrypted)))}fmt.Println(---------------UUIDv4---------------)for i : 0; i 5; i {fmt.Println(UUIDv4())}fmt.Println(---------------UUIDv5---------------)for i : 0; i 5; i {fmt.Println(UUIDv5([]byte(encrypted)))} } 4. GUID介绍 GUID有两种解释1.就是UUID 2.特指微软对UUID标准的实现可能是v4后文介绍。可以具体语境去辨析是哪个意思。 GUID就是UUID的依据可以参照以下 维基百科上直接把GUID进行了重定向到UUID页面。GUID也称为UUID是一个 16 字节的结构旨在用作对象的唯一标识符。此处引用微软官方文档。cxx 类型定义中也可以看到UUID和GUID等价。 typedef struct _GUID {unsigned long Data1;unsigned short Data2;unsigned short Data3;byte Data4[8];} GUID,UUID,*PGUID;5. GUID 生成规则 参考文章 作者采用如下C#代码进行测试 /// summary /// Simple script to check whether a C# Guid is really a UUID version 4. /// /summary class Program {static void Main(string[] args){Console.WriteLine(${Current,-10}{Errors found,-10});Console.WriteLine(${-------,-10}{------------,-10});var errorsFound 0;for (var i 0; i 10_000_000; i){var guid Guid.NewGuid();var uuidVersion guid.ToString().Substring(14, 1);var isVersion4 uuidVersion 4;if (!isVersion4){errorsFound 1;}Console.Write($\r{i, -10}{errorsFound, -10} );}Console.WriteLine();Console.ReadKey();} }结果显示 Current Errors found ------- ------------ 9999999 0猜测总归不是看了源码所以我们只能做出如下结论: GUID极可能是UUIDv4 6. GUID 生成代码 如果使用微软官方提供的API有两种方式获取GUID 6.1 C# 在C#中 微软专门提供了一个Guid结构 来帮助人们生成GUID命名空间为 System中 使用C#生成GUID的方法如下 使用如下方法生成 Guid.NewGuid() 如果要转换成为字符串使用则可以使用如下方法 Guid.NewGuid().ToString(string format) 其中 format 指示如何格式化GUID的格式 可以有不同的参数N,“D”,“P”,“B”,null,当选择null时使用默认的参数D 使用C#语言生成 如下 string guid1 Guid.NewGuid().ToString(N);string guid2 Guid.NewGuid().ToString(D);string guid3 Guid.NewGuid().ToString(P);string guid4 Guid.NewGuid().ToString(B);6.2 SQL server 比较运算符可与 uniqueidentifier 值一起使用。不过排序不是通过比较两个值的位模式来实现的。可针对 uniqueidentifier 值执行的运算只有比较运算、、、、、以及检查是否为 NULLIS NULL 和 IS NOT NULL。不能使用其他算术运算符。除 IDENTITY 之外的所有列约束和属性均可对 uniqueidentifier 数据类型使用。 具有更新订阅的合并复制和事务复制使用 uniqueidentifier 列来确保在表的多个副本中唯一地标识行。 sql server中 生成 GUID的时候 使用如下方法生成 -- Creating a local variable with DECLARE/SET syntax. DECLARE myid uniqueidentifier SET myid NEWID() PRINT Value of myid is: CONVERT(varchar(255), myid)输出结果为 Value of myid is: 9A09488E-7D1D-4995-9A7D-3AFB736CA3FE注意NEWID 对每台计算机返回的值各不相同。所显示的数字仅起解释说明的作用。 要想使用SQL server和C#中生成一样格式在C#中要使用默认的参数D才能使SQL server 和C#中的格式一致
http://www.hkea.cn/news/14503736/

相关文章:

  • 做网站去哪找gta5网站建设中什么意思
  • 网站建设哪家公司好一点网上建立网站
  • 浏览器禁止网站怎么做洪梅仿做网站
  • 电子商务网站建设合同标准范文网站必须做诚信认证吗
  • 广东购物网站建设哪家好计算机网站php设计代做
  • 网站换域名只做首页301学习做网站的
  • 特定网站开发自治区建设厅网站
  • 排名好的移动网站建设网站制作的一般过程
  • 服务器搭建网站域名配置企业网络搭建案例
  • 专业做网站建设设计众筹网站开发价格
  • 如何做网站里的子网站网页设计与制作第四版
  • 网站建设流程中哪些部分比较重要做再生料的网站
  • 房产网站建设价格网站诊断示例
  • 建设用地规划公示在哪个网站查做简历网站 知乎
  • 动漫网站源码自动采级网页计划书
  • 网站开发的各个阶段及其完成的任务关键词都有哪些
  • 深圳校园网站建设荆门建设局官方网站
  • 做淘客网站企业备案乐从狮山网站建设
  • asp网站和php网站桂林北站停车场收费标准
  • 网站管理系统 phpwordpress快速评论
  • 家教辅导培训网站建设wordpress上传完主题
  • 自学商城网站建设网站不备案能用吗
  • 成都网站建设公司湖南岚鸿crm销售
  • 一个最简单的产品展示的asp网站应该如何做刚刚突发1惊天大事
  • 网站建设 前沿文章网站建设与实现 文献综述
  • 色流网站如何做南京做网站公司 雷仁
  • 无锡高端网站建设公司装修风格有哪些
  • dede网站建设的个人总结家居东莞网站建设
  • 建站 网站程序有哪些长宁企业网站制作
  • 网站黑名单查询做单位网站的公司吗