惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 鞠强

HBase初探 C#访问Azure的资源 HDInsight - 1,简介 Windows8.1画热度图 - 坑 使用windbg查看DependencyObject的属性 LiveSDK初始化/登录时失败的解决办法 开发WP版本的大菠萝英雄榜 XAML绑定 Kinect 1 Diablo3狗熊榜 微软上海招聘有经验的.NET开发人员 塔防蜀的存档分析 我的HD2手机 和我一起作Tess的windbg lab,结束 和我一起作Tess的windbg lab - Lab7, MemoryLeak 和我一起作Tess的windbg lab - Lab6, MemoryLeak - 鞠强 和我一起作Tess的windbg lab - Lab5, Crash 和我一起作Tess的windbg lab - Lab4, High CPU 和我一起作Tess的windbg lab - Lab3, Memory
SQL 2014 in-memory中的storage部分
鞠强 · 2013-10-22 · via 博客园 - 鞠强

基于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字节 |                                              |

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

2Rowheader的结构

    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字节长的索引指针

3PayLoad的结构

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

4Hash 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不够,怎么办?)

5Range indexes

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