From 65b238c90ab72f51c95f9c35e48e9a776f0ecef7 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Thu, 6 Jul 2017 22:43:46 +0200 Subject: [PATCH] Performance improved --- .../EventStore/MongoEventStore.cs | 74 ++++++++++--------- 1 file changed, 41 insertions(+), 33 deletions(-) diff --git a/src/Squidex.Infrastructure.MongoDb/EventStore/MongoEventStore.cs b/src/Squidex.Infrastructure.MongoDb/EventStore/MongoEventStore.cs index ea440c42c..aca2823bf 100644 --- a/src/Squidex.Infrastructure.MongoDb/EventStore/MongoEventStore.cs +++ b/src/Squidex.Infrastructure.MongoDb/EventStore/MongoEventStore.cs @@ -15,6 +15,7 @@ using MongoDB.Bson; using MongoDB.Driver; using Squidex.Infrastructure.CQRS.Events; +// ReSharper disable RedundantAssignment // ReSharper disable InvertIf // ReSharper disable ConvertIfStatementToConditionalTernaryExpression // ReSharper disable TooWideLocalVariableScope @@ -89,39 +90,7 @@ namespace Squidex.Infrastructure.MongoDb.EventStore } } - var filters = new List>(); - - if (isEndOfCommit) - { - filters.Add(Filter.Gt(x => x.Timestamp, tokenTimestamp)); - } - else - { - filters.Add(Filter.Gte(x => x.Timestamp, tokenTimestamp)); - } - - if (!string.IsNullOrWhiteSpace(streamFilter) && !string.Equals(streamFilter, "*", StringComparison.OrdinalIgnoreCase)) - { - if (streamFilter.Contains("^")) - { - filters.Add(Filter.Regex(x => x.EventStream, streamFilter)); - } - else - { - filters.Add(Filter.Eq(x => x.EventStream, streamFilter)); - } - } - - FilterDefinition filter = new BsonDocument(); - - if (filters.Count > 1) - { - filter = Filter.And(filters); - } - else if (filters.Count == 1) - { - filter = filters[0]; - } + var filter = CreateFilter(streamFilter, isEndOfCommit, tokenTimestamp); await Collection.Find(filter).SortBy(x => x.Timestamp).ForEachAsync(async commit => { @@ -218,6 +187,45 @@ namespace Squidex.Infrastructure.MongoDb.EventStore return -1; } + private static FilterDefinition CreateFilter(string streamFilter, bool isEndOfCommit, BsonTimestamp tokenTimestamp) + { + var filters = new List>(); + + if (isEndOfCommit) + { + filters.Add(Filter.Gt(x => x.Timestamp, tokenTimestamp)); + } + else + { + filters.Add(Filter.Gte(x => x.Timestamp, tokenTimestamp)); + } + + if (!string.IsNullOrWhiteSpace(streamFilter) && !string.Equals(streamFilter, "*", StringComparison.OrdinalIgnoreCase)) + { + if (streamFilter.Contains("^")) + { + filters.Add(Filter.Regex(x => x.EventStream, streamFilter)); + } + else + { + filters.Add(Filter.Eq(x => x.EventStream, streamFilter)); + } + } + + FilterDefinition filter = new BsonDocument(); + + if (filters.Count > 1) + { + filter = Filter.And(filters); + } + else if (filters.Count == 1) + { + filter = filters[0]; + } + + return filter; + } + private static string CreateToken(BsonTimestamp timestamp, int commitOffset, int commitSize) { var parts = new object[] { timestamp.Timestamp, timestamp.Increment, commitOffset, commitSize };