【问题标题】:B Tree Index vs Inverted Index?B 树索引与倒排索引?
【发布时间】:2017-11-28 17:14:18
【问题描述】:

这是我对两者的理解

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

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

那么 b/w B 树索引和倒排索引有什么区别。在我看来,它们看起来一样

【问题讨论】:

    标签: indexing binary-tree inverted-index


    【解决方案1】:

    简答:

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

    长答案:

    命名

    我的知识来自于 SQL 世界的实践,所以对我来说,数据存储曾经等于 "database" 以及允许快速查找内容的结构 - "index" .

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

    目的

    您的问题包含各种想法。 "Inverted index" 实际上更像是“一种有助于查找已在存储中的文档的数据结构”,而 B-Tree 只是这种结构的实现。

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

    区别

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-16
      • 2011-10-06
      • 1970-01-01
      • 2013-07-07
      • 2014-11-12
      相关资源
      最近更新 更多