本文整理汇总了C#中Raven.Database.Indexing.IndexingWorkStats类的典型用法代码示例。如果您正苦于以下问题:C# IndexingWorkStats类的具体用法?C# IndexingWorkStats怎么用?C# IndexingWorkStats使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
IndexingWorkStats类属于Raven.Database.Indexing命名空间,在下文中一共展示了IndexingWorkStats类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: UpdateIndexingStats
public void UpdateIndexingStats(string index, IndexingWorkStats stats)
{
var indexStats = GetCurrentIndex(index);
indexStats["attempts"] = indexStats.Value<int>("attempts") + stats.IndexingAttempts;
indexStats["successes"] = indexStats.Value<int>("successes") + stats.IndexingSuccesses;
indexStats["failures"] = indexStats.Value<int>("failures") + stats.IndexingErrors;
storage.IndexingStats.UpdateKey(indexStats);
}
示例2: IndexDocuments
public override IndexingPerformanceStats IndexDocuments(AbstractViewGenerator viewGenerator, IndexingBatch batch, IStorageActionsAccessor actions, DateTime minimumTimestamp, CancellationToken token)
{
token.ThrowIfCancellationRequested();
var count = 0;
var sourceCount = 0;
var deleted = new Dictionary<ReduceKeyAndBucket, int>();
var performance = RecordCurrentBatch("Current Map", "Map", batch.Docs.Count);
var performanceStats = new List<BasePerformanceStats>();
var usedStorageAccessors = new ConcurrentSet<IStorageActionsAccessor>();
if (usedStorageAccessors.TryAdd(actions))
{
var storageCommitDuration = new Stopwatch();
actions.BeforeStorageCommit += storageCommitDuration.Start;
actions.AfterStorageCommit += () =>
{
storageCommitDuration.Stop();
performanceStats.Add(PerformanceStats.From(IndexingOperation.StorageCommit, storageCommitDuration.ElapsedMilliseconds));
};
}
var deleteMappedResultsDuration = new Stopwatch();
var documentsWrapped = batch.Docs.Select(doc =>
{
token.ThrowIfCancellationRequested();
sourceCount++;
var documentId = doc.__document_id;
using (StopwatchScope.For(deleteMappedResultsDuration))
{
actions.MapReduce.DeleteMappedResultsForDocumentId((string)documentId, indexId, deleted);
}
return doc;
})
.Where(x => x is FilteredDocument == false)
.ToList();
performanceStats.Add(new PerformanceStats
{
Name = IndexingOperation.Map_DeleteMappedResults,
DurationMs = deleteMappedResultsDuration.ElapsedMilliseconds,
});
var allReferencedDocs = new ConcurrentQueue<IDictionary<string, HashSet<string>>>();
var allReferenceEtags = new ConcurrentQueue<IDictionary<string, Etag>>();
var allState = new ConcurrentQueue<Tuple<HashSet<ReduceKeyAndBucket>, IndexingWorkStats, Dictionary<string, int>>>();
var parallelOperations = new ConcurrentQueue<ParallelBatchStats>();
var parallelProcessingStart = SystemTime.UtcNow;
BackgroundTaskExecuter.Instance.ExecuteAllBuffered(context, documentsWrapped, partition =>
{
token.ThrowIfCancellationRequested();
var parallelStats = new ParallelBatchStats
{
StartDelay = (long)(SystemTime.UtcNow - parallelProcessingStart).TotalMilliseconds
};
var localStats = new IndexingWorkStats();
var localChanges = new HashSet<ReduceKeyAndBucket>();
var statsPerKey = new Dictionary<string, int>();
var linqExecutionDuration = new Stopwatch();
var reduceInMapLinqExecutionDuration = new Stopwatch();
var putMappedResultsDuration = new Stopwatch();
var convertToRavenJObjectDuration = new Stopwatch();
allState.Enqueue(Tuple.Create(localChanges, localStats, statsPerKey));
using (CurrentIndexingScope.Current = new CurrentIndexingScope(context.Database, PublicName))
{
// we are writing to the transactional store from multiple threads here, and in a streaming fashion
// should result in less memory and better perf
context.TransactionalStorage.Batch(accessor =>
{
if (usedStorageAccessors.TryAdd(accessor))
{
var storageCommitDuration = new Stopwatch();
accessor.BeforeStorageCommit += storageCommitDuration.Start;
accessor.AfterStorageCommit += () =>
{
storageCommitDuration.Stop();
parallelStats.Operations.Add(PerformanceStats.From(IndexingOperation.StorageCommit, storageCommitDuration.ElapsedMilliseconds));
};
}
var mapResults = RobustEnumerationIndex(partition, viewGenerator.MapDefinitions, localStats, linqExecutionDuration);
var currentDocumentResults = new List<object>();
string currentKey = null;
//.........这里部分代码省略.........
示例3: UpdateReduceStats
public void UpdateReduceStats(int id, IndexingWorkStats stats)
{
SetCurrentIndexStatsToImpl(id);
using (var update = new Update(session, IndexesStatsReduce, JET_prep.Replace))
{
var oldAttempts = Api.RetrieveColumnAsInt32(session, IndexesStatsReduce, tableColumnsCache.IndexesStatsReduceColumns["reduce_attempts"]) ?? 0;
Api.SetColumn(session, IndexesStatsReduce, tableColumnsCache.IndexesStatsReduceColumns["reduce_attempts"],
oldAttempts + stats.ReduceAttempts);
var oldErrors = Api.RetrieveColumnAsInt32(session, IndexesStatsReduce, tableColumnsCache.IndexesStatsReduceColumns["reduce_errors"]) ?? 0;
Api.SetColumn(session, IndexesStatsReduce, tableColumnsCache.IndexesStatsReduceColumns["reduce_errors"],
oldErrors + stats.ReduceErrors);
var olsSuccesses = Api.RetrieveColumnAsInt32(session, IndexesStatsReduce, tableColumnsCache.IndexesStatsReduceColumns["reduce_successes"]) ?? 0;
Api.SetColumn(session, IndexesStatsReduce, tableColumnsCache.IndexesStatsReduceColumns["reduce_successes"],
olsSuccesses + stats.ReduceSuccesses);
update.Save();
}
}
示例4: UpdateReduceStats
public void UpdateReduceStats(string index, IndexingWorkStats stats)
{
var indexStats = GetCurrentIndex(index);
indexStats["reduce_attempts"] = indexStats.Value<int>("reduce_attempts") + stats.ReduceAttempts;
indexStats["reduce_successes"] = indexStats.Value<int>("reduce_successes") + stats.ReduceSuccesses;
indexStats["reduce_failures"] = indexStats.Value<int>("reduce_failures") + stats.ReduceSuccesses;
storage.IndexingStats.UpdateKey(indexStats);
}
示例5: RobustEnumerationIndex
protected IEnumerable<object> RobustEnumerationIndex(IEnumerator<object> input, List<IndexingFunc> funcs, IndexingWorkStats stats,out Action<Exception, object> onError)
{
onError = (exception, o) =>
{
string docId = null;
var invalidSpatialException = exception as InvalidSpatialShapeException;
if (invalidSpatialException != null)
docId = invalidSpatialException.InvalidDocumentId;
context.AddError(name,
docId ?? TryGetDocKey(o),
exception.Message,
"Map"
);
logIndexing.WarnException(
String.Format("Failed to execute indexing function on {0} on {1}", name,
TryGetDocKey(o)),
exception);
stats.IndexingErrors++;
};
return new RobustEnumerator(context.CancellationToken, context.Configuration.MaxNumberOfItemsToIndexInSingleBatch)
{
BeforeMoveNext = () => Interlocked.Increment(ref stats.IndexingAttempts),
CancelMoveNext = () => Interlocked.Decrement(ref stats.IndexingAttempts),
OnError = onError
}.RobustEnumeration(input, funcs);
}
示例6: IndexDocuments
public override void IndexDocuments(
AbstractViewGenerator viewGenerator,
IndexingBatch batch,
IStorageActionsAccessor actions,
DateTime minimumTimestamp)
{
var count = 0;
var sourceCount = 0;
var sw = Stopwatch.StartNew();
var start = SystemTime.UtcNow;
var changed = new HashSet<ReduceKeyAndBucket>();
var documentsWrapped = batch.Docs.Select(doc =>
{
sourceCount++;
var documentId = doc.__document_id;
actions.MapReduce.DeleteMappedResultsForDocumentId((string)documentId, name, changed);
return doc;
})
.Where(x => x is FilteredDocument == false)
.ToList();
var items = new ConcurrentQueue<MapResultItem>();
var stats = new IndexingWorkStats();
var allReferencedDocs = new ConcurrentQueue<IDictionary<string, HashSet<string>>>();
if (documentsWrapped.Count > 0)
actions.MapReduce.UpdateRemovedMapReduceStats(name, changed);
BackgroundTaskExecuter.Instance.ExecuteAllBuffered(context, documentsWrapped, partition =>
{
using (CurrentIndexingScope.Current = new CurrentIndexingScope(LoadDocument, allReferencedDocs.Enqueue))
{
var mapResults = RobustEnumerationIndex(partition, viewGenerator.MapDefinitions, stats);
var currentDocumentResults = new List<object>();
string currentKey = null;
foreach (var currentDoc in mapResults)
{
var documentId = GetDocumentId(currentDoc);
if (documentId != currentKey)
{
count += ProcessBatch(viewGenerator, currentDocumentResults, currentKey, items);
currentDocumentResults.Clear();
currentKey = documentId;
}
currentDocumentResults.Add(new DynamicJsonObject(RavenJObject.FromObject(currentDoc, jsonSerializer)));
}
count += ProcessBatch(viewGenerator, currentDocumentResults, currentKey, items);
}
});
IDictionary<string, HashSet<string>> result;
while (allReferencedDocs.TryDequeue(out result))
{
foreach (var referencedDocument in result)
{
actions.Indexing.UpdateDocumentReferences(name, referencedDocument.Key, referencedDocument.Value);
actions.General.MaybePulseTransaction();
}
}
foreach (var mapResultItem in items)
{
changed.Add(new ReduceKeyAndBucket(mapResultItem.Bucket, mapResultItem.ReduceKey));
actions.MapReduce.PutMappedResult(name, mapResultItem.DocId, mapResultItem.ReduceKey, mapResultItem.Data);
actions.General.MaybePulseTransaction();
}
UpdateIndexingStats(context, stats);
actions.MapReduce.ScheduleReductions(name, 0, changed);
AddindexingPerformanceStat(new IndexingPerformanceStats
{
OutputCount = count,
InputCount = sourceCount,
Operation = "Map",
Duration = sw.Elapsed,
Started = start
});
logIndexing.Debug("Mapped {0} documents for {1}", count, name);
}
示例7: Write
protected void Write(Func<IndexWriter, Analyzer, IndexingWorkStats, int> action)
{
if (disposed)
throw new ObjectDisposedException("Index " + name + " has been disposed");
LastIndexTime = SystemTime.UtcNow;
lock (writeLock)
{
bool shouldRecreateSearcher;
var toDispose = new List<Action>();
Analyzer searchAnalyzer = null;
try
{
waitReason = "Write";
try
{
searchAnalyzer = CreateAnalyzer(new LowerCaseKeywordAnalyzer(), toDispose);
}
catch (Exception e)
{
context.AddError(name, "Creating Analyzer", e.ToString());
throw;
}
if (indexWriter == null)
{
CreateIndexWriter();
}
var locker = directory.MakeLock("writing-to-index.lock");
try
{
int changedDocs;
var stats = new IndexingWorkStats();
try
{
changedDocs = action(indexWriter, searchAnalyzer, stats);
shouldRecreateSearcher = changedDocs > 0;
foreach (var indexExtension in indexExtensions.Values)
{
indexExtension.OnDocumentsIndexed(currentlyIndexDocuments);
}
}
catch (Exception e)
{
context.AddError(name, null, e.ToString());
throw;
}
if (changedDocs > 0)
{
UpdateIndexingStats(context, stats);
WriteTempIndexToDiskIfNeeded(context);
Flush(); // just make sure changes are flushed to disk
}
}
finally
{
locker.Release();
}
}
finally
{
currentlyIndexDocuments.Clear();
if (searchAnalyzer != null)
searchAnalyzer.Close();
foreach (Action dispose in toDispose)
{
dispose();
}
waitReason = null;
LastIndexTime = SystemTime.UtcNow;
}
if (shouldRecreateSearcher)
RecreateSearcher();
}
}
示例8: UpdateIndexingStats
protected void UpdateIndexingStats(WorkContext workContext, IndexingWorkStats stats)
{
switch (stats.Operation)
{
case IndexingWorkStats.Status.Map:
workContext.TransactionalStorage.Batch(accessor => accessor.Indexing.UpdateIndexingStats(name, stats));
break;
case IndexingWorkStats.Status.Reduce:
workContext.TransactionalStorage.Batch(accessor => accessor.Indexing.UpdateReduceStats(name, stats));
break;
case IndexingWorkStats.Status.Ignore:
break;
default:
throw new ArgumentOutOfRangeException();
}
}
示例9: UpdateIndexingStats
public void UpdateIndexingStats(int id, IndexingWorkStats stats)
{
var key = CreateKey(id);
ushort version;
var index = Load(tableStorage.IndexingStats, key, out version);
index["attempts"] = index.Value<int>("attempts") + stats.IndexingAttempts;
index["successes"] = index.Value<int>("successes") + stats.IndexingSuccesses;
index["failures"] = index.Value<int>("failures") + stats.IndexingErrors;
index["lastIndexingTime"] = SystemTime.UtcNow;
tableStorage.IndexingStats.Add(writeBatch.Value, key, index, version);
}
示例10: UpdateReduceStats
public void UpdateReduceStats(int id, IndexingWorkStats stats)
{
var key = CreateKey(id);
ushort version;
var reduceStats = Load(tableStorage.ReduceStats, key, out version);
reduceStats["reduce_attempts"] = reduceStats.Value<int>("reduce_attempts") + stats.ReduceAttempts;
reduceStats["reduce_successes"] = reduceStats.Value<int>("reduce_successes") + stats.ReduceSuccesses;
reduceStats["reduce_failures"] = reduceStats.Value<int>("reduce_failures") + stats.ReduceErrors;
tableStorage.ReduceStats.Add(writeBatch.Value, key, reduceStats, version);
}
示例11: RobustEnumerationIndex
protected IEnumerable<object> RobustEnumerationIndex(IEnumerator<object> input, List<IndexingFunc> funcs, IndexingWorkStats stats)
{
return new RobustEnumerator(context.CancellationToken, context.Configuration.MaxNumberOfItemsToIndexInSingleBatch)
{
BeforeMoveNext = () => Interlocked.Increment(ref stats.IndexingAttempts),
CancelMoveNext = () => Interlocked.Decrement(ref stats.IndexingAttempts),
OnError = (exception, o) =>
{
context.AddError(name,
TryGetDocKey(o),
exception.Message,
"Map"
);
logIndexing.WarnException(
String.Format("Failed to execute indexing function on {0} on {1}", name,
TryGetDocKey(o)),
exception);
stats.IndexingErrors++;
}
}.RobustEnumeration(input, funcs);
}
示例12: UpdateIndexingStats
public void UpdateIndexingStats(string index, IndexingWorkStats stats)
{
using (storage.WriteLock())
{
var indexStats = (RavenJObject) GetCurrentIndex(index).CloneToken();
indexStats["attempts"] = indexStats.Value<int>("attempts") + stats.IndexingAttempts;
indexStats["successes"] = indexStats.Value<int>("successes") + stats.IndexingSuccesses;
indexStats["failures"] = indexStats.Value<int>("failures") + stats.IndexingErrors;
indexStats["lastIndexingTime"] = SystemTime.UtcNow;
storage.IndexingStats.UpdateKey(indexStats);
}
}
示例13: UpdateIndexingStats
public void UpdateIndexingStats(string index, IndexingWorkStats stats)
{
SetCurrentIndexStatsToImpl(index);
using (var update = new Update(session, IndexesStats, JET_prep.Replace))
{
var oldAttempts = Api.RetrieveColumnAsInt32(session, IndexesStats, tableColumnsCache.IndexesStatsColumns["attempts"]) ?? 0;
Api.SetColumn(session, IndexesStats, tableColumnsCache.IndexesStatsColumns["attempts"],
oldAttempts + stats.IndexingAttempts);
var oldErrors = Api.RetrieveColumnAsInt32(session, IndexesStats, tableColumnsCache.IndexesStatsColumns["errors"]) ?? 0;
Api.SetColumn(session, IndexesStats, tableColumnsCache.IndexesStatsColumns["errors"],
oldErrors + stats.IndexingErrors);
var olsSuccesses = Api.RetrieveColumnAsInt32(session, IndexesStats, tableColumnsCache.IndexesStatsColumns["successes"]) ?? 0;
Api.SetColumn(session, IndexesStats, tableColumnsCache.IndexesStatsColumns["successes"],
olsSuccesses + stats.IndexingSuccesses);
update.Save();
}
}
示例14: IndexDocuments
public override void IndexDocuments(
AbstractViewGenerator viewGenerator,
IndexingBatch batch,
IStorageActionsAccessor actions,
DateTime minimumTimestamp)
{
var count = 0;
var sourceCount = 0;
var sw = Stopwatch.StartNew();
var start = SystemTime.UtcNow;
var deleted = new Dictionary<ReduceKeyAndBucket, int>();
var indexPerfStats = RecordCurrentBatch("Current Map", batch.Docs.Count);
batch.SetIndexingPerformance(indexPerfStats);
var documentsWrapped = batch.Docs.Select(doc =>
{
sourceCount++;
var documentId = doc.__document_id;
actions.MapReduce.DeleteMappedResultsForDocumentId((string)documentId, indexId, deleted);
return doc;
})
.Where(x => x is FilteredDocument == false)
.ToList();
var allReferencedDocs = new ConcurrentQueue<IDictionary<string, HashSet<string>>>();
var allReferenceEtags = new ConcurrentQueue<IDictionary<string, Etag>>();
var allState = new ConcurrentQueue<Tuple<HashSet<ReduceKeyAndBucket>, IndexingWorkStats, Dictionary<string, int>>>();
int loadDocumentCount = 0;
long loadDocumentDuration = 0;
BackgroundTaskExecuter.Instance.ExecuteAllBuffered(context, documentsWrapped, partition =>
{
var localStats = new IndexingWorkStats();
var localChanges = new HashSet<ReduceKeyAndBucket>();
var statsPerKey = new Dictionary<string, int>();
allState.Enqueue(Tuple.Create(localChanges, localStats, statsPerKey));
using (CurrentIndexingScope.Current = new CurrentIndexingScope(context.Database, PublicName))
{
// we are writing to the transactional store from multiple threads here, and in a streaming fashion
// should result in less memory and better perf
context.TransactionalStorage.Batch(accessor =>
{
var mapResults = RobustEnumerationIndex(partition, viewGenerator.MapDefinitions, localStats);
var currentDocumentResults = new List<object>();
string currentKey = null;
bool skipDocument = false;
foreach (var currentDoc in mapResults)
{
var documentId = GetDocumentId(currentDoc);
if (documentId != currentKey)
{
count += ProcessBatch(viewGenerator, currentDocumentResults, currentKey, localChanges, accessor, statsPerKey);
currentDocumentResults.Clear();
currentKey = documentId;
}
else if (skipDocument)
{
continue;
}
currentDocumentResults.Add(new DynamicJsonObject(RavenJObject.FromObject(currentDoc, jsonSerializer)));
if (EnsureValidNumberOfOutputsForDocument(documentId, currentDocumentResults.Count) == false)
{
skipDocument = true;
currentDocumentResults.Clear();
continue;
}
Interlocked.Increment(ref localStats.IndexingSuccesses);
}
count += ProcessBatch(viewGenerator, currentDocumentResults, currentKey, localChanges, accessor, statsPerKey);
});
allReferenceEtags.Enqueue(CurrentIndexingScope.Current.ReferencesEtags);
allReferencedDocs.Enqueue(CurrentIndexingScope.Current.ReferencedDocuments);
Interlocked.Add(ref loadDocumentCount, CurrentIndexingScope.Current.LoadDocumentCount);
Interlocked.Add(ref loadDocumentDuration, CurrentIndexingScope.Current.LoadDocumentDuration.ElapsedMilliseconds);
}
});
UpdateDocumentReferences(actions, allReferencedDocs, allReferenceEtags);
var changed = allState.SelectMany(x => x.Item1).Concat(deleted.Keys)
.Distinct()
.ToList();
var stats = new IndexingWorkStats(allState.Select(x => x.Item2));
var reduceKeyStats = allState.SelectMany(x => x.Item3)
.GroupBy(x => x.Key)
.Select(g => new { g.Key, Count = g.Sum(x => x.Value) })
.ToList();
BackgroundTaskExecuter.Instance.ExecuteAllBuffered(context, reduceKeyStats, enumerator => context.TransactionalStorage.Batch(accessor =>
{
while (enumerator.MoveNext())
{
var reduceKeyStat = enumerator.Current;
accessor.MapReduce.IncrementReduceKeyCounter(indexId, reduceKeyStat.Key, reduceKeyStat.Count);
}
//.........这里部分代码省略.........
示例15: Write
protected void Write(WorkContext context, Func<IndexWriter, Analyzer, IndexingWorkStats, bool> action)
{
if (disposed)
throw new ObjectDisposedException("Index " + name + " has been disposed");
lock (writeLock)
{
bool shouldRecreateSearcher;
var toDispose = new List<Action>();
Analyzer searchAnalyzer = null;
try
{
try
{
searchAnalyzer = CreateAnalyzer(new LowerCaseKeywordAnalyzer(), toDispose);
}
catch (Exception e)
{
context.AddError(name, "Creating Analyzer", e.ToString());
throw;
}
if (indexWriter == null)
{
indexWriter = CreateIndexWriter(directory);
}
var stats = new IndexingWorkStats();
try
{
shouldRecreateSearcher = action(indexWriter, searchAnalyzer, stats);
foreach (IIndexExtension indexExtension in indexExtensions.Values)
{
indexExtension.OnDocumentsIndexed(currentlyIndexDocuments);
}
}
catch (Exception e)
{
context.AddError(name, null, e.ToString());
throw;
}
UpdateIndexingStats(context, stats);
WriteTempIndexToDiskIfNeeded(context);
if (configuration.TransactionMode == TransactionMode.Safe)
{
Flush(optimize: false);
}
}
finally
{
currentlyIndexDocuments.Clear();
if (searchAnalyzer != null)
searchAnalyzer.Close();
foreach (Action dispose in toDispose)
{
dispose();
}
}
if (shouldRecreateSearcher)
RecreateSearcher();
}
}