开发者社区> 华章计算机> 正文

《大数据原理:复杂信息的准备、共享和分析》一一2.3 注册唯一对象标识符

简介: 本节书摘来自华章出版社《大数据原理:复杂信息的准备、共享和分析》一 书中的第2章,第2.3节,作者:[美] 朱尔斯 J. 伯曼(Jules J. Berman)著 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
+关注继续查看

2.3 注册唯一对象标识符
唯一性是每个人都能完全理解的概念,似乎没有解释的必要。实际上,计算科学所指的唯一性与自然世界的唯一性有些不同。在计算科学中,唯一性是指一个数据对象与一个唯一的标识符一一对应(即一个数据对象的标识符不会被分配给任何其他数据对象)。我们大部分人会把数据对象看作是一种数据记录,它可以由一个包含一串特征值的人名(包括身高、体重、年龄等)或包含一些实验数据的血液样本(包括白细胞数、红细胞数、红细胞压积等)组成。对于计算机科学家来说,一个数据对象意味着数据价值得以保值,数据描述清晰、完整,数据属性不变。当数据对象与其标识符永久绑定时,数据对象的唯一性就可以实现。
唯一性对象有三个属性:
1.唯一性对象可以从其他唯一性数据对象中区分开来。
2.唯一性对象无法从其自身中区分开来。
3.唯一性适用于唯一性对象集合(例如,属于同一类的实例是唯一的)。
注册表是一种可信任的服务,它为对象提供唯一的标识符。注册即每个数据对象用户都使用由中央注册中心提供的标识符,唯一的对象注册表很有用处,尤其是在数据对象标识符永久不变的情况下。拥有一个中央权威的网址列表、图书采购记录和期刊摘要文本信息是非常有意义的。下面列出一些发布标识符的组织:

在有些情况下,注册表无法为数据对象提供完整的标识符,而是向资源内的全部数据对象提供一个通用的标识符序列,而资源内的各数据对象会额外添加本地给出的后缀序列。作为典型案例,生命科学标识符(LSID)尤其能说明这种情况。每个LSID由五部分组成:网络标识符、机构标识符(顶级的DNS域名)、对象标识符、命名空间标识符和可选的修订ID。
在已发布的LSID标识符中,各个组成部分由冒号分隔开,如urn:lsid: pdb.org: 1AFT:1,这个标识1AFT蛋白在蛋白质数据库的第一个版本。其他LSID如:

标识一个PubMed的引用。

标识基因库中一个条目的第二个版本。
对象标识符(OID)是标识符前缀的层次结构。前缀中连续数确定层次结构的递减顺序。以HL7的OID为例,它是处理健康数据交换协议的一个组织,记为:1.3.6.1.4.250。
这些连串数据的每个节点由一个点分隔开。注册序列信息够细致的话,可直接得到机构代码。在本例中,HL7 OID正好是密歇根大学。
为数据对象创建OID的最后一步是在注册前缀的末端配置唯一的标识号。这一步由数据管理者完成。这种方法的问题是,数据管理者配置的标识号有时过于轻率,会破坏OID系统25。
举个例子,医院使用OID系统来识别图像―它是医学数字成像和通信标准(Digital Imaging and Communications in Medicine,DICOM)的一部分。前缀由永久性的机构和部门的注册码组成,后缀由创建图像时产生的数字码组成。例如,由计算机断层摄影(CT)扫描仪产生的第一幅图像可以用OID标识符和连字号以及数字1标识。
最坏的情况是,不同的仪器可能会分别给图像分配一串数字,而仪器间相互独立。这意味着在房间A中创建的CT图像标识符与房间B中创建的CT图像标识符可能相同,而房间A与房间B的图像来自不同的病人。这个问题可以通过限制每个CT扫描仪使用任何其他CT扫描仪数字分配补救。但这种方法也可能因为任何一个影响数字分配的系统出现故障而产生问题(例如,计数器被复位、损坏、更换或者简单地被忽略)。
当图像计数能正确完成时,扫描仪也被限制分配唯一编号,那么每个图像就会被分配到唯一的标识符(OID前缀+图像编号后缀)。尽管如此,随着时间的推移,使用连续编码的图像可能会造成标识符混乱。当图像服务更多部门,或者部门合并,又或者机构合并时,OID前缀会发生变化;这时,在使用连续编号系统时,你可能希望在OID前缀因合并发生变化后,可以创建标识符副本。这样,合并的两个机构的原始记录就可以被分配到相同的前缀,而后缀保持不变(如图像1、图像2等)。
另一个可能出现的问题是一个对象有多个不同的唯一标识符。一个软件程序在设计时可能会忽略对象先前已被指定的唯一标识符,而使用自身的分配方法生成新的标识符。此种做法向软件厂商提供了一种策略,即与其竞争软件给出的较差的标识符分隔开来,并潜在地提高客户对其软件产品的粘连度。
OID系统为机构提供了一套优秀的标识符,但机构内的数据对象需要有自己的标识系统。例如,OID有一个对HL7的陈述:“虽然HL7应当在给第三方HL7分支分配OID前进行仔细调查,但鉴于全球OID注册机制的缺乏,不能绝对肯定先前没有为第三方实体的HL7赋OID值26。”
有时,想从中央注册中心获得唯一标识符是不可行的。这主要发生在那些暂时的事务标识上,如临床实验室的血液样本的追踪代码。
网络工作小组发布了一个通用唯一标识符(UUID,也称为GUID;见术语表,UUID),不需要中央注册中心。一个UUID字长为128位,存储字节来自计算机时间戳的60位字符串27。如果使用得当,UUID将提供空间和时间上的唯一性。UUID最初用于阿波罗网络计算系统,此后被用于开源软件基金会的分布式计算环境。包括Perl、Python、Ruby等在内的众多计算语言已经内置生成UUID的程序19。
如果一个标识系统采用长随机数序列,再加上时间戳,将具有很大优势。假设你的系统由20个字符长的随机数序列和时间戳组成,则时间戳使用所谓的UNIX时间,这是自1970年1月1日零点开始已过的秒数。例如,1342883791发生在2012年7月21日那天。
使用一个随机字符生成器和一个时间测量仪可以生成唯一标识符,大多数程序语言已嵌入这两种程序。例如,标识符mje03jdf8ctsSdkTEWfk-1342883791。
随机序列里的字符可以是大小写、罗马数字或任何标准键盘字符,这些总计约有128个字符,也即所谓的ASCII字符(见术语表,ASCII)。两个20个字符长的随机序列完全一样的概率是128的-20次方。如果给这个随机序列附加一个时间戳,那么两个序列完全等价时相当于这两个序列有相同的随机数前缀,并且标识符是在同一时间创建的(见术语表,Time stamp)。
使用长的、包含时间戳的随机序列的标识符分配系统,完全不用担心两个不同的数据对象会被分配到相同的标识符。
假设一个场景,你正利用的大数据资源每秒产生万亿个标识符,在这些万亿的数据对象中,也许就有一天出现了重复的标识符。当然,也可能不会出现,但这是数据管理者必须考虑的一个问题,这里有一个解决方案。让我们设想大数据资源拥有分配每秒万亿标识符的能力,数据管理者保留每秒产生的新标识符列表。由于创建了新标识符,需要检查这个列表以保证新的标识符不与列表中的其他标识符重复。在存在副本的情况下(虽然几乎不可能发生),系统会停止产生标识符零点几秒,在这个时间间隔内,系统建立新的时间序列,标识符的冲突问题完成了自我消化。
假设正在合并两个大数据资源,如果在两个资源中存在标识符副本,你会怎么做?当然,标识符冲突的几率小到完全有理由忽略其发生的可能性。忠于观测事实的数据管理者会选择在合并之前比较标识符,一旦发现标识符副本的存在,有必要采取注释手段说明情况。
从技术角度来说,创建一个唯一性的标识系统是完全可行的。读者应该铭记,唯一性是一个设计良好的标识系统的基本要求。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
IDA反汇编/反编译静态分析iOS模拟器程序(四)反汇编的符号信息与改名
首先看看windows IDA和xcode的反汇编有什么不同。因为不确定直接分析UIKit的代码会不会有法律问题,还是自己写个例子吧。分析UIKit的时候因为没有完整的debugging symbols,所以得到的反汇编信息会比自己写的代码较少。
934 0
《大数据原理:复杂信息的准备、共享和分析》一一2.2 标识符系统的特征
本节书摘来自华章出版社《大数据原理:复杂信息的准备、共享和分析》一 书中的第2章,第2.2节,作者:[美] 朱尔斯 J. 伯曼(Jules J. Berman)著 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
930 0
Python零基础学习笔记(五)—— 标识符
简单的说就是一串字符串(但字符串未必是标识符) 规则: 只能由子母/数字/下划线组成 开头不能是数字 不能是关键字['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'conti...
1502 0
PgSQL · 应用案例 · 经营、销售分析系统DB设计之共享充电宝
背景 共享充电宝、共享单车、共享雨伞,共享女朋友^|^,共享汽车,。。。 共享经济最近几年发展确实非常迅猛。 共享必定涉及被共享对象的管理、会员的管理等,实际上也属于一种物联网系统。 本文以共享充电宝的场景为例,分享一下共享充电宝的经营分析、销售管理系统的后台数据库的设计。(老板关心的是整体销售的业绩,以及各个渠道的透视等。销售经理关心的是他管辖片区的销售业绩,运维人员关心的是设备的状态。)
1497 0
MySQL---数据库从入门走向大神系列(十)-Connection对象池、装饰模式与动态代理模式
问题概述: 之前本系列博客写的,全部都是一个connection对象,不知道大家发现没有,我们既然做了一个Connection工具类,那么大家肯定都是从那里面拿Connection对象的,之前的如果是多线程运行,很容易出问题的,你想想事务处理就知道了,同时用事务处理操作同一个Connection,肯定会出问题的。
906 0
一款消息队列的客户端框架——启明信息车联网MQ演进实践分享
一款消息队列的客户端框架——启明信息车联网MQ演进实践分享 分享人:阿里云MVP曾宪宇,2014开始 就职于启明信息,负责车联网平台的架构和建设,坐标吉林长春。 分享内容:结合主流MQ,介绍一款基于Java的开源消息队列客户端框架。
2422 0
用字符串连接SQL语句并用EXEC执行时,出现名称 '‘不是有效的标识符
原文:用字符串连接SQL语句并用EXEC执行时,出现名称 '‘不是有效的标识符  用字符串连接SQL语句并用EXEC执行时,出现名称 '这里是字符串连接的一条SQL语句‘不是有效的标识符  才发现,在写exec @sql 时,忘了在@sql加(),这样写 exec (@sql) 就不会出错了!
626 0
10059
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载