有序GUID】的更多相关文章

背景 常见的一种数据库设计是使用连续的整数为做主键,当新的数据插入到数据库时,由数据库自动生成.但这种设计不一定适合所有场景. 随着越来越多的使用Nhibernate.EntityFramework等ORM(对象关系映射)框架,应用程序被设计成为工作单元(Unit Of Work)模式,需要在数据持久化之前生成主键,为了保证在多线程并发以及站点集群环境中主键的唯一性,最简单最常见的方式是将主键设计成为GUID类型. 工作单元是数据库应用程序经常使用的一种设计模式,简单一点来说,就是对多个数据库操…
 背景 前段时间学习<Microsoft SQL Server 2008技术内幕:T-SQL查询>时,看到里面关于无序GUID作为主键与聚集索引的建议,无序GUID作为主键以及作为聚集索引所带来的问题包括: 空间的浪费以及由此带来的读写效率的下降. 更主要的,存储的碎片化(fragmentation)以及由此带来的读写效率严重下降. 所以,尽量避免用GUID(无序或有序)做主键,不要用无序GUID做聚集索引.<摘自博友博客> 想到在工作中存在一个视图转成物理表的时候使用到了此种场景…
背景 常见的一种数据库设计是使用连续的整数为做主键,当新的数据插入到数据库时,由数据库自动生成.但这种设计不一定适合所有场景. 随着越来越多的使用Nhibernate.EntityFramework等ORM(对象关系映射)框架,应用程序被设计成为工作单元(Unit Of Work)模式,需要在数据持久化之前生成主键,为了保证在多线程并发以及站点集群环境中主键的唯一性,最简单最常见的方式是将主键设计成为GUID类型. 工作单元是数据库应用程序经常使用的一种设计模式,简单一点来说,就是对多个数据库操…
原文出处:https://www.codeproject.com/articles/388157/guids-as-fast-primary-keys-under-multiple-database ,避免今后忘记了再去阅读原英文.[]是感觉理解有问题的地方 正确的使用有序GUID在大部分数据库中可以获得和 整型作为主键 时相媲美的性能. 介绍 这篇文章概述了一种方法去规避 当使用GUID作为主键/聚焦索引时一些常见的弊端,借鉴了 Jimmy Nilsson 的文章 GUID作为主键的成本 .尽…
一.背景 常见的一种数据库设计是使用连续的整数为做主键,当新的数据插入到数据库时,由数据库自动生成.但这种设计不一定适合所有场景. 随着越来越多的使用Nhibernate.EntityFramework等ORM(对象关系映射)框架,应用程序被设计成为工作单元(Unit Of Work)模式,需要在数据持久化之前生成主键,为了保证在多线程并发以及站点集群环境中主键的唯一性,最简单最常见的方式是将主键设计成为GUID类型. (工作单元:是数据库应用程序经常使用的一种设计模式,简单一点来说,就是对多个…
 背景 前段时间学习<Microsoft SQL Server 2008技术内幕:T-SQL查询>时,看到里面关于无序GUID作为主键与聚集索引的建议,无序GUID作为主键以及作为聚集索引所带来的问题包括: 空间的浪费以及由此带来的读写效率的下降. 更主要的,存储的碎片化(fragmentation)以及由此带来的读写效率严重下降. 所以,尽量避免用GUID(无序或有序)做主键,不要用无序GUID做聚集索引.<摘自博友博客> 想到在工作中存在一个视图转成物理表的时候使用到了此种场景…
GUID作为数据库主键由于其无序性所以性能不怎么好,SQL Server中有个函数NewSequentialId可以生成有序的GUID,由于在程序中需要用到,就用C#实现了一下,生成的GUID格式基本和SQL Server一致. 程序代码参考了rpcrt4.dll中UuidCreateSequential的实现. public class GuidHelper { private static bool initialised; private static int count; private…
问题描述 有序的GUID性能对比,堪比自增ID integer 一个大神告诉我NEWSEQUENTIALID() 在数据迁移的时候会有问题(感谢大神指点),所以我就深挖一下这个函数. 关于NEWSEQUENTIALID() 的用法 参照  NEWSEQUENTIALID() NEWSEQUENTIALID 是对 Windows UuidCreateSequential 函数的包装. https://msdn.microsoft.com/zh-cn/library/ms189786(v=sql.1…
sqlserver中GUID的默认值设置 YID uniqueidentifier not null default (NEWSEQUENTIALID()), //有序GUID(只能用于表设计的时候的默认值,不能用于赋值) YID uniqueidentifier not null default (NEWID()), //无序GUID…
去年做了一个产品,会经常导入导出大量的外部数据,这些数据的ID有的是GUID类型,有的是字符串,也有的是自增.GUID类型没有顺序,结果要排序得借助其它业务字段,整体查询效率比较低:字符串ID本来是用来转换GUID的或者数字ID的,结果有些字符串ID不符合规范,常常有特殊数据需要处理:自增主键ID的数据导入合并经常有冲突. 为了避免GUID主键的“索引页分裂”问题,提高查询效率,同时为了解决分布式环境下的数据导入合并问题,强烈需要一种分布式的,有序的ID生成方案.我参考了雪花ID(Twitter…
我们在设计数据库表的时候,往往为了方便,主键ID一般采用字符串类型或者GUID类型,这样对于数据库表记录的迁移非常方便,而且有时候可以在处理关联记录的时候,提前对应的ID值.但有时候进行数据记录插入的时候,往往忽略了对ID的赋值处理.为了便于使用或者允许自动赋值,我们可以在数据访问基类中对GUID主键进行自动赋值处理. 1.实体类主键属性的处理 在我们设计基于SqlSugar的框架的时候,实体类定义一个基类Entity<T>,如下代码所示. [Serializable] public abst…
1 前言 1.1 这篇文章面向的读者 本文不会过多解释 Guid 是什么,以及顺序 Guid 的作用,需要读者自行具备: 知道 Guid,并且清楚其作用与优势 清楚 Guid.NetGuid() 产生的 Guid 是混乱无序的,想要一种产生顺序 Guid 的算法来保证数据库的高效运行 1.2 连续 Guid 的原理 Guid 形如: 08da7241-170b-c8ef-a094-06224a651c6a 该 Guid 有16字节(byte)共128位(bit),可以包含时间戳,而顺序 Guid…
前言 今天我会把自己平日整理的工具库给开放出来,提供给有需要的朋友,如果有朋友平常也在积累欢迎提意见,我会乐意采纳并补充完整.按照惯例在文章结尾给出地址^_^. 之前我开放其他源码的时候(Framework.MongoDB.AutoBuildEntity),都有引用我的Framework工具库,但是为什么现在才开放出来呢原因有几点: 相对简单平常收集的朋友应该有很多 真想要可以去我开源代码反编译 之前遇到的奇葩事 遇到了个什么奇葩事呢,<.net平台的MongoDB使用>在我写的这篇文章最后一…
信息收录项目 版权声明:本文为博主初学经验,未经博主允许不得转载. 一.前言 记录在学习与制作WPF过程中遇到的解决方案.  需求文案.设计思路.简要数据库结构.简要流程图和明细代码,动图细化每步操作,入门级引导文章: 项目功能包括:登录.首页.数据维护 和 全文搜索等增删查改的常用操作: 二.配置 系统环境:win10 开发工具:Visual Studio 2017 开发语言:C#.WPF (MVVM框架) 数据库:SQLiteStudio 三.附件 vs_enterprise.exe   在…
vs 打印信息到输出窗口 : System.Diagnostics.Debug.WriteLine("打印信息到输出窗口,但是只能在Debug版本运行,到了release版本中,Debug类的函数都会被忽略"); System.Diagnostics.Trace.WriteLine("打印信息到输出窗口,可以同时在Debug和release版本运行"); 1.在mvc或者api中 ,从一个控制器调用另外一个控制器,可以使用   new V2Controller()…
[转].NET(C#):浅谈程序集清单资源和RESX资源   目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceManager解析二进制资源文件 小看RESX资源文件的Designer.cs文件 返回目录 程序集清单资源 在程序集中嵌入资源的最简单方法是什么?那就是使用Visual Studio中的“嵌入式资源(Embedded Resource)”创建选项,相当于使用csc的”/resource”参数.具体步…
JavaScript生成有序GUID或者UUID,这时就想到了雪花算法. 原理介绍: snowFlake算法最终生成ID的结果为一个64bit大小的整数,结构如下图: 解释: 1bit.二进制中最高位为1表示负数,但是我们最终生成的ID一般都是整数,所以这个最高位固定为0. 41bit.用于记录时间戳(毫秒) 41bit可以表示241-1个数字 如果只用来表示正整数(计算机中正数包含0),可以表示的数值范围是0到241-1,减1是因为可表示的数值范围从0开始计算,而不是1. 即41bit可以表示…
前言 .net 环境近些年也算是稳步发展.在开发的过程中,与数据库打交道是必不可少的.早期的开发者都是DbHelper一撸到底,到现在的各种各样的ORM框架大行其道.孰优孰劣谁也说不清楚,文无第一武无第二说的就是这个理.没有什么最好的,只有最适合你的. 本人也是从DbHelper开始,期间用过SugarSql,再到EFCODE.本着学习分享的初衷分享本人工作中总结的一些小技巧,希望能帮助更多开发者,期望能达到共同进步.文中若有错误地方,欢迎大家不吝赐教. 1. DbContext配置 在asp.…
public static Guid GenerateGuid() { byte[] guidArray = Guid.NewGuid().ToByteArray(); , , ); DateTime now = DateTime.Now; var days = new TimeSpan(now.Ticks - baseDate.Ticks); TimeSpan msecs = now.TimeOfDay; byte[] daysArray = BitConverter.GetBytes(day…
1.glob模块 glob模块是最简单的模块之一,内容非常少.用它可以查找符合特定规则的文件路径名.跟使用windows下的文件搜索差不多.查找文件只用到三个匹配符:”*”, “?”, “[]”.”*”匹配0个或多个字符:”?”匹配单个字符: ”[]”匹配指定范围内的字符,如:[0-9]匹配数字. glob.glob 返回所有匹配的文件路径列表.它只有一个参数pathname,定义了文件路径匹配规则,这里可以是绝对路径,也可以是相对路径.下面是使用glob.glob的例子: 例子1: 结果: 例…
UniqueIdentifier 数据类型用于存储GUID的值,占用16Byte. SQL Server将UniqueIdentifier存储为16字节的二进制数值,Binary(16),按照特定的格式显示,显示的格式是:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,其中,x是16进制数字,数值范围是从0-9,A-F.由于每个字节存储2个16进制数据,因此,按照存储字节,UniqueIdentifier的格式简写为:4B-2B-2B-2B-6B.使用GUID的好处是:…
I recently read a blog post on what was better using GUIDs or Integer values. This is been an age long debate and there are advocates in both camps stressing on the disadvantages of the other. Well both implementations have their advantages and disad…
聚簇索引(又名聚集索引) 不可作用于GUID类型字段,即:数据库中不要把GUID类型作为主键或设置为聚集索引. 聚集索引:索引的物理存储顺序与数据表中行数据物理存储顺序一致(索引存储物理有序). 非聚集索引:索引的物理存储顺序与数据表中行数据物理存储顺序不一致. 优势与缺点 聚集索引:插入数据时速度要慢(时间花费在“物理存储的排序”上,也就是首先要找到位置然后插入),查询数据比非聚集数据的速度快. GUID(全局唯一标识符)是随机生成的. 一种机制:索引填充因子:聚集索引为了保持和数据存储顺序一…
试想这样一个业务需求:有一张合同表,由于合同涉及内容比较多所以此表比较庞大,大概有120多个字段.现在合同每一次变更时都需要对合同原始信息进行归档一次,版本号依次递增.那么我们就要新建一张合同历史表,字段跟原合同表一模一样,此外多了一个 合同版本号 字段.在归档时如何把原始合同信息插入到合同历史表呢? 很容易就能想到的一种解决方法: insert into 合同历史表(字段1,字段2,字段3…………字段120,版本号) select   字段1,字段2,字段3…………字段120,0 as 版本号…
在一个分布式环境中,我们习惯使用GUID做主键,来保证全局唯一,然后,GUID做主键真的合适吗? 其实GUID做主键本身没有问题,微软的很多项目自带DB都是使用GUID做主键的,显然,这样做是没有问题的.然而,SQL Server默认会将主键设置为聚集索引,使用GUID做聚集索引就有问题了.很多时候程序员容易接受SQL Server这一默认设置,但无序GUID做聚集索引显然是低效的. 那么,我们在项目中如何避免这一问题呢? 主要的思路还是两方面——方案一,选择合适的列作为聚集索引:方案二,使用有…
背景 主键(Primary Key),用于唯一标识表中的每一条数据.所以,一个合格的主键的最基本要求应该是唯一性. 那怎么保证唯一呢?相信绝大部分开发者在刚入行的时候选择的都是数据库的自增id,因为这是一种非常简单的方式,数据库里配置下就行了.但自增主键优缺点都很明显. 优点如下: 无需编码,数据库自动生成,速度快,按序存放. 数字格式,占用空间小. 缺点如下: 有数量限制.存在用完的风险. 导入旧数据时,可能会存在id重复,或id被重置的问题. 分库分表场景处理过于麻烦. GUID GUID,…
参考:https://msdn.microsoft.com/en-us/library/97af8hh4.aspx 测试代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace GuidToString { class Program { static void Main(string[] args) { Console.WriteLine(" -->…
通过前两章Lodging和Destination类的演示,大家肯定基本了解Code First是怎么玩的了,本章继续演示一些很实用的东西.文章的开头提示下:提供的demo为了后面演示效果,前面代码有些是注释了的,请按照文章讲解的顺序先后释放注释并运行查看效果. I.EF里Guid类型数据的自增长 现在新添加一个Trip旅行类: /// <summary> /// 旅行类 /// </summary> public class Trip { public Guid Identifie…
先来看看数据库表中的字段设计: 在数据库的数据类型为uniqueidentifier. 而在程序中对应的数据类型为GUID. property有get和set,也就是说能获取值也可以赋值.…
本文版权归博客园和作者吴双本人共同所有,博客园蜗牛NoSql系列分享 http://www.cnblogs.com/tdws/tag/NoSql/ Sorted Set 有序集合—Sorted Set是我最后要分享的一种Redis数据类型,有序集合在集合的基础上,为每一个元素,关联了一个分数的概念(Score).不要忘了,集合中元素是唯一的,但是有序集合中的Score是可以相同的. 下面通过命令的介绍,来帮助大家认识有序集合. 添加命令,ZADD  key score member score…