solrnet - solr.Add(doc) 瓶颈

标签 solr solrnet

Win 7/SolrNet 0.4.0/C# winforms .net 4.0 客户端。

我正在使用 Solrnet 和 winforms 线程应用程序将多个位图和一些数学描述符写入 Solr 实例(在不同的服务器上)。有趣的是 solr.Add 方法似乎显着减慢了应用程序的速度。也就是说,如果我注释掉 add 和 commit 方法,CPU 利用率会跃升至 90% 左右,但在它们工作的情况下,CPU 利用率约为 20% - 但似乎文档正在写入 Solr。

这是预期的行为吗? Solr 写入会成为瓶颈吗?我该如何解决这个问题?

            var doc = new IndexDocument
            {
                _UUID = Guid.NewGuid().ToString(),
                _FileName = (FileName),
             };

            //// Bitmap is not thread safe we Need to make a copy for each Task and done so synchronously.            
            Bitmap[] blobCopies = MakeBlobCopies(bmpBlob, 2);

            Task<List<KeyValuePair<string, double>>>[] descriptorTasks = new Task<List<KeyValuePair<string, double>>>[2];
            descriptorTasks[0] = Task.Factory.StartNew<List<KeyValuePair<string, double>>>(() => ApplyDescriptor1(blobCopies[0]));
            descriptorTasks[1] = Task.Factory.StartNew<List<KeyValuePair<string, double>>>(() => ApplyDescriptor2(blobCopies[1]));

            Task.WaitAll(descriptorTasks);
            foreach (var t in descriptorTasks)
            {
                List<KeyValuePair<string, double>> flds = t.Result;
                foreach (KeyValuePair<string, double> fld in flds)
                {
                    Type type = doc.GetType();
                    if (!String.IsNullOrEmpty(fld.Key))
                    {
                        SetPropertyValue(doc, fld.Key, fld.Value);
                    }
                }
            }

            DisposeBlobCopies(blobCopies);

            solr.Add(doc);
            solr.Commit();

最佳答案

solr 调用可能是应用程序的瓶颈,因为它们会阻止 io 点击。添加和提交是对 Restful api 的 2 个不同的调用。我几乎肯定 solrnet 在其 api 中没有 native 支持来执行异步调用,但看起来您知道如何使用任务并行库。使调用非阻塞,事情应该会加快。您可能会发现有必要控制并发量。

关于solrnet - solr.Add(doc) 瓶颈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11302005/

相关文章:

c# - 索引时查询 Solr 会导致索引中的文档丢失

c# - Solr.Net 查询 : ArgumentException in Windows Forms

solr - 多字同义词和奇数 token 顺序

Solr edismax查询语法错误 "Query Field '_text _' is not a valid field name"

SolrNet:如果当前使用的服务器出现故障,如何将 Solr 连接切换到另一台服务器?

solr - Solr 中与 DtSearch 选项对应的高级搜索选项

solr - 更改配置的 maxBooleanClauses 无效

Solr - 在文档中重复查询中的单词没有额外分数

python - PySolr 连接错误 404

indexing - Solr Schemaless 模式将字段创建为多值