海量存储系列之九

简介:
终于来到了COLA树系,这套东西目前来看呢,确实不如LSM火,不过作为可选方案,也是个值得了解的尝试,不过这块因为只有一组MIT的人搞了个东西出来,所以其实真正的方案也语焉不详的。从性能来说,tokuDB的写入性能很高,但更新似乎不是很给力,查询较好,占用较少的内存。

http://www.mysqlperformanceblog.com/2009/04/28/detailed-review-of-tokutek-storage-engine/



这里有一些性能上的指标和分析性文字。确实看起来很心动,不过这东西只适合磁盘结构,到了SSD似乎就挂了。原因不详,因为没有实际的看过他们的代码,所以一切都是推测,如果有问题,请告知我。

先说原理,上ppt http://tokutek.com/presentations/bender-Scalperf-9-09.pdf,简单来说,就是一帮MIT的小子们,分析了一下为什么磁盘写性能这么慢,读的性能也这么慢,然后一拍脑袋,说:“哎呀,我知道了,对于两级的存储(比如磁盘对应内存,或内存对于缓存,有两个属性是会对整个查询和写入造成影响的,一个是容量空间小但速度更快的存储的size,另外一个则是一次传输的block的size.而我们要做的事情,就是尽可能让每次的操作传输尽可能少的数据块。

传输的越少,那么查询的性能就越好。

进而,有人提出了更多种的解决方案。

•B-tree [Bayer, McCreight 72]

• cache-oblivious B-tree [Bender, Demaine, Farach-Colton 00]

• buffer tree [Arge 95]

• buffered-repositorytree[Buchsbaum,Goldwasser,Venkatasubramanian,Westbrook 00]

• Bε

tree[Brodal, Fagerberg 03]

• log-structured merge tree [O’Neil, Cheng, Gawlick, O’Neil 96]

• string B-tree [Ferragina, Grossi 99]

这些结构都是用于解决这样一个问题,在磁盘上能够创建动态的有序查询结构。

在今天,主要想介绍的就是COLA,所谓cache-oblivious 就是说,他不需要知道具体的内存大小和一个块的大小,或者说,无论内存多大,块有多大,都可以使用同一套逻辑进行处理,这无疑是具有优势的,因为内存大小虽然可以知道,但内存是随时可能被临时的占用去做其他事情的,这时候,CO就非常有用了。

其他我就不多说了,看一下细节吧~再说这个我自己都快绕进去了。

众所周知的,磁盘需要的是顺序写入,下一个问题就是,怎么能够保证数据的顺序写。

我们假定有这样一个空的数据集合

可以认为树的高度是log2N。

每行要么就是空的,要么就是满的,每行数据都是排序后的数据。

如果再写一个值的时候,会写在第一行,比如写了3。

再写一个值11的时候,因为第一行已经写满了,所以将3取出来,和11做排序,尝试写第二行。又因为第二行也满了,所以将第二行的5和10也取出,对3,11,5,10 进行排序。写入第四行

这就是COLA的写入过程。

可以很清楚的看出,COLA的核心其实和LSM类似,每次“将数据从上一层取出,与外部数据进行归并排序后写入新的array”的这个操作,对sas磁盘非常友好。因此,写入性能就会有非常大的提升。

并且因为数据结构简单,没有维持太多额外的指针,所以相对的比较节省空间。

但这样查询会需要针对每个array都进行一次二分查找。

性能似乎还不是很高,所以,他们想到了下面这种方式,把它的命名为fractal tree,分形树。

用更简单的方法来说的话呢,就是在merge的时候,上层持有下层数据的一个额外的指针。

来协助进行二分查找。

这样,利用空间换时间,他的查询速度就又回到了log2N这个级别了。

到此,又一个有序结构被我囫囵吞枣了。

嘿嘿

在下一篇,我们将进入大家期待的分布式k-V场景,也就是noSQL的范畴了,让我们拨开nosql的神秘面纱,看看这东西到底意味着什么。


本文来源于"阿里中间件团队播客",原文发表时间"2012-01-06"

相关文章
|
算法 Python
python:判断一个数是否为质数
python:判断一个数是否为质数
|
安全 算法 Oracle
【WEB安全】Apache Shiro 反序列化漏洞(上)
Apache Shiro是一款开源企业常见JAVA安全框架,提供身份验证、授权、密码学和会话管理。java中的权限框架有SpringSecurity和Shiro,由于Spring功能强大但复杂,Shiro的简单强大,扩展性好因此用的还是很多。
1652 0
【WEB安全】Apache Shiro 反序列化漏洞(上)
|
数据采集 机器学习/深度学习 监控
mPaaS 核心组件:支付宝如何为移动端产品构建舆情分析体系?
移动舆情分析 MMA(Mobile Media Analysis)通过采集应用内、应用市场反馈及外部媒体等内容,经过机器学习、自然语言处理等大数据技术,为企业的产品进化、运营、营销、公关提供实时、有效的舆情监控-分析-预警-处理的闭环能力,帮助企业发现与跟踪产品问题,收集产品建议,危机公关,辅助市场调研、产品营销与竞争分析。
3305 0
|
11月前
|
人工智能 安全 API
拼多多:通过拼团API发起社交裂变,低成本获取新客
拼多多通过拼团API实现社交裂变,以低至0.5元/人的成本高效获客。其核心在于:拼团模式激发用户分享,API技术保障流畅体验,裂变系数F>1.5时形成指数传播。数学模型显示,新客呈指数增长,获客成本趋近于零。该模式为电商低成本扩张提供范本。(238字)
1381 0
|
图形学
unity摄像机的平滑过渡,平滑缓冲
在Unity中,通过插值计算实现摄像机的平滑过渡与缓冲效果,避免突兀跳跃,提升玩家视觉体验。主要方法包括位置和旋转的平滑过渡,常用线性插值(Lerp)和SmoothDamp函数。代码示例展示了如何使用SmoothDamp实现摄像机从一个点到另一个点的平滑移动。将脚本挂载到场景中测试即可看到效果。
|
存储 Kubernetes 数据安全/隐私保护
k8s--配置存储 ConfigMap、Secret
k8s--配置存储 ConfigMap、Secret
|
前端开发 JavaScript
会旋转的圣诞树
这篇文章介绍了如何使用HTML、CSS和JavaScript实现一个动态旋转的圣诞树效果,包括详细的实现步骤和编码实现,以及最终效果的展示。
会旋转的圣诞树
|
人工智能 搜索推荐 算法
探索增强现实(AR)在零售业的潜力:重塑购物体验的未来
【8月更文挑战第7天】增强现实技术正在逐步改变零售业的面貌,为消费者带来全新的购物体验。从虚拟试衣间到产品信息展示,从营销创新到线上线下融合,AR技术在零售业的应用潜力巨大。随着技术的不断进步和应用场景的不断拓展,我们有理由相信,未来的零售业将更加智能、便捷和个性化。作为行业从业者,应积极拥抱AR技术,不断创新和优化自身的业务模式和服务方式,以适应市场的变化和消费者的需求。
|
存储 JSON Kubernetes
在K8S中,服务是如何发布的?
在K8S中,服务是如何发布的?
|
Web App开发 JavaScript 前端开发
Windows 10上安装Node.js的初学者指南
Node.js是是一个强大的JavaScript运行时环境,建立在Chrome的V8 JavaScript引擎上,让你能够在服务器端运行JavaScript。 通过本教程,你将学会如何设置Node.js和npm(节点包管理器等现代Web开发的必备工具。无论你是希望构建Web应用程序、创建服务器端脚本,还是涉足全栈开发,安装Node.js都是你的第一步。那么,让我们开始吧!