众所周知,有一些数据索引技术,使用众所周知的索引应用程序,例如Lucene(for Java)或Lucene.net(for .net),Murmurhash,B+Tree等。定向数据库(我尝试使用C#编写/播放的数据库),您建议哪种技术?

我读到有关Murmurhash-2的信息,特别是V3评论说Murmur非常快。 Lucene.net也对此有很好的评论。但是,他们的记忆足迹一般呢?是否有有效的解决方案比Lucene或Murmur使用较少的占地面积(当然,如果更快的速度更快)?还是我应该写一个特殊的索引结构来获得最佳结果?

如果我尝试编写自己的书,那么是否有任何接受的量表以构成良好的索引,大约是数据节点的1%,或者有5%的数据节点?任何有用的提示都将不胜感激。

有帮助吗?

解决方案

我认为您在问题中弄乱了一些事情。 Lucene(我对Lucene,网络一无所知,但我想是一样的)是一个用于分析,分配令牌和存储文档的库,以便以后能够查询和检索它们。 Lucene有一个非常古老但有效的模型,它使用倒树来查找和检索文档。没有更多的详细信息,所有文档都在令牌(条款)中分配,并且每个项都维护一个数据结构,该数据结构存储了包含给定项的所有文档。由于数据结构可以使用BTREE,HASH表,并且在最新的主要修订版中,您甚至可以插入自己的数据结构。

btree(请参阅 Wikipedia页面 有关更多详细信息),是一种树木数据结构,适用于使用大量数据,通常用于将类似树状的有序结构存储在磁盘上。对于内存中,其他树的性能更好。

杂音哈希(见 Wikipedia页面 有关更多详细信息),是哈希表中使用的哈希功能系列。哈希表的实施并不重要,它可能是标准的链接实施或更高级的开放哈希寻址方案。这个想法是,哈希表允许一个人从一组无序的钥匙中获得快速的钥匙,并且可以回答以下任务:这组键的此密钥部分吗?与此密钥相关的值是哪个?

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

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

您是否只需要获得钥匙的值,还是需要找到范围内的所有元素?换句话说,您是否需要订单? 如果您这样做,那么一棵树可以提供帮助。如果您不这样做,则可以使用更快的哈希表。

您是否有很多不适合内存的数据? 如果是的,则基于磁盘的解决方案会有所帮助(例如BTREE)。如果您的数据符合内存,则使用最快的内存解决方案,仅使用磁盘作为存储(具有不同的结构,简单得多)。

许可以下: CC-BY-SA归因
scroll top