From 26018a3900653989d7358b943ca31ec78e5d4d64 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Sun, 14 Apr 2019 13:34:34 +0200 Subject: [PATCH] Performance improvement finalized. --- .../Contents/Text/IndexState.cs | 5 ----- .../Contents/Text/TextIndexerGrain.cs | 14 +++++++++++--- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/Squidex.Domain.Apps.Entities/Contents/Text/IndexState.cs b/src/Squidex.Domain.Apps.Entities/Contents/Text/IndexState.cs index 029f601fc..7002c67d2 100644 --- a/src/Squidex.Domain.Apps.Entities/Contents/Text/IndexState.cs +++ b/src/Squidex.Domain.Apps.Entities/Contents/Text/IndexState.cs @@ -25,11 +25,6 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text private readonly Dictionary<(Guid, byte), BytesRef> changes = new Dictionary<(Guid, byte), BytesRef>(); private bool isClosed; - public int Changes - { - get { return changes.Count; } - } - public IndexState(IndexWriter indexWriter, IndexReader indexReader = null, IndexSearcher indexSearcher = null) { this.indexSearcher = indexSearcher; diff --git a/src/Squidex.Domain.Apps.Entities/Contents/Text/TextIndexerGrain.cs b/src/Squidex.Domain.Apps.Entities/Contents/Text/TextIndexerGrain.cs index f11cc98f4..134a04844 100644 --- a/src/Squidex.Domain.Apps.Entities/Contents/Text/TextIndexerGrain.cs +++ b/src/Squidex.Domain.Apps.Entities/Contents/Text/TextIndexerGrain.cs @@ -29,6 +29,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text private const int MaxResults = 2000; private const int MaxUpdates = 400; private static readonly TimeSpan CommitDelay = TimeSpan.FromSeconds(10); + private static readonly MergeScheduler MergeScheduler = new ConcurrentMergeScheduler(); private static readonly Analyzer Analyzer = new MultiLanguageAnalyzer(Version); private static readonly string[] Invariant = { InvariantPartitioning.Instance.Master.Key }; private readonly SnapshotDeletionPolicy snapshotter = new SnapshotDeletionPolicy(new KeepOnlyLastCommitDeletionPolicy()); @@ -41,6 +42,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text private IndexState indexState; private QueryParser queryParser; private HashSet currentLanguages; + private int updates; public TextIndexerGrain(IAssetStore assetStore) { @@ -62,7 +64,9 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text var config = new IndexWriterConfig(Version, Analyzer) { - IndexDeletionPolicy = snapshotter + IndexDeletionPolicy = snapshotter, + MergePolicy = new TieredMergePolicy(), + MergeScheduler = MergeScheduler }; indexWriter = new IndexWriter(FSDirectory.Open(directory), config); @@ -164,7 +168,9 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text { timer?.Dispose(); - if (indexState.Changes >= MaxUpdates) + updates++; + + if (updates >= MaxUpdates) { await FlushAsync(); } @@ -185,7 +191,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text public async Task FlushAsync() { - if (indexState.Changes > 0 && indexWriter != null) + if (updates > 0 && indexWriter != null) { indexWriter.Commit(); indexWriter.Flush(true, true); @@ -201,6 +207,8 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text { snapshotter.Release(commit); } + + updates = 0; } }