SQLSERVER2014的内存优化表
SQL Server 2014中的内存引擎(代号为Hekaton)将OLTP提升到了新的高度。
现在,存储引擎已整合进当前的数据库管理系统,而使用先进内存技术来支持大规模OLTP工作负载。
就算如此,要利用此新功能,数据库必须包含“内存优化”文件组和表
即所配置的文件组和表使用Hekaton技术。
幸运的是,SQL Server 2014使这一过程变得非常简单直接。
要说明其工作原理,我们来创建一个名为TestHekaton的数据库,然后添加一个内存优化文件组到此数据库
测试环境:Microsoft Azure 大陆版 虚拟机
4核 ,7G内存,Windows2012R2
SQLSERVER2014企业版

实验
第一个实验:内存表的简单使用
步骤1:创建数据库和MEMORY_OPTIMIZED_DATA文件组
USE master; GO CREATE DATABASE TestHekaton; GO ALTER DATABASE TestHekaton ADD FILEGROUP HekatonFG CONTAINS MEMORY_OPTIMIZED_DATA; GO

注意ALTER DATABASE语句中的ADD FILEGROUP 语句包含文件组的名称(HekatonFG)和关键字CONTAINS MEMORY_OPTIMIZED_DATA
它会指导SQL Server去创建支持内存OLTP引擎所必需的文件组类型。
注意:每个数据库只能有一个MEMORY_OPTIMIZED_DATA文件组!!
要确认此文件组已经创建,可以访问SSMS中数据库属性的Filegroups 界面,如下图所示。


步骤2:
添加一个数据文件到文件组,可以通过ALTER DATABASE语句来实现。
添加一个新数据文件到HekatonFG文件组:
ALTER DATABASE TestHekaton ADD FILE
(
NAME = 'HekatonFile',
FILENAME ='C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\HekatonFile'
) TO FILEGROUP [HekatonFG];
GO
注意:在ADD FILE 语句中,我们只为文件路径和文件名提供了一个友好的名称。
并且,在TO FILEGROUP 语句中,为新文件组指定名称。
然后可以去往数据库属性的 Files 界面来查看刚刚添加的文件,如图所示。


步骤3:
在为数据库设置了必需的文件组和文件之后,就可以创建自己的内存优化表了。
当在定义表的时候,会指定其“持久性”。
一个内存优化表可以是持久的或非持久的。
(1)对于一个持久表是将数据存储在内存中,而且也保存在内存优化文件组中。
(2)对于一个非持久表,数据是仅存储在内存中的,所以,如果系统崩溃或重启,数据就会丢失。
在SQL Server 2014中默认用的是持久表,接下来我们来深入了解一下。
当定义一个持久内存优化表的时候,你还必须定义一个基于非聚集哈希索引的主键。
在一个哈希索引中,数据是通过一个内存散列表进行访问的,而非固定大小页。
哈希索引是在内存优化表中唯一支持的索引类型。
除了在表定义中定义主键外,还必须将表配置为内存优化的,如下CREATE TABLE 语句所示:
USE TestHekaton;
GO CREATE TABLE Reseller
(
[ResellerID] INT NOT NULL
PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 1024),
[ResellerName] NVARCHAR(50) NOT NULL ,
[ResellerType] NVARCHAR(20) NOT NULL
)
WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA); INSERT INTO Reseller
VALUES ( 1, 'A Bike Store', 'Value Added Reseller' );
ResellerID 字段定义包含了定义为非聚集哈希的主键。
注意,必须包含一个WITH 语句来指定BUCKET_COUNT 的设置,它表明了在哈希索引中应该创建的bucket数量。
(每个bucket是一个槽,可以用来存放一组键值对。)
微软建议bucket的数量应是一到两倍于你所期望的表所要包含的唯一索引键的数量。
此表定义以第二个WITH 语句结束。
这里你指定MEMORY_OPTIMIZED 选项为ON 以及DURABILITY 选项为SCHEMA_AND_DATA,此选项是针对持久表的。
接着在表中插入一条记录,这样就可以进行测试了。
数据已经插入到表中

这就是创建一个内存优化表的全部步骤,其他的一切都会发生在幕后。
但是,要记住,SQL Server 2014对这些表有着很多限制。例如,它们不支持外键或约束检查(感觉类似于MYSQL的memory存储引擎),
它们也不支持IDENTITY 字段或DML触发器。最为重要的是,内存耗尽会导致写活动停止。
步骤4:
另一方面,内存优化表支持本地编译存储过程,只要那些存储过程只引用内存优化表。
在这种情况下,存储过程可以转化为本地代码,这样会执行更快且要比典型存储过程需要更少的内存。
除了只引用内存优化表,一个本地编译存储过程必须是模式绑定的并运行在一个特定执行内容内。
另外,每个本地编译存储过程必须完全由一个原子块组成。
下面的CREATE PROCEDURE 语句定义了一个本地编译存储过程,它从前例中所创建的Reseller表中检索数据
CREATE PROCEDURE GetResellerType ( @id INT )
WITH NATIVE_COMPILATION,
SCHEMABINDING,
EXECUTE AS OWNER
AS
BEGIN
ATOMIC WITH(TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = 'us_english')
SELECT ResellerName ,
ResellerType
FROM dbo.Reseller
WHERE ResellerID = @id
END;
GO
在定义了参数之后,包含一个WITH 语句来指定NATIVE_COMPILATION 选项。
注意:此语句还包含SCHEMABINDING 选项和EXECUTE AS 选项,以及指定了OWNER 作为执行环境。
而WITH 语句负责实现本地编译存储过程的三大需求。
要解决原子块需求,可以在BEGIN 关键字后指定ATOMIC ,之后是另一个包含有事务隔离级别和语言的WITH 语句。
对于访问内存优化表的事务,可以使用SNAPSHOT,REPEATABLEREAD 或SERIALIZABLE 作为隔离级。
而且,对于此语言必须使用一个可用的语言或语言别名。
这是在定义存储过程时所需要包含的全部内容。一旦创建,就可以通过执行EXECUTE 语句来对其加以测试,如下例中所示:
EXEC GetResellerType 1;
此语句会返回经销商的姓名和类型,在本例中分别是ABike Store和Value Added Reseller。

第一个实验:内存表的数据查询速度比较
聚集索引表和内存优化表的比较
建表语句
USE TestHekaton;
GO --内存优化表
CREATE TABLE testmemory1
(
[ID] FLOAT NOT NULL
PRIMARY KEY NONCLUSTERED HASH WITH (BUCKET_COUNT = 1024),
[Name] NVARCHAR(50) NOT NULL
)
WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);
USE TestHekaton;
GO --聚集索引表
CREATE TABLE testmemory2
(
[ID] FLOAT NOT NULL PRIMARY KEY,
[Name] NVARCHAR(50) NOT NULL
)
---------------------------------------------------------------
插入性能比较
内存优化表
SET STATISTICS IO ON
SET STATISTICS TIME ON
INSERT into testmemory1([id],[name]) SELECT [id] ,[name] from sysobjects
SET STATISTICS IO OFF
SET STATISTICS TIME OFF
Table 'sysschobjs'. Scan count 1, logical reads 33, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 20 ms.
(90 row(s) affected)
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.

聚集索引表
SET STATISTICS IO ON
SET STATISTICS TIME ON
INSERT into testmemory2([id],[name]) SELECT [id] ,[name] from sysobjects
SET STATISTICS IO OFF
SET STATISTICS TIME OFF
Table 'testmemory2'. Scan count 0, logical reads 183, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'sysschobjs'. Scan count 1, logical reads 33, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 10 ms.
(90 row(s) affected)
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.

-------------------------------------------------------------------------------
查询性能比较
内存优化表
SET STATISTICS IO ON
SET STATISTICS TIME ON
SELECT * FROM testmemory1 ORDER BY [ID] DESC
SET STATISTICS IO ON
SET STATISTICS TIME ON
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 1 ms.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
(90 row(s) affected)
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.

聚集索引表
SET STATISTICS IO ON
SET STATISTICS TIME ON
SELECT * FROM testmemory2 ORDER BY [ID] DESC
SET STATISTICS IO ON
SET STATISTICS TIME ON
(91 row(s) affected)
Table 'testmemory2'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 0 ms.

可以看到内存优化表读写数据(insert 、select)的时候都看不到IO读写
补充测试:
我们先删除刚才插入的数据,内存优化表是不支持truncate table的,只能用delete from 表

只能够delete

插入测试
内存优化表

聚集索引表

-------------------------------------------------------------------------------------------------
查询测试
内存优化表

聚集索引表

我们看一下事务日志
CHECKPOINT
GO SELECT Context ,
Operation,
AllocUnitName
FROM sys.fn_dblog(NULL, NULL)
| Context | Operation | AllocUnitName |
| LCX_NULL | LOP_HK | NULL |
| LCX_NULL | LOP_HK_CHAINED | NULL |
| LCX_NULL | LOP_HK | NULL |
| LCX_NULL | LOP_HK_CHAINED | NULL |
| LCX_NULL | LOP_HK_CHECKPOINT | NULL |
| LCX_NULL | LOP_HK | NULL |
| LCX_NULL | LOP_BEGIN_XACT | NULL |
| LCX_NULL | LOP_FS_DOWNLEVEL_OP | NULL |
| LCX_NULL | LOP_BEGIN_XACT | NULL |
| LCX_CLUSTERED | LOP_INSERT_ROWS | sys.filestream_tombstone_2073058421.FSTSClusIdx |
| LCX_INDEX_LEAF | LOP_INSERT_ROWS | sys.filestream_tombstone_2073058421.FSTSNCIdx |
| LCX_NULL | LOP_COMMIT_XACT | NULL |
| LCX_MARK_AS_GHOST | LOP_DELETE_ROWS | sys.filestream_tombstone_2073058421.FSTSClusIdx |
| LCX_MARK_AS_GHOST | LOP_DELETE_ROWS | sys.filestream_tombstone_2073058421.FSTSNCIdx |
| LCX_NULL | LOP_HK | NULL |
| LCX_NULL | LOP_FS_DOWNLEVEL_OP | NULL |
| LCX_HEAP | LOP_INSERT_ROWS | sys.xtp_storage |
| LCX_INDEX_LEAF | LOP_INSERT_ROWS | sys.xtp_storage.UQ__xtp_stor__3213E83EA8737D06 |
| LCX_CLUSTERED | LOP_EXPUNGE_ROWS | sys.filestream_tombstone_2073058421.FSTSClusIdx |
| LCX_CLUSTERED | LOP_EXPUNGE_ROWS | sys.filestream_tombstone_2073058421.FSTSClusIdx |
| LCX_PFS | LOP_SET_BITS | sys.filestream_tombstone_2073058421.FSTSClusIdx |
| LCX_INDEX_LEAF | LOP_EXPUNGE_ROWS | sys.filestream_tombstone_2073058421.FSTSNCIdx |
| LCX_INDEX_LEAF | LOP_EXPUNGE_ROWS | sys.filestream_tombstone_2073058421.FSTSNCIdx |
| LCX_NULL | LOP_COMMIT_XACT | NULL |
| LCX_NULL | LOP_BEGIN_XACT | NULL |
| LCX_NULL | LOP_FS_DOWNLEVEL_OP | NULL |
| LCX_NULL | LOP_BEGIN_XACT | NULL |
| LCX_CLUSTERED | LOP_INSERT_ROWS | sys.filestream_tombstone_2073058421.FSTSClusIdx |
| LCX_INDEX_LEAF | LOP_INSERT_ROWS | sys.filestream_tombstone_2073058421.FSTSNCIdx |
| LCX_NULL | LOP_COMMIT_XACT | NULL |
| LCX_MARK_AS_GHOST | LOP_DELETE_ROWS | sys.filestream_tombstone_2073058421.FSTSClusIdx |
| LCX_PFS | LOP_SET_BITS | sys.filestream_tombstone_2073058421.FSTSClusIdx |
| LCX_MARK_AS_GHOST | LOP_DELETE_ROWS | sys.filestream_tombstone_2073058421.FSTSNCIdx |
| LCX_NULL | LOP_FS_DOWNLEVEL_OP | NULL |
| LCX_HEAP | LOP_INSERT_ROWS | sys.xtp_storage |
| LCX_INDEX_LEAF | LOP_INSERT_ROWS | sys.xtp_storage.UQ__xtp_stor__3213E83EA8737D06 |
| LCX_NULL | LOP_COMMIT_XACT | NULL |
| LCX_NULL | LOP_HK | NULL |
| LCX_CLUSTERED | LOP_EXPUNGE_ROWS | sys.filestream_tombstone_2073058421.FSTSClusIdx |
| LCX_INDEX_LEAF | LOP_EXPUNGE_ROWS | sys.filestream_tombstone_2073058421.FSTSNCIdx |
| LCX_PFS | LOP_SET_BITS | sys.filestream_tombstone_2073058421.FSTSClusIdx |
| LCX_PFS | LOP_SET_BITS | sys.filestream_tombstone_2073058421.FSTSNCIdx |
| LCX_CLUSTERED | LOP_COUNT_DELTA | sys.sysallocunits.clust |
| LCX_CLUSTERED | LOP_COUNT_DELTA | sys.sysrowsets.clust |
| LCX_CLUSTERED | LOP_COUNT_DELTA | sys.sysrscols.clst |
| LCX_CLUSTERED | LOP_COUNT_DELTA | sys.sysrscols.clst |
| LCX_CLUSTERED | LOP_COUNT_DELTA | sys.sysrscols.clst |
| LCX_CLUSTERED | LOP_COUNT_DELTA | sys.sysrscols.clst |
| LCX_CLUSTERED | LOP_COUNT_DELTA | sys.sysrscols.clst |
| LCX_CLUSTERED | LOP_COUNT_DELTA | sys.sysrscols.clst |
| LCX_CLUSTERED | LOP_COUNT_DELTA | sys.sysrscols.clst |
| LCX_CLUSTERED | LOP_COUNT_DELTA | sys.sysrscols.clst |
| LCX_CLUSTERED | LOP_COUNT_DELTA | sys.sysrscols.clst |
| LCX_CLUSTERED | LOP_COUNT_DELTA | sys.sysrscols.clst |
| LCX_CLUSTERED | LOP_COUNT_DELTA | sys.sysallocunits.clust |
| LCX_CLUSTERED | LOP_COUNT_DELTA | sys.sysrowsets.clust |
| LCX_CLUSTERED | LOP_COUNT_DELTA | sys.sysallocunits.clust |
| LCX_CLUSTERED | LOP_COUNT_DELTA | sys.sysrowsets.clust |
| LCX_CLUSTERED | LOP_COUNT_DELTA | sys.sysrscols.clst |
| LCX_CLUSTERED | LOP_COUNT_DELTA | sys.sysrscols.clst |
| LCX_CLUSTERED | LOP_COUNT_DELTA | sys.sysrscols.clst |
| LCX_CLUSTERED | LOP_COUNT_DELTA | sys.sysallocunits.clust |
| LCX_CLUSTERED | LOP_COUNT_DELTA | sys.sysrowsets.clust |
| LCX_NULL | LOP_BEGIN_CKPT | NULL |
| LCX_FILE_HEADER | LOP_MODIFY_STREAMFILE_HDR | NULL |
| LCX_BOOT_PAGE_CKPT | LOP_XACT_CKPT | NULL |
| LCX_NULL | LOP_END_CKPT | NULL |
| LCX_NULL | LOP_HK | NULL |
| LCX_NULL | LOP_HK | NULL |
| LCX_NULL | LOP_HK | NULL |
| LCX_NULL | LOP_HK_CHAINED | NULL |
| LCX_NULL | LOP_HK | NULL |
| LCX_NULL | LOP_HK | NULL |
| LCX_NULL | LOP_BEGIN_XACT | NULL |
| LCX_NULL | LOP_FS_DOWNLEVEL_OP | NULL |
| LCX_NULL | LOP_BEGIN_XACT | NULL |
| LCX_CLUSTERED | LOP_INSERT_ROWS | sys.filestream_tombstone_2073058421.FSTSClusIdx |
| LCX_INDEX_LEAF | LOP_INSERT_ROWS | sys.filestream_tombstone_2073058421.FSTSNCIdx |
| LCX_NULL | LOP_COMMIT_XACT | NULL |
| LCX_MARK_AS_GHOST | LOP_DELETE_ROWS | sys.filestream_tombstone_2073058421.FSTSClusIdx |
| LCX_PFS | LOP_SET_BITS | sys.filestream_tombstone_2073058421.FSTSClusIdx |
| LCX_MARK_AS_GHOST | LOP_DELETE_ROWS | sys.filestream_tombstone_2073058421.FSTSNCIdx |
| LCX_PFS | LOP_SET_BITS | sys.filestream_tombstone_2073058421.FSTSNCIdx |
| LCX_NULL | LOP_HK_CHAINED | NULL |
| LCX_NULL | LOP_HK_CHAINED | NULL |
| LCX_NULL | LOP_HK_CHECKPOINT | NULL |
| LCX_NULL | LOP_FS_DOWNLEVEL_OP | NULL |
| LCX_HEAP | LOP_INSERT_ROWS | sys.xtp_storage |
| LCX_INDEX_LEAF | LOP_INSERT_ROWS | sys.xtp_storage.UQ__xtp_stor__3213E83EA8737D06 |
| LCX_NULL | LOP_COMMIT_XACT | NULL |
| LCX_NULL | LOP_BEGIN_XACT | NULL |
| LCX_NULL | LOP_FS_DOWNLEVEL_OP | NULL |
| LCX_NULL | LOP_BEGIN_XACT | NULL |
| LCX_CLUSTERED | LOP_INSERT_ROWS | sys.filestream_tombstone_2073058421.FSTSClusIdx |
| LCX_INDEX_LEAF | LOP_INSERT_ROWS | sys.filestream_tombstone_2073058421.FSTSNCIdx |
| LCX_NULL | LOP_COMMIT_XACT | NULL |
| LCX_MARK_AS_GHOST | LOP_DELETE_ROWS | sys.filestream_tombstone_2073058421.FSTSClusIdx |
| LCX_MARK_AS_GHOST | LOP_DELETE_ROWS | sys.filestream_tombstone_2073058421.FSTSNCIdx |
| LCX_NULL | LOP_FS_DOWNLEVEL_OP | NULL |
| LCX_HEAP | LOP_INSERT_ROWS | sys.xtp_storage |
| LCX_INDEX_LEAF | LOP_INSERT_ROWS | sys.xtp_storage.UQ__xtp_stor__3213E83EA8737D06 |
| LCX_NULL | LOP_COMMIT_XACT | NULL |
| LCX_NULL | LOP_HK | NULL |
| LCX_CLUSTERED | LOP_EXPUNGE_ROWS | sys.filestream_tombstone_2073058421.FSTSClusIdx |
| LCX_CLUSTERED | LOP_EXPUNGE_ROWS | sys.filestream_tombstone_2073058421.FSTSClusIdx |
| LCX_INDEX_LEAF | LOP_EXPUNGE_ROWS | sys.filestream_tombstone_2073058421.FSTSNCIdx |
| LCX_INDEX_LEAF | LOP_EXPUNGE_ROWS | sys.filestream_tombstone_2073058421.FSTSNCIdx |
| LCX_PFS | LOP_SET_BITS | sys.filestream_tombstone_2073058421.FSTSClusIdx |
| LCX_PFS | LOP_SET_BITS | sys.filestream_tombstone_2073058421.FSTSNCIdx |
| LCX_PFS | LOP_MODIFY_HEADER | Unknown Alloc Unit |
总结
内存优化表也会写事务日志的,在读写操作的时候发现内存优化表没有I/O次数,应该是数据都已经在内存里了
更多详细资料可以参考:
SQLSERVER2014的内存优化表的更多相关文章
- 试试SQLSERVER2014的内存优化表
试试SQLSERVER2014的内存优化表 SQL Server 2014中的内存引擎(代号为Hekaton)将OLTP提升到了新的高度. 现在,存储引擎已整合进当前的数据库管理系统,而使用先进内存技 ...
- SQLServer 2014 内存优化表
内存优化表是 SQLServer 2014 的新功能,它是可以将表放在内存中,这会明显提升DML性能.关于内存优化表,更多可参考两位大侠的文章:SQL Server 2014新特性探秘(1)-内存数据 ...
- SQLServer2014内存优化表评测
SQLServer2014内存优化表评测 分类: SQL内存表2014-06-20 11:49 1619人阅读 评论(11) 收藏 举报 目录(?)[-] SQLServer2014的使用基本要求 内 ...
- 试试SQLServer 2014的内存优化表
SQL Server2014存储引擎:行存储引擎,列存储引擎,内存引擎 SQL Server 2014中的内存引擎(代号为Hekaton)将OLTP提升到了新的高度. 现在,存储引擎已整合进当前的数据 ...
- 试试SQLServer 2014的内存优化表(转载)
SQL Server2014存储引擎:行存储引擎,列存储引擎,内存引擎 SQL Server 2014中的内存引擎(代号为Hekaton)将OLTP提升到了新的高度. 现在,存储引擎已整合进当前的数据 ...
- In-Memory:内存优化表的事务处理
内存优化表(Memory-Optimized Table,简称MOT)使用乐观策略(optimistic approach)实现事务的并发控制,在读取MOT时,使用多行版本化(Multi-Row ve ...
- In-Memory:内存优化表 DMV
在内存优化表的DMV中,有两个对象ID(Object ID): xtp_object_id 是内部的内存优化表(Internal Memory-Optimized Table)的ID,在对象的整个生命 ...
- Sql server2014 内存优化表 本地编译存储过程
参考文献:http://www.infoq.com/cn/news/2013/09/Compiled-Queries http://www.bianceng.cn/database/SQLServer ...
- SQL Server 2014内存优化表的使用场景
SQL Server 2014内存优化表的使用场景 最近一个朋友找到走起君,咨询走起君内存优化表如何做高可用的问题 大家知道,内存优化表是从SQL Server 2014开始引入,可能大家对内存优化表 ...
随机推荐
- c#中的jQuery——HtmlAgilityPack
原文:c#中的jQuery--HtmlAgilityPack c#中是否有javascript中的jQuery类库? jQuery在访问和操作HTML 的DOM的便捷是前端开发工程师的一种福音,在c# ...
- hdu 1392(凸包)
传送门:Surround the Trees 题意:求凸包的周长. 分析:凸包模板题,先按极角排好序后,然后根据叉积正负确定凸包. #include <stdio.h> #include ...
- C#关于ref与out的总结
原文:C#关于ref与out的总结 首先大概说下函数调用的过程,首先为被调用函数分配存储空间(分为代码区和变量区)之后将调用函数传递过来的变量压栈,然后逐一弹栈进行处理,之后进行运算,将需要返回的变量 ...
- Linux下搭建tomcat集群全记录(转)
本文将讲述如何在Linux下搭建tomcat集群,以及搭建过程中可能的遇到的问题和解决方法.为简单起见,本文演示搭建的集群只有两个tomact节点外加一个apache组成,三者将安装在同一机器上:ap ...
- Ubuntu——grub rescue 主引导修复
长期使用windows 和 ubuntu 人双系统,很可能遇到沉重的一个系统,或以其他方式加盟分区,导致系统重新启动时 : GRUB loading error:unknow filesystem g ...
- hdu 4710 Balls Rearrangement (数学思维)
意甲冠军:那是, 从数0-n小球进入相应的i%a箱号.然后买一个新的盒子. 今天的总合伙人b一个盒子,Bob试图把球i%b箱号. 求复位的最小成本. 每次移动的花费为y - x ,即移动前后盒子编号 ...
- FZU 2113(数位dp)
题目连接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=38054 题意:求区间[a,b]中包含'1'的个数. 分析:数位dp ...
- [Android]解决3gwap联网失败:联网请求在设置代理与直连两种方式的切换
[Android]解决3gwap联网失败:联网请求在设置代理与直连两种方式的切换 问题现象: 碰到一个问题,UI交互表现为:联通号码在3gwap网络环境下资源一直无法下载成功. 查看Log日志,打印出 ...
- KISSY 库 demo
KISSY 是由淘宝前端project师们发起创建的一个开源 JS 类库. 它遵循的原则是 小巧灵活.简洁有用.愉悦编码.快乐开发. DEMO: <!DOCTYPE html> <h ...
- PHP实现队列(Queue)数据结构
队列(Queue),是一种特殊的先进先出线性表,其只能在前端进行删除操作(一般称为出队),在后端进行插入操作(一般称为入队).进行删除操作的端称为队头,进行插入操作的端称为队尾.队列,是按照先进先出或 ...