什么是最有效的数据索引技术

数据挖掘 nosql 效率 索引 数据索引技术 。网
2021-09-24 07:02:52

众所周知,有一些数据索引技术,被著名的索引应用程序使用,如 Lucene(用于 java)或 Lucene.NET(用于 .NET)、MurMurHash、B+Tree 等。对于 No-Sql / Object面向数据库(我尝试用 C# 编写/玩一点),您建议使用哪种技术?

我阅读了有关 MurMurhash-2 的信息,特别是 v3 评论说 Murmur 非常快。Lucene.Net 对此也有很好的评价。但是他们的内存足迹一般呢?有没有比 Lucene 或 Murmur 使用更少占用空间的有效解决方案(当然,如果更快更可取)?或者我应该写一个特殊的索引结构来获得最好的结果?

如果我尝试自己编写,那么是否有任何可接受的良好索引规模,例如 1% 的数据节点或 5% 的数据节点?任何有用的提示将不胜感激。

1个回答

我认为你在你的问题中搞砸了一些事情。Lucene(我对 Lucene,NET 一无所知,但我想是一样的)是一个用于分析、拆分令牌和存储文档以便以后能够查询和检索它们的库。Lucene 有一个非常古老但有效的模型,它使用倒置树来查找和检索文档。在没有进一步细节的情况下,所有文档都被拆分为令牌(术语),并且为每个术语维护一个数据结构,该结构存储包含给定术语的所有文档。由于数据结构可以使用 BTree、哈希表,并且在最新的主要修订版中,您甚至可以插入自己的数据结构。

BTree(有关详细信息,请参阅Wikipedia 页面)是一种树数据结构,适用于处理大块数据,通常用于在磁盘上存储树状有序结构。对于内存中的其他树表现更好。

Murmur 哈希(有关详细信息,请参阅Wikipedia 页面)是哈希表中使用的一系列哈希函数。哈希表的实现并不重要,它可以是标准的链式实现或更高级的开放哈希寻址方案。这个想法是哈希表允许人们从一组无序的键中快速获取一个键,并且可以回答以下任务:这个键是这组键的一部分吗?与此键关联的值是什么?

现在回到你的主要问题。您有一个库(Lucene)和数据结构,两种数据结构都在 Lucene 中使用。现在您看到不可能用这些术语回答您的问题,因为它们不可比较。

但是,关于您的足迹和性能问题的一部分。首先你必须知道你需要实现哪种操作。

您只需要获取键的值,还是需要查找范围内的所有元素?换句话说,您是否需要订购?如果你这样做了,那么一棵树可以提供帮助。如果你不这样做,那么可以使用更快的哈希表来代替。

你有很多不适合内存的数据吗?如果是,那么基于磁盘的解决方案会有所帮助(如 BTree)。如果您的数据适合内存,则使用最快的内存解决方案并仅将磁盘用作存储(具有不同的结构,更简单)。