本文翻译自?TokuMX Fractal Tree(R) indexes, what are they? TokuMX的一大创新在于,它打破了一条长久存在的关于数据库的规则:要保证好的写入性能,索引的工作集应当能够放在内存里。标准答案是这样的:如果索引的工作集比内存要大,写入就需要执行I/O,I/
本文翻译自?TokuMX Fractal Tree(R) indexes, what are they?
TokuMX的一大创新在于,它打破了一条长久存在的关于数据库的规则:要保证好的写入性能,索引的工作集应当能够放在内存里。标准答案是这样的:如果索引的工作集比内存要大,写入就需要执行I/O,I/O就会成为限制因素,性能就会下降。所以,要么让索引小到能全部放进内存,要么提供一种索引写入模式,避免工作集过大,比如MongoDB所采用的,内存中只为最近插入的数据保存索引。
但对TokuMX来说,这是绝对不成立的。依靠TokuMX所提供的创新性的分形树索引,索引的工作集可以比内存更大,同时写入性能不受影响。分形树索引为什么在重度写入(无论是MongoDB还是MySQL)的评测中能表现优异,原因就在这里。
其他数据库仍在苦苦挣扎时,TokuMX是如何提供这种写入性能的?做法就是将众多数据库(MongoDB, MySQL, BerkelyDB等等)使用的主要存储结构——B树索引,替换成为写入优化的数据结构——分形树索引。
“为写入优化的数据结构”意味着什么?
为了解这一点,首先你需要理解,为什么B树索引在索引超出内存限制时的表现会变差?下面是B树的图。
B树是种简单(同时美观)的数据结构。在B树中,内部节点存储支点(Pivot)及指针,叶子节点存储全部真正的数据。在B树上插入时,需要找到数据对应叶子节点,再将数据写入。如果所有节点都在内存里,这样做的速度是很快的。但是如果大部分数据不在内存里(在上图中,只有内部节点和极少数叶子节点在内存里),检索叶子节点就需要执行I/O操作。其实,基本上所有的插入都会执行I/O操作。I/O的瓶颈就从这里来。写入性能下降的根源就在这里。如果硬盘每秒可以执行数百次I/O操作,那么B树充其量也只能执行这么几百次写入操作。所以MongoDB和MySQL会在iiBench测试中败下阵来,自然而然地,用户会被告知“应当把索引的工作集保存在内存里”。
那么,分形树索引的速度为什么会快很多?简单说,它大量减少了I/O操作。下面解释原因。
分形树索引和B树索引的主要差别,解释了在内部节点中的写入性能差别。
- 使用B树时,内部节点只保存支点和指向各子节点的指针。
- 使用分形树索引时,内部节点保存支点、指针,以及各子节点的缓冲区。
请注意,在上图中,每个内部节点中都有其子节点对应的缓冲区(灰色)。
依靠缓冲,写操作可以累积起来批量执行,所以整个过程是这样的:
- 从根节点出发,找到应当向下开始遍历的那个子节点
- 将待定(pending)的写操作加入缓冲区
- 如果该子节点对应的缓冲去还有空间,返回。否则,将待定的写操作刷到下一层节点的缓冲区中,腾出空间用于未来的写入。
在根节点执行刷缓冲区,可能导致一系列的缓冲区刷新。也就是说,在根节点刷缓冲区可能将大量数据刷向其子节点,结果子节点的缓冲区也满了,于是它们也需要刷缓冲区。这种情况会持续发生,最终刷到叶子节点为止。
这种算法为什么会提供如此好的性能呢?简单说是减少了I/O(真的,关键就在I/O)。I/O的代价日益高昂,如果要执行I/O操作,总得有对应的回报来合算。如果使用B树索引,每插入一小篇文档,或者一行数据,或者一个键值对,就需要执行一次I/O。如果使用分形树索引,可以假设根节点是常驻内存的,所以我们知道,如果在某次写入时引发了了I/O操作,其实是写入了一整个缓冲区的数据。这可能包含很多文档(或者很多行,很多键值对…)。因为每个I/O操作其实归拢了很多写入,所以分形树索引大大减少了I/O操作的数量,也就解除了B树索引中的I/O瓶颈。
因为I/O的减少,分形树索引不会要求索引必须小于内存。即使超过内存的限制,TokuMX依然可以维持很高的写入性能。
关于这种算法,还有一点也值得一提,如果数据都存在内存里,在写入性能上,分形树索引相对B树索引并没有算法上的优势。如果内存足够大,从算法来分析,B树和分形树都很快。
原文地址:翻译文档:TokuMX的分形索引是什么?, 感谢原作者分享。

搜狗浏览器怎么翻译?我们平时用搜狗浏览器查阅资料的时候,会遇到一些全是英文的网站,因为看不懂英语对网站浏览起来就很困难,这样也十分的不方便,遇到这种情况没有关系!搜狗浏览器有内置翻译按钮,只要点击一下,搜狗浏览器就会自动帮你翻译整个网页?如果你不会操作的话,小编整理搜狗浏览器怎么翻译的具体方法步骤,不会的话跟着我往下看吧!搜狗浏览器怎么翻译1、打开搜狗浏览器,单击右上角的译字图标2、选择翻译文字类型,然后输入需要翻译的文字3、搜狗浏览器就会自动翻译文字,至此操作完成以上搜狗浏览器怎么翻译的全部内

基于JavaScript构建实时翻译工具引言随着全球化的需求日益增长,跨国交流和交流的频繁发生,实时翻译工具成为了一种非常重要的应用。我们可以利用JavaScript和一些现有的API来构建一个简单但实用的实时翻译工具。本文将会介绍如何基于JavaScript来实现这个功能,并附有代码示例。实施步骤步骤1:创建HTML结构首先,我们需要创建一个简单的HTML

搜狗浏览器无法翻译此网页怎么办?搜狗浏览器是一款非常好用的多功能浏览器,其中的网页翻译功能非常强大,能够帮助我们解决学习工作中的大多数麻烦。不过有些小伙伴却反应搜狗浏览器有着无法翻译此网页的问题,这可能是因为操作不当造成的,只需要正确的操作翻译功能就能解决,下面就由小编为大家带来搜狗浏览器无法翻译此网页解决方法。搜狗浏览器无法翻译此网页解决方法方法一:1、下载并安装搜狗浏览器2、打开搜狗浏览器3、任意打开一个英文网站4、网站打开后,单击右上角的译字图标5、选择翻译文字类型,然后单击翻译当前网页6

在iOS17.2中,使用iPhone操作按钮的新自定义翻译选项克服沟通障碍。继续阅读以了解如何使用它。如果您的iPhone带有操作按钮,例如iPhone15Pro,Apple的iOS17.2软件更新为该按钮带来了新的翻译选项,可让您将实时对话翻译成多种语言。根据苹果公司的说法,翻译不仅准确,而且具有上下文感知能力,确保有效地捕捉细微差别和口语。该功能对于旅行者、学生和任何学习语言的人来说都应该是一个福音。在使用翻译功能之前,请务必选择要翻译的语言。您可以通过Apple内置的翻译应用程序执行此操作

Java百度翻译API实现中文与芬兰语互相翻译的技术突破导语:随着全球化进程的不断加速,人们对语言翻译的需求也越来越大。在软件开发领域,实现多语言翻译也变得非常重要。本文将介绍如何使用Java编程语言以及百度翻译API实现中文与芬兰语之间的互相翻译,我们将展示如何通过此技术突破实现人工智能在多语言翻译方面的应用。准备工作:在正式开始实现之前,我们需要进行一些

如何使用PHP开发微信小程序的翻译功能?随着互联网的发展,语言的交流和沟通变得越来越重要。微信小程序是当前最热门的应用之一,而且拥有全球庞大的用户群体。为了使小程序能够更好地适应多语种用户需求,开发者可以为其添加翻译功能。本文将介绍使用PHP开发微信小程序翻译功能的具体步骤,并提供代码示例。注册微信小程序开发者账号首先,您需要在微信开放平台注册一个开发者账号

PHP开发中如何处理多语言和国际化支持引言:在当前全球化的时代,为了满足不同语言和文化背景用户的需求,将应用程序进行多语言和国际化支持变得尤为重要。在PHP开发中,我们可以利用一些常见的方法来实现多语言和国际化支持,使得应用程序能够灵活地切换语言,提供更好的用户体验。本文将重点介绍如何在PHP中处理多语言和国际化支持,并提供具体的代码示例。一、使用特定函数和

Python百度翻译API实现越南语翻译引言:随着全球交流越来越紧密,语言翻译变得越来越重要。在计算机领域,有许多自动翻译工具可以帮助我们去理解和翻译不同的语言。百度翻译API是其中一种常用的自动翻译工具,它提供了丰富的语种支持。本文将介绍如何使用Python编程语言,结合百度翻译API实现越南语翻译。我们将通过获取百度翻译API的密钥,编写Python代码


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。