- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用的是从 NuGet 安装的 Lucene.net 3.0.3 和 AzureDirectory 2.0.4937.26631(在 NuGet 中称为 Lucene.Net.Store.Azure)。
项目描述位于azuredirectory.codeplex.com指出“更具体地说:您可以有 1..N 个工作角色将文档添加到索引,以及 1..N 个搜索 Web 角色近乎实时地搜索目录。” (强调)这意味着可以有多个工作角色并行写入索引。但是,当我尝试执行此操作时,我收到许多“锁定获取超时:[email protected]”。异常(exception)。
我的代码遵循 AzureDirectory 文档 ( azuredirectory.codeplex.com/documentation ) 中给出的示例。我的代码是粗略的(针对问题进行了简化)。
var dbEntities = // Load database entities here
var docFactory = // Create class that builds lucene documents from dbEntities
var account = // get the CloudStorageAccount
var directory = new AzureDirectory(account, "<my container name>");
using(var writer = new IndexWriter(directory, new StandardAnalyzer(Version.LUCENE_30), createEvenIfExists, IndexWriter.MaxFieldLength.UNLIMITED))
{
foreach(var entity in entities)
{
writer.AddDocument(docFactory.CreateDocument(entity));
}
}
当顺序运行时,此代码工作正常。但是,如果我在多个线程/工作线程上并行运行相同的代码。我收到很多“锁定获取超时:[email protected]”。异常(exception):
[Lucene.Net.Store.LockObtainFailedException: Lock obtain timed out: <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0c4d76797e6940636f674c7b7e6578692260636f67" rel="noreferrer noopener nofollow">[email protected]</a>.]
at Lucene.Net.Store.Lock.Obtain(Int64 lockWaitTimeout) in d:\Lucene.Net\FullRepo\trunk\src\core\Store\Lock.cs:line 83
at Lucene.Net.Index.IndexWriter.Init(Directory d, Analyzer a, Boolean create, IndexDeletionPolicy deletionPolicy, Int32 maxFieldLength, IndexingChain indexingChain, IndexCommit commit) in d:\Lucene.Net\FullRepo\trunk\src\core\Index\IndexWriter.cs:line 1228
at Lucene.Net.Index.IndexWriter..ctor(Directory d, Analyzer a, Boolean create, MaxFieldLength mfl) in d:\Lucene.Net\FullRepo\trunk\src\core\Index\IndexWriter.cs:line 1018
据我所知,“write.lock”文件是在 blob 存储中创建的,当该文件包含文本“wrote.lock”时,就会保持锁定。我从搜索中看到用户遇到了 write.lock 未清理的问题。这似乎不是我的问题,因为我可以让相同的代码在按顺序运行时正常工作,并且在这种情况下锁定文件会被清理。
我在 AzureDirectory 文档 ( azuredirectory.codeplex.com/documentation ) 中看到“索引一次只能由一个进程更新,因此通过索引角色推送所有添加/更新/删除操作是有意义的。”但是,这没有任何意义,因为您创建的任何角色都应该有多个实例,因此会有多个实例并行写入索引。此外,项目描述直接指出“您可以让 1..N 个工作角色将文档添加到一个索引”。请注意,它说的是“一个”索引,而不是索引碎片。
问题:
那么,项目描述是不是错误?或者实际上是否有某种方法可以让多个 IndexWriter 并行添加到索引中?我在 API 中看不到任何允许这样做的内容。如果可能,请提供如何使用 AzureDirectory 并行“让 1..N 个辅助角色将文档添加到索引”的代码片段。
最佳答案
执行此操作的最有效方法是...
1)使用生产者/消费者设计模式
2) 对于大型索引,生产者/消费者模式应生成单独的索引。例如,如果我有 4 个编写器,我会构建 4 个索引,然后使用 Lucene API 来合并它们
3) 之后,您的硬盘上就会有一个很好的索引。使用 AzureDirectory 的最后一步是使用 Lucene Directory.Copy 命令将索引从 FSDirectory(硬盘驱动器)复制到 Azure 目录。
我已将其用于 Azure 中的 IaaS/PaaS 产品,效果非常好。请记住,(我之前在帖子中提到过这一点)在我看来,AzureDirectory 还没有准备好“企业”或“严肃的生产”...一些事情,例如:网络重试、上传大型索引、大型索引的压缩需要在之前解决我可以称之为“生产就绪”。如果可以,请使用 IaaS Azure 产品,然后就不需要 Azure Directory,并且可以使用普通 FSDirectory 来构建/显示索引。
关于azure - 如何使用 AzureDirectory 和 Lucene.net 并行 IndexWriter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18469736/
似乎有很多方法可以在 Azure 中自动使用 PowerShell。由于 ARM 模板是最新的,Azure 中的其他 PowerShell 选项是否已过时?这些工具/脚本之间有什么区别: Azure
我正在开发一个将托管在 Azure 中的 Web API。我想使用 Azure 诊断将错误记录到 Azure 表存储中。在经典门户中,我可以将日志配置为转到 Azure 表存储。 Classic Po
Azure 文件存储事件可以触发 Azure WebJob 或 Azure Function 吗? 例如,在文件夹“/todo/”中创建文件时。 最佳答案 我们目前没有任何 Azure 文件绑定(bi
我需要创建一个逻辑应用程序,我的要求是,我需要从 azure data Lake Gen2 文件夹迁移 json 文件,并根据某些值需要将该 json 转换为 xml,然后将其发送到 SQL。 因此,
我使用 VS Code 创建了 1 个 node.js 和 1 个 java Azure Function 当我使用 VS Code 将这两个函数部署到 Azure 时,我最终获得了这么多 Azure
收集 Azure 诊断数据时,暂存槽是否也会将诊断数据发送到 WadPerformanceCounters 表? 如果是这样,我该如何关闭它?或者在阅读诊断信息时如何区分暂存/生产。 我不想显示有关我
您好,我是 Azure 的新手。我有 VS 2012 和 Azure SDK 2.1,当我使用模拟器运行我的 Web 应用程序时一切正常。但是当我在 azure 上部署时出现错误消息: Could n
我很难区分 Azure 订阅和 Azure 租户有何不同?我尝试使用示例来弄清楚,但每次我得出的结论是它们在某种程度上是相同的?如果租户是组织在注册 Microsoft 云服务时接收并拥有的 Azur
如果我想在 Azure Insights 中设置自定义指标集合,并以(近)实时的方式可视化其中一些指标,并查看聚合的历史数据,我应该使用 Azure Metrics Explorer 还是 Azure
我想了解具有以下配置的 Azure 数据工厂 (ADF) 的现实示例/用例: Azure 集成运行时 (AIR) 默认值 自托管集成运行时(SHIR) 其他问题: 这两种配置(AIR 和 SHIR)是
请参阅下面来自 Azure 服务总线的指标。想要识别请求数量中的背景噪音|流量较低时的响应。假设振荡请求| session 中 amqp 握手的响应是潜在的。只是不明白这是什么类型的握手?从总线接收的
此问题与 Azure 事件中心和 Azure 服务总线之间的区别无关。 问题如下: 如果您将Azure Events Hub添加到您的应用程序中,那么您会注意到它依赖于Azure Service Bu
这两个事情是完全不同的,还是它们能完成的事情大致相同/相似? 最佳答案 Azure 辅助角色是“应用程序场”中您自己的一组虚拟机。您可以以分布式方式在它们上运行任何代码。通常,您编写业务代码以在这些服
我目前正在使用 Windows Azure 虚拟机来运行 RStudio, 我的虚拟机是 Windows Server R2 2012,它是 Azure 上的一项附加服务。 我还有一个 Azure 存
我们正在寻找托管一个网站(一些 css、js、一个 html 文件,但不是 aspx、一个通用处理程序)。 我们部署为: 1) Azure 网站 2) Azure 云服务 两种解决方案都有效。但有一个
我想从 Azure 表创建 blob。 AzCopy 支持此功能,但我找不到任何说明数据移动 API 也支持它的文档。此选项可用吗? https://azure.microsoft.com/en-us
This article表示 Azure 订阅所有者有权访问订阅中的所有资源。但是,要访问 Azure 数据库,必须是数据库中的用户,或者是 Azure Admin AD 组的成员。 无论 SQL 安
我尝试使用以下代码将 XML 文件上传到 Azure FTP 服务器: https://www.c-sharpcorner.com/article/upload-and-download-files-
除了 Azure 服务总线使用主题而 Azure 事件中心基于事件 - Azure 事件中心和 Azure 服务总线之间是否有任何根本区别? 对我来说,事件和消息之间没有真正的区别,因为两者只是不同类
我有一个通过虚拟网络网关连接到 Azure 虚拟网络的 Windows VPN 客户端。目标#1 是使用其内部 IP 地址连接到我的虚拟机。这有效。 第二个目标是使用其内部计算机名称进行连接(因为 I
我是一名优秀的程序员,十分优秀!