加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

使用SQL Server 2014内存数据库时需要注意的问题

发布时间:2016-01-12 10:29:58 所属栏目:MsSql教程 来源:网络整理
导读:本文从产品设计和架构角度分享了Microsoft内存数据库方面的使用经验,希望你在阅读本文之后能够了解这些新的对象、概念,从而更好地设计你的架构。 内存数据库
本文从产品设计和架构角度分享了Microsoft内存数据库方面的使用经验,希望你在阅读本文之后能够了解这些新的对象、概念,从而更好地设计你的架构。

内存数据库,指的是将数据库的数据放在内存中直接操作。相对于存放在磁盘上,内存的数据读写速度要高出很多,故可以提高应用的性能。微软的SQL Server 2014已于2014年4月1日正式发布,SQL 2014一个主要的功能即为内存数据库。

下面,我将着重介绍使用SQL Server 2014内存数据库时需要注意的地方。

关于内存数据库

SQL Server 2014内存数据库针对传统的表和存储过程引入了新的结构: memory optimized table(内存优化表)和native stored procedure(本地编译存储过程)。

默认情况下Memory optimized table是完全持久的(即为durable memory optimized table),如传统的基于磁盘的表上的事务一样,并且完全持久的事务也是支持原子、一致、隔离和持久 (ACID) 的。所不同的是内存优化表的整个表的主存储是在内存中,即为从内存读取表中的行,和更新这些行数据到内存中。 并非像是传统基于磁盘的表按照数据库数据库页面装载数据库。内存优化表的数据同时还在磁盘上维护着另一个副本,但仅用于持续性目的。 在数据库恢复期间,内存优化的表中的数据再次从磁盘装载。 创建持久的内存优化表方法如下:

CREATE TABLE DurableTbl
(AccountNo     INT	    NOT NULL  PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 28713)
,CustName      VARCHAR(20)  NOT NULL
,Gender        CHAR         NOT NULL   /* M or F */
,CustGroup     VARCHAR(4)   NOT NULL   /* which customer group he/she belongs to */
,Addr          VARCHAR(50)  NULL       /* No address supplied is acceptable */
,Phone         VARCHAR(10)  NULL       /* Phone number */
)
WITH (MEMORY_OPTIMIZED=ON, DURABILITY=SCHEMA_AND_DATA)

除了默认持久的内存优化表之外,还支持non-durable memory optimized table(非持久化内存优化表),不记录这些表的日志且不在磁盘上保存它们的数据。 这意味着这些表上的事务不需要任何磁盘 IO,但如果服务器崩溃或进行故障转移,则无法恢复数据。创建非持久化内存优化表方法如下:

CREATE TABLE NonDurableTbl
(AccountNo     INT	    NOT NULL  PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 28713)
,CustName      VARCHAR(20)  NOT NULL
,Gender        CHAR         NOT NULL   /* M or F */
,CustGroup     VARCHAR(4)   NOT NULL   /* which customer group he/she belongs to */
,Addr          VARCHAR(50)  NULL       /* No address supplied is acceptable */
,Phone         VARCHAR(10)  NULL       /* Phone number */
)
WITH (MEMORY_OPTIMIZED=ON, DURABILITY=SCHEMA_ONLY)

Native compiled stored procedure(本地编译存储过程)是针对传统的存储过程而言的,是本机编译存储过程后生成DLL,由于本机编译是指将编程构造转换为本机代码的过程,这些代码由处理器指令组成,无需进一步编译或解释。与传统TSQL 相比,本机编译可提高访问数据的速度和执行查询的效率。故通过本机编译的存储过程,可在存储过程中提高查询和业务逻辑处理的效率。创建方法本地编译存储过程方法如下:

CREATE PROCEDURE dbo.usp_InsertNonDurableTbl
@AccountNo int,
@CustName nvarchar(20),
@Gender	char(1),
@CustGroup	varchar(4),
@Addr	varchar(50),
@Phone	varchar(10)
WITH NATIVE_COMPILATION, SCHEMABINDING, EXECUTE AS OWNER
AS
BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'English')      
BEGIN
	INSERT INTO [dbo].[DurableTbl]
           ([AccountNo]
           ,[CustName]
           ,[Gender]
           ,[CustGroup]
           ,[Addr]
           ,[Phone])
     VALUES (@AccountNo
           ,@CustName
           ,@Gender 
           ,@CustGroup 
           ,@Addr
           ,@Phone)
END
END
GO

内存数据库既可以包含内存优化表和本地编译存储过程,又可以包含基于磁盘的表和传统存储过程,各个对象之间数据存储、和访问的架构如下所示:

使用SQL Server 2014内存数据库时需要注意的问题

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读