gpt4 book ai didi

.net - Lucene.NET 集群的选项?

转载 作者:行者123 更新时间:2023-12-03 03:22:11 25 4
gpt4 key购买 nike

我有兴趣为在 Windows 集群中运行的应用程序运行 Lucene.NET。搜索问题本身相当小,但无状态/集群问题仍然需要处理。

我知道 SOLR 可以处理我的场景(以及更多场景),但需要 servlet 容器(和 Java)给我带来了一些问题。不过,根据基于 Lucene.NET 的方法的复杂性,它可能仍然是一个小瓶选项。

我现在的问题是我有什么选择来处理在多个主机上运行的问题:

  • 保留所有节点共用的共享存储? Lucene.NET 会透明地处理并发吗?服务器是否会使用 RAM 进行缓存,如果是这样,Lucene.NET 是否会根据更新的文件透明地处理其失效?

  • 复制?每个服务器都有自己所需的所有内容的副本。在任何更新中,所有服务器都会获得一个新的副本(如果相当简单,则为 diff)。现有的工具可以解决这个问题,还是由我来处理?

  • 工作负载分区/分片?每个服务器仅处理自己的数据,包括读取和更新。用于处理此问题、连接部分结果等的工具?

  • 我在初步调查中可能错过的其他选项?

在尝试本地版本时,我的 Lucene 目录大约有几百兆。从长远来看,我可能会看到 1-5 GB。如果更新频率是一个困难,我可以相当灵活地控制。并发读取/搜索负载预计非常适中。

最佳答案

您可以将 lucene.net 与多个服务器一起使用,但您必须实现索引服务器。

您所做的所有更改都应该排队,并且时不时地索引待处理的文档。另外,如果队列中有 x 个项目,您应该立即索引(x 取决于您的合并文档设置,这对我来说是 25,000)。

上述背后的原因是您需要避免对索引进行小的更改,因为随着时间的推移,由于创建了许多小文件,这会降低性能。您可以运行 2 个索引服务器,但由于索引锁定,一次只能有 1 个索引服务器进行索引。这样做的唯一原因是在第一个索引服务器出现故障时进行故障转移,具体取决于您的需求。

我使用了 15Gb 的索引,包含 3000 万条记录。我的场景是在天蓝色下进行的。

  • 1 个辅助角色来索引更改

  • 2 - 20 个提供内容的网络角色,每个角色都持有索引。

每 15 分钟推送一次更改,并在 25,000 次更改时合并索引,每个合并索引包含 250,000 个文档。每个 Web 服务器每 15 分钟检查一次 Blob 存储是否有更改,并锁定索引读取器,如果下载了更改,索引读取器就会失效。每个文件的最大文档数基本上是为了阻止网络服务器下载大量以前的更改。

我一开始确实使用了 Lucene.AzureDirectory,但它在检测 Blob 存储中更改的 Blob 方面并不可靠,因此我最终迭代了 Blob,并在本地进行比较并根据需要下载。

现在我会再次实现这样的事情吗?答案是否定的。当你重新发明轮子时,我会使用 elasticsearch 或 solr。

关于.net - Lucene.NET 集群的选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9019774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com