首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

数据库模型设计——主键的设计

越短越好是为了查询的速度快,顺序增长是为了插入速度快。...还有一个原因是业务主键在数据录入的时候不一定是明确知道的,有时我们会在不知道业务主键的情况下,就录入其他相关信息,这个时候,如果使用业务主键做数据库的主键,那么数据将无法录入。...主键值的生成 主键值的生成可以参考NHibernate的配置,概况下来主要有这么几种生成方式: 自增,这是SQL Server常用的主键生成方式,完全由数据库管理主键的值。...GUID,这是用于GUID类型的主键,可以使用newid()这种数据库提供的函数,或者使用程序生成Guid并赋值。 Hilo值,这是一种使用高低位算法生成的数字值的主键。...该值由NHibernate程序内部生成。 其他程序赋值,完全由程序根据自己的算法生成并赋值。

92830

分布式系统唯一ID生成方案汇总

缺点: 1)没有排序,无法保证趋势递增。 2)UUID往往是使用字符串存储,查询的效率比较低。 3)存储空间比较大,如果是海量数据库,就需要考虑存储量的问题。 4)传输数据量大 5)不可读。 3....= Guid.NewGuid().ToByteArray(); return BitConverter.ToInt64(bytes, 0); } 2)为了解决UUID无序的问题,NHibernate...保留GUID的10个字节,用另6个字节表示GUID生成的时间(DateTime)。...其格式如下: ? 前4 个字节是从标准纪元开始的时间戳,单位为秒。时间戳,与随后的5 个字节组合起来,提供了秒级别的唯一性。由于时间戳在前,这意味着ObjectId 大致会按照插入的顺序排列。...stub char(1) NOT NULL default '', PRIMARY KEY (id), UNIQUE KEY stub (stub) ) ENGINE=MyISAM 当我们插入记录后,执行

1.4K60

一文搞定分布式系统ID生成方案

缺点: 1)没有排序,无法保证趋势递增。 2)UUID往往是使用字符串存储,查询的效率比较低。 3)存储空间比较大,如果是海量数据库,就需要考虑存储量的问题。 4)传输数据量大 5)不可读。 3....= Guid.NewGuid().ToByteArray(); return BitConverter.ToInt64(bytes, 0); } 2)为了解决UUID无序的问题,NHibernate...保留GUID的10个字节,用另6个字节表示GUID生成的时间(DateTime)。...Guid GenerateComb() { byte[] guidArray = Guid.NewGuid().ToByteArray(); DateTime baseDate =...其格式如下: ? 前4 个字节是从标准纪元开始的时间戳,单位为秒。时间戳,与随后的5 个字节组合起来,提供了秒级别的唯一性。由于时间戳在前,这意味着ObjectId 大致会按照插入的顺序排列。

41410

常见的分布式系统唯一ID生成方案都在这里了

缺点: 1)没有排序,无法保证趋势递增。 2)UUID往往是使用字符串存储,查询的效率比较低。 3)存储空间比较大,如果是海量数据库,就需要考虑存储量的问题。 4)传输数据量大 5)不可读。 3.... = Guid.NewGuid().ToByteArray();     return BitConverter.ToInt64(bytes, ); } 2)为了解决UUID无序的问题,NHibernate...保留GUID的10个字节,用另6个字节表示GUID生成的时间(DateTime)。... Guid GenerateComb() {     byte[] guidArray = Guid.NewGuid().ToByteArray();       DateTime baseDate =...其格式如下: 前4 个字节是从标准纪元开始的时间戳,单位为秒。时间戳,与随后的5 个字节组合起来,提供了秒级别的唯一性。由于时间戳在前,这意味着ObjectId 大致会按照插入的顺序排列。

40410

LINQ在开发中的地位?

在Linq之前在.net领域最流行的框架就是Nhibernate。是不是在LINQ之后Nhibernate就要消失呢?答案自然是否定的。...这里有个帖子Microsoft LINQ + NHibernate: 在那篇帖子中,作者列举了三大原因: 在DLINQ中,虽然可以在语言层级定义查询逻辑。...而DLINQ目前还无法拥有。 而LINQ + NHibernate的好处则是: 类型安全的查询,并且能使用智能提示功能!这样可以不用学习HQL了。 能获得所有NHibernate所拥有的能力。...假如你已经从数据库中查询出了一个数据集,那么可以使用LINQ来进行过滤,排序和分页操作。...从原理上来说,DLINQ是将Lambda查询表达式解析为SQL语句:DLINQ => SQL,而NHLINQ则是将Lambda查询表达式解析为HQL语句:NHLINQ => HQL。

1.4K60

C# 数据操作系列 - 11 NHibernate 配置和结构介绍

前言 今天是NHibernate的第二篇内容,通过上一篇的内容,我们初步了解了NHibernate的创建和使用。这一篇,我继续探索NHibernate背后的秘密。嗯,就是这样。 1....提供了一个通过主键检索对象和导航链接查询对象时的一级缓存。也就是EF Core中的导航属性。...dialect 数据库方言,表示NHibernate连接的数据库是什么,该用哪种格式解析关系映射到数据库SQL语句 default_schema 默认的schema,用来设置连接字符串连接的数据库默认的...max_fetch_depth 最大递归深度,表示一次查询中直接加载的导航属性深度。默认是不直接加载导航属性,基于延迟加载的逻辑,由实际使用时才从数据库中加载数据。...hbm2ddl.auto 该值表示每次ISessionFactory创建的时候,是否自动生成DDL语句并提交数据库执行。默认是空,表示不会强制更新数据库。

1.1K20

NHibernate VS IbatisNet

NHibernate对数据库结构提供了较为完整的封装,NHibernate的O/R Mapping实现了PO 和数据库表之间的映射,以及SQL 的自动生成和执行。...程序员甚至不需要对SQL 的熟练掌握,NHibernate 会根据制定的存储逻辑,自动生成对应的SQL 并调用ADO.NET接口加以执行。 ...也就是说,IbatisNet并不会为程序员在运行期自动生成SQL 执行。具体的SQL 需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定PO。...使用IbatisNet提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的DotNet对象,这一层与通过NHibernate实现ORM 而言基本一致,而对于具体的数据操作,NHibernate会自动生成...当系统属于二次开发 , 无法对数据库结构做到控制和修改 , 那 IbatisNet 的灵活性将比 NHibernate 更适合 4 .

71770

SQL Server字符串左匹配

使用左匹配的好处是可以使用到SQL Server中对该字段建立的索引,使得查询效率很高,但是不好的SQL语句仍然会导致索引无法使用。...假设我们现在有个表YCMRSALE,其中有个字段MATNR存储了料号信息,如果我们要从这个表中查询出以AB开头的料号,如果使用NHibernate,那么我们常用的写法有: //QueryOver的写法...但是如果用NHibernate就要麻烦点了,我们必须要判断用户输入的字符串里面是否有特殊转移符,如果有,那么就需要进行替换,而且C#查询语句也有所不同。...YCMRSALE s inner join matnr m on left(s.MATNR,len(m.matnr))=m.matnr 这个写法能够得到我们想要的结果,但是由于对MATNR列使用了函数,所以无法使用索引...,所以查询速度很慢。

67810

单例模式与全局唯一id的思考----c++ ,c ,python 实现

更严重的问题是,这个实例的析构操作什么时候执行? 如果在类的析构行为中有必须的操作,比如关闭文件,释放外部资源,那么上面所示的代码无法实现这个要求。我们需要一种方法,正常地删除该实例。...或者说把删除自己的操作挂在系统中的某个合适的点上,使其在恰当的时候自动被执行。 我们知道,程序在结束的时候,系统会自动析构所有的全局变量。...缺点: 1)没有排序,无法保证趋势递增。 2)UUID往往是使用字符串存储,查询的效率比较低。 3)存储空间比较大,如果是海量数据库,就需要考虑存储量的问题。...保留GUID的10个字节,用另6个字节表示GUID生成的时间(DateTime)。...其格式如下: 前4 个字节是从标准纪元开始的时间戳,单位为秒。时间戳,与随后的5 个字节组合起来,提供了秒级别的唯一性。由于时间戳在前,这意味着ObjectId 大致会按照插入的顺序排列。

74520

分布式ID

缺点: 1)没有排序,无法保证趋势递增。 2)UUID往往是使用字符串存储,查询的效率比较低。 3)存储空间比较大,如果是海量数据库,就需要考虑存储量的问题。 4)传输数据量大 5)不可读。 3....Guid.NewGuid().ToByteArray(); return BitConverter.ToInt64(bytes, 0); } 2)为了解决UUID无序的问题,NHibernate...保留GUID的10个字节,用另6个字节表示GUID生成的时间(DateTime)。...Guid GenerateComb() { byte[] guidArray = Guid.NewGuid().ToByteArray(); DateTime baseDate = new...其格式如下: ? 前4 个字节是从标准纪元开始的时间戳,单位为秒。时间戳,与随后的5 个字节组合起来,提供了秒级别的唯一性。由于时间戳在前,这意味着ObjectId 大致会按照插入的顺序排列。

46650

C# 基础知识系列-13 常见类库(三)

Guid并不是C#独有的,所以可以放心使用,不用担心跟其他系统交互时遇到对方无法别的尴尬局面。...继续介绍第二个构造方法,通过格式化的字符串创建: public Guid (string g); g表示Guid数据,有以下几种格式: dddddddddddddddddddddddddddddddd...1.3 Guid与字符串之间一个转身 根据Guid构造函数可以看到Guid的打印格式应该有三种,那么如何生成这三种呢?C#还有没有更多的格式支持呢?...static Guid ParseExact (string input, string format); 第一个方法由C#自动解析字符串格式,第二种由调用方明确指出字符串的格式。...在C#中struct无法置为NULL,一般情况下并不影响程序的运行。但是,如果涉及到交互,无论是与人还是与其他的系统交互,都会出现数据不可用的情况。

1.5K40

初探领域驱动设计(2)Repository在DDD中的应用

我的答案是肯定的,这个和我们为Repository建立接口是一样的,EF中的IDbSet就是一个Repository模式,但是他们都是EF里面的东西,如果哪天我们换成NHibernate了,我们不可能为了这一个接口和基类把...Jeffery说在传统的多层架构中,上层对下层有着较强的依懒关系,UI没了BLL就没法工作,BLL少了DAL也无法正常运行。当然他说这句话的时候是08年,并且他的确是在前面加了“传统” 两个字。 ...毕竟我们现在只需要用到查询的功能。我们可以单独建一个IQuery的接口给领域层使用。...因为是IQueryable,所以也是只会返回我们所查询的内容,和直接用EF查询是一个道理。下面是我们_userQuery.Table.Any()所生成的SQL语句。...我们就可以知道Repository在应用层已经可以被替换成别的东西,IDAL也可以啊:)。当然有人也许会建议直接拿EF来用多好,其实我不建议这样去做,考虑到以后把EF换掉的可能性。

1.3K60

使用 Power Shell 修改 Hyper-V 虚拟机 UUID 的解决方案

GRUB 配置,未果 终于,皇天不负有心人,在我不停迭代搜索词后,还是让我找到了一篇看得懂行得通的博客 PowerShell修改Hyper-V虚拟机的UUID 尝试了文章引用的国外大佬的工具,发现已经无法运行...通过查询验证可行性,修改名称为自己的虚拟机名,使用 PowerSheel(管理员) 执行命令即可查询到 Get-VM "devops04" | % { (gwmi -Namespace root\virtualization...重要,尝试了两次,确认需要在虚拟机关闭的时候执行才有用 执行命令 修改虚拟机名称变量:devops04 为你的虚拟机名称 然后直接粘贴下面命令到 PowerShell 终端执行即可 也可以存为.ps1...$CurrentSettingsData.BIOSGUID #生成新GUID $GUID = [System.Guid]::NewGuid() #重新写入GUID,注意要带{},这是非常重要的细节 $...,再次查询uuid也已经更新 开机启动使用命令查询Linux发现已经变更,因为UUID的表示形式是不区分大小写的,因此大小写字母的顺序不会影响其唯一性。

34610

SQL反模式学习笔记22 伪键洁癖,整理数据

使用Select Max(Id) + 1 这种查询语句,会出现并发访问的问题。   2、为现有数据行重新编号:通常做法是找到主键最大的行,然后用最小的未被使用的值来更新它。     ...缺点:(1)SQL语句比较麻烦;        (2)必须同时更新所有引用了你重新分配了主键的行的子记录;        (3)无法避免产生新的断档。   ...3、制造数据差异     如果别的外部系统依赖于数据库中的主键来定义数据,那么你的更新操作就会导致那个系统中的引用失效。     ...缺点:(1)Guid的值太长,不方便输入;        (2)Guid的值是随机的,因此找不到任何规则或者依靠最大值来判断哪一行的最新插入的;        (3)Guid的存储需要16字节,这比传统的...4自检整形伪键占用更多的控件,并且查询的速度更慢 结论:将伪键当做行的唯一性标识,但它们不是行号。

73930
领券