热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

解析SQLServer的数据类型BLOB

本文解释了SQLServer用于访问和存储数据的BLOB数据类型,解析了SQLServerBLOB数据存储,访问的方法以及如果降低你的SQLServerBLOB存储的每个字节的总成本。BLOB数据是一个每条记录都拥有大量数据的字段。这个数据可以是文本格式的或

本文解释了 SQL Server 用于访问和存储 数据 的 BLOB 数据 类型 , 解析 了SQL Server BLOB 数据 存储,访问的方法以及如果降低你的SQL Server BLOB存储的每个字节的总成本。 BLOB 数据 是一个每条记录都拥有大量 数据 的字段。这个 数据 可以是文本格式的或

  本文解释了SQL Server用于访问和存储数据BLOB数据类型解析了SQL Server BLOB数据存储,访问的方法以及如果降低你的SQL Server BLOB存储的每个字节的总成本。

  BLOB数据是一个每条记录都拥有大量数据的字段。这个数据可以是文本格式的或二进制格式的。当在SQL Server中使用BLOB数据时,每条记录的数据量一般都远远超过了一个单独记录的8K的限制。

  有多种数据类型用于存储BLOB数据,并且它们随着时间已有所改变。可用于BLOB存储的数据类型很多年都没有变,但是在SQL Server 2005中,微软推出了许多新的数据类型。在SQL Server 2008中,微软甚至计划推出更多的数据类型,不过到目前为止,他们还没有在CTP版本中推出这些数据类型

  在SQL Server 2000和更早的版本中,我们被限制于TEXT、NTEXT和IMAGE数据类型。TEXT数据类型是用于存储非Unicode的BLOB数据,而NTEXT数据类型是用于存储Unicode 的BLOB数据。IMAGE数据类型是用于存储二进制BLOB数据的。你可以使用IMAGE数据类型来存储任何二进制数据,例如图片、office文档、压缩数据等等。因为数据是二进制格式的,所以它可以是Unicode的也可以是非Unicode的。

  SQL Server 2005数据类型是基于VARCHAR、NVARCHAR、VARBINARY和XML的。在使用这些数据类型时,一般你会指定要存储的数据的最大规模。为了在这些字段里存储BLOB数据,你要指定字段的最大规模。这些数据类型允许你在每条记录里最大存储2GB的数据(对于字符和二进制数据是2^31位,对于Unicode数据是2^30)。微软计划在未来的微软SQL Server版本中删除TEXT、NTEXT和IMAGE数据类型,它们的使用将会被转换到新的VARCHAR(MAX)、NVARCHAR(MAX)、VARBINARY(MAX)和XML数据类型上。

以下是引用片段:
CREATE TABLE BlobData
  (ID int PRIMARY KEY,
  FirstName nvarchar(30),
  LastName nvarchar(30),
  EmailAddress varchar(255),
  [Resume] nvarchar(MAX))

  在SQL Server 2008中,传说我们会得到一个叫做FILESTREAM的新的数据类型,它可以将二进制数据例如office文档存储到和普通的数据库文件不同的地方。通过将这个数据存储到和普通的MDF和NDF数据文件不同的地方,我们可以将它存储到单独的硬盘上来将访问BLOB数据数据库中其余内容造成的性能影响降到最低。

  SQL Server BLOB数据怎么存储和访问?

  在使用TEXT、NTEXT和IMAGE数据类型时,数据是不和普通数据存储在一起的。一个被称作指针的很小的二进制值,和普通数据存储在一起。这个二进制值指向数据文件里的数据实际存储的位置。

  当存储VARCHAR(MAX)、NVARCHAR(MAX)、VARBINARY(MAX)和XML数据类型数据时,如果数据小于一行数据8K的最大限制,那么这个数据被存储到这个页面内。但是如果这个数据比一行数据8K的最大限制大的话,它会以和存储遗留数据类型一样的存储方式来存储,并且它会通过一个二进制指针的值被访问。

  注意:这个二进制值和位置都是在后台处理的,对于用户是不可见的。

  为了以TEXT、NTEXT和IMAGE数据类型读取数据,需要使用READTEXT命令。这个命令接受一个列名还有一个16位的二进制指针,要读取的第一个字符和要读取的字符数目。它使用TEXTPTR函数来获得正确的二进制指针,这个二进制指针是用于定位物理文件中的数据的:

以下是引用片段:
DECLARE @ptr varbinary(16);
  SELECT @ptr = TEXTPTR(LongText)
  FROM TextDataExample
  where TextID = 1
  READTEXT TextDataExample.LongText @ptr 1 50;

  与READTEXT命令类似的,还有一个WRITETEXT命令用于将数据插入到记录中去。和READTEXT命令一样,WRITETEXT命令使用TEXTPTR函数来定位物理文件中的数据

以下是引用片段:
DECLARE @ptr varbinary(16);
  SELECT @ptr = TEXTPTR(LongText)
  FROM TextDataExample
  where TextID = 1
  READTEXT TextDataExample.LongText @ptr 'Sample data';

  这些新的数据类型,不像他们之前的那些数据类型,它们可以不使用READTEXT 和WRITETEXT命令就可以很容易的被访问到。这些新的数据类型能够这么快就这么流行的一部分原因是因为要使用他们不需要额外的命令。你可以用我们平常操纵数据所使用的普通的SELECT、INSERT和UPDATE DML来使用这些数据类型。不幸的是,因为这个FILESTREAM数据类型还没有发布,没有关于怎样使用它的示例代码可以公布。

  随着分层存储而出现的成本效率

  使用一个叫做分层存储的存储设计是一个降低你的SQL Server BLOB存储的每个字节的总成本的简单方法。有了分层存储技术,高访问的数据被放置在更快,更贵的存储器里。不是经常访问的数据放在慢一些、较便宜的存储器上。通常情况下,BLOB数据被频繁的访问,而由于存储在BLOB数据列中的信息数量,使用分层存储通常是成本最有效的存储方法。当创建一个较便宜的存储层时,更大的、较慢的硬盘被用来创建第二个RAID数组,而这个RAID数组是用来存放第二个文件组的,该文件组存储BLOB数据

  分层存储是通过告诉SQL Server在一个独立于行数据的文件组里存储BLOB数据来使用的。这个指派发生在CREATE TABLE命令使用TEXTIMAGE_ON参数创建了这个表的时候。一个SQL Server表里的所有BLOB数据存储在一个单独的文件组里。如果你想在两个文件间分离BLOB数据,你必须同时将你的表分割为两个表,并通过TEXTIMAGE_ON参数为每一个表指定一个不同的组:

以下是引用片段:
CREATE TABLE TextDataExample
  (TextID int IDENTITY(1,1),
  TextDescription varchar(25),
  LongText TEXT)
  ON [PRIMARY] TEXTIMAGE_ON [TextDataFileGroup]

推荐阅读
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
author-avatar
不必要有人假装很懂我_987
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有