B 树索引与倒排索引?

emi*_*lly 6 indexing binary-tree inverted-index

这是我对两者的理解

B 树索引 :-一般用于数据库列。它将列内容保留为 key 并将 row_id 保留为 value 。它以排序方式保持键以快速找到键和行位置

倒排索引:-一般用于全文搜索。此处,文档中的单词也用作键,以排序方式与文档位置/ID 一起存储为值。

那么 b/w B tree index 和 Inverted index 有什么区别。对我来说它们看起来一样

dav*_*sca 12

简短的回答:

  • 是的,他们有相同的目的 - 快速找到东西
  • 区别:它们对/特别擅长什么有用
  • 顺便说一句,命名也非常令人困惑

长答案:

命名

我的知识来自 SQL 世界的实践,所以对我来说,数据存储曾经等同于“数据库”和允许快速查找事物的结构 - “索引”

诀窍是 - 搜索引擎已经将他们的存储称为“索引”,那么您如何称该索引为“索引”呢?“倒排索引”,当然!为什么倒置?因为,正如我在您的问题中已经看到的,它只是反转了主存储。存储就像primary key --> values,该辅助结构将其反转为values --> primary key并帮助按值快速查找文档。

目的

你的问题有多种想法。"Inverted index"意味着实际上更像是“一种有助于查找已存储文档的数据结构”,而B-Tree只是这种结构的一种实现。

理论上可以使用您想要的任何数据结构来实现索引。哈希、图形、树、数组、位图……这取决于您的用例。

差异

B-Tree适用于变化的数据,因此它用于例如数据库和文件系统。缺点:多个索引不能在一个查询中一起使用(我猜是因为这种结构是动态的,因此对文档的引用没有排序)并且它的数据往往变得分散,因此 IO 可能成为一个问题。

"Inverted index"使用位图/数组并且所有内容都已排序(值列表和文档引用列表)。这些适用于静态数据集。并且由于排序的性质,多个索引可以一起使用。缺点:更新效率不高(新文档意味着在排序列表中的某处插入值),使用了一些技巧,例如将传入的数据批次保持在一起并在后台进程中合并成更大的批次。