基于CTP1的官方白皮书,自己理解的内容。白皮书下载地址:http://download.microsoft.com/download/F/5/0/F5096A71-3C31-4E9F-864E-A6D097A64805/SQL_Server_Hekaton_CTP1_White_Paper.pdf

  1. Memory-Optimized表的存储,不再基于page,也不再从extents中分配(相比较而言,可以看Inside SQL系列中的Storage Engine部分)。主要原因是要做内存地址对齐。

  2. 行从堆中分配,此堆与彼堆不同(相对于传统的基于磁盘的表)

  3. 行与行之间不局限于在同一个表的页范围内,而是通过表的“索引”来进行关联。所以,Memory-Optimized表,至少要有一个索引。从这个角度讲,索引把表中的行串联了起来

表中行的结构

  • 分为Row header及Pay load

    结构如下

    |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

    |Row Header                                                  |      PayLoad                                 |

    |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

    |Begin TS| End TS| StamtId| IdxLinkCount|pointer 1|pointer 2|---|Pointer N|                                             |

    |8字节  |8字节|4字节 |2字节      |8字节  |8字节  |…|8字节 |                                              |

    |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

2、Rowheader的结构

    1. Header包含2个8字节的时间戳。Begin-TS是行插入时的transaction的时间戳,End-TS是行删除时的transaction的时间戳。对于还没有被删除的行,End-TS的值是”infinity”。

    2. Header包含一个4字节长的statement ID。Transaction中的每个statement都包含一个唯一的StmtId值,第一次创建行时,该值被创建。

    3. Header包含一个2字节长的idxLinkCount,表明有多少个索引,与当前这个行link了。

    4. Header包含一系列8字节长的索引指针

3、PayLoad的结构

  1. Payload包含了行的数据:索引列+其他列。所以,相对于disk-based表,行就是数据,行就是索引,没有单独的索引page及data page。

4、Hash Indexes

  1. Hash Indexes,每个hash index指向一个指针数组,数组中每个成员称之为hash bucket。每个memory-optimized表,最多可以包含8个索引。行上的每个索引列,都有一个hash方法进行支持,该方法决定了该行应该使用哪一个bucket进行操作。索引列中包含的相同值,对都应同一个hash值。比如表A有一个列叫做Name,另外一个列叫做City,Name列是索引列,对应的hash方法是length( name )。那么对于张三、李四两个值,他们的hash value都是2,都在同一个chain上。

  2. 当表为空时,插入一行,{name=张三, city=北京},那么此时的value chain存在一个数值,值为strlen(张三)=2,,如上图的pointer 1值为null(因为此时没有其他行)

  3. 插入第二行,{name=李四,city=上海},由于strlen(李四)依然等于2,那么上图的pointer 1指向了上面的张三那行

  4. 创建第二个索引在City上,此时,每个行都包含了两个索引。

  5. 创建hash index时,必须要制定bucket的数目,建议值是该表中该索引列唯一值的个数。这个数字,会向上与2的指数幂靠齐。如10000,会对齐到16384,50000对齐到65536。(如果行数增加,bucket不够,怎么办?)

5、Range indexes

如果不确定有多少个bucket需要创建,或者需要进行范围搜索,那么需要创建Range indexes。但是CTP1还未提供,我了个擦。

SQL 2014 in-memory中的storage部分的更多相关文章

  1. Azure Backup (1) 将SQL Server 2012虚拟机中数据库备份到Azure Storage

    <Windows Azure Platform 系列文章目录> 本文介绍的是由国内世纪互联运维的China Azure,相比国外的Global Azure.主要区别是存储账号的DNS地址不 ...

  2. SQL 2014 AlwaysOn 搭建

    AlwaysOn底层依然采用Windows 故障转移群集的机制进行监测和转移,因此也需要先建立Windows Cluster,只不过可用性组中的数据库不一定非要再存放在共享存储上了.可以是存储在本地磁 ...

  3. [转]如何写出高效能TSQL -深入浅出SQL Server Relational Engine (含 SQL 2014 in-memory Engine)

    [转]如何写出高效能TSQL -深入浅出SQL Server Relational Engine (含 SQL 2014 in-memory Engine) http://blogs.technet. ...

  4. 一条SQL语句在MySQL中如何执行的

    本篇文章会分析一个 sql 语句在 MySQL 中的执行流程,包括 sql 的查询在 MySQL 内部会怎么流转,sql 语句的更新是怎么完成的. 在分析之前我会先带着你看看 MySQL 的基础架构, ...

  5. [Oralce][InMemory]如何确定一个表已经被Populate 到In Memory 中?

    [Oralce][InMemory]如何确定一个表已经被Populate 到In Memory 中? 以如下方法来查看 POPULATE_STATUS 是不行的. SQL> select ins ...

  6. 一条SQL语句在MySQL中是如何执行的

    概览 本篇文章会分析下一个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎么流转,sql语句的更新是怎么完成的. 一.mysql架构分析 mysql主要分为Server层和存储 ...

  7. CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储

    CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...

  8. 一条SQL在 MaxCompute 分布式系统中的旅程

    摘要:2019杭州云栖大会大数据技术专场,由阿里云资深技术专家侯震宇.阿里云高级技术专家陈颖达以及阿里云资深技术专家戴谢宁共同以“SQL在 MaxCompute 分布式系统中的旅程 ”为题进行了演讲. ...

  9. 一条 SQL 语句在 MySQL 中如何执行的

    一 MySQL 基础架构分析 1.1 MySQL 基本架构概览 下图是 MySQL 的一个简要架构图,从下图你可以很清晰的看到用户的 SQL 语句在 MySQL 内部是如何执行的. 先简单介绍一下下图 ...

随机推荐

  1. Oracle索引梳理系列(二)- Oracle索引种类及B树索引

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  2. 烂泥:gpg加解密软件学习

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb. 为什么要学习gpg呢?因为要在Linux下把一个邮箱的密码加密,不让其他人看到该邮箱真 ...

  3. 快速操作Linux终端命令行的快捷键列表

    终端有很多快捷键,不太好记,常用的在这里 Ctrl+r 实现快速检索使用过的历史命令.Ctrl+r中r是retrieve中r.Ctrl+a:光标回到命令行首. (a:ahead)Ctrl+e:光标回到 ...

  4. Kali Linux 秘籍/Web渗透秘籍/无线渗透入门

    Kali Linux 秘籍 原书:Kali Linux Cookbook 译者:飞龙 在线阅读 PDF格式 EPUB格式 MOBI格式 Github Git@OSC 目录: 第一章 安装和启动Kali ...

  5. HTML标签----图文详解(二)

    HTML标签超详细的图文演示再来一波~~~ 如果还没有看过昨天的福利的,那可要抓紧喽,传送门:HTML标签----图文详解 本文主要内容 列表标签 表格标签 框架标签及内嵌框架<iframe&g ...

  6. Hibernate二级缓存配置

    一.定义: 二级缓存是进程或集群范围内的缓存,可以被所有的Session共享,是可配置的插件 二.二级缓存原理图 解析:每次从二级缓存中取出的对象,都是一个新的对象. 三.配置步骤如下: 同理:以员工 ...

  7. SWT使用注意点

    出现这个错: java.lang.UnsatisfiedLinkError: no swt-win32-3139 in java.library.path 解决方法: 将swt-win32-3139导 ...

  8. Nginx反向代理的配置

    Chapter: Nginx基本操作释疑 1. Nginx的端口修改问题 2. Nginx 301重定向的配置 3. Windows下配置Nginx使之支持PHP 4. Linux下配置Nginx使之 ...

  9. 一个screen的简单配置。。

    # Start message startup_message off defencoding utf- encoding utf- utf- shell bash hardstatus always ...

  10. linux ISO/IMG make

    sudo dd if=/PATH/*.ISO  of=/dev/sdb 1.制作启动U盘需要sdb,不能sdb1,否则会提示isolinux.bin文件丢失 2.TF卡,设置sdb1?忘了 /* sy ...