Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/ZoneTree/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
<Authors>Ahmed Yasin Koculu</Authors>
<PackageId>ZoneTree</PackageId>
<Title>ZoneTree</Title>
<ProductVersion>1.8.4.0</ProductVersion>
<Version>1.8.4.0</Version>
<ProductVersion>1.8.5.0</ProductVersion>
<Version>1.8.5.0</Version>
<Authors>Ahmed Yasin Koculu</Authors>
<AssemblyTitle>ZoneTree</AssemblyTitle>
<Description>ZoneTree is a persistent, high-performance, transactional, ACID-compliant ordered key-value database for NET. It can operate in memory or on local/cloud storage.</Description>
Expand Down
17 changes: 17 additions & 0 deletions src/ZoneTree/Options/DefaultValues.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System.Collections.ObjectModel;
using Tenray.ZoneTree.Collections.BTree.Lock;

namespace Tenray.ZoneTree.Options;

public static class DefaultValues
{
public static readonly int MutableSegmentMaxItemCount = 1_000_000;

public static readonly int DiskSegmentMaxItemCount = 20_000_000;

public static readonly BTreeLockMode BTreeLockMode = BTreeLockMode.NodeLevelMonitor;

public static readonly int BTreeNodeSize = 128;

public static readonly int BTreeLeafSize = 128;
}
26 changes: 26 additions & 0 deletions src/ZoneTree/Options/DiskSegmentDefaultValues.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
namespace Tenray.ZoneTree.Options;

public static class DiskSegmentDefaultValues
{
public static readonly DiskSegmentMode DiskSegmentMode = DiskSegmentMode.MultiPartDiskSegment;

public static readonly int CompressionBlockSize = 4 * 1024 * 1024;

public static readonly CompressionMethod CompressionMethod = CompressionMethod.LZ4;

public static readonly int CompressionLevel = CompressionLevels.LZ4Fastest;

public static readonly int MaximumRecordCount = 3_000_000;

public static readonly int MinimumRecordCount = 1_500_000;

public static readonly int KeyCacheSize = 1024;

public static readonly int ValueCacheSize = 1024;

public static readonly int KeyCacheRecordLifeTimeInMillisecond = 1024;

public static readonly int ValueCacheRecordLifeTimeInMillisecond = 10_000;

public static readonly int DefaultSparseArrayStepSize = 1024;
}
22 changes: 11 additions & 11 deletions src/ZoneTree/Options/DiskSegmentOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,71 +10,71 @@ public sealed class DiskSegmentOptions
/// Default value is <see cref="DiskSegmentMode.MultiPartDiskSegment"/>.
/// </summary>
public DiskSegmentMode DiskSegmentMode { get; set; }
= DiskSegmentMode.MultiPartDiskSegment;
= DiskSegmentDefaultValues.DiskSegmentMode;

/// <summary>
/// Gets or sets the block size for disk segment compression, in bytes.
/// Default value is 4 MB (4 * 1024 * 1024 bytes).
/// </summary>
public int CompressionBlockSize { get; set; } = 4 * 1024 * 1024;
public int CompressionBlockSize { get; set; } = DiskSegmentDefaultValues.CompressionBlockSize;

/// <summary>
/// Gets or sets the compression method used if compression is enabled.
/// Default value is <see cref="CompressionMethod.LZ4"/>.
/// </summary>
public CompressionMethod CompressionMethod { get; set; } = CompressionMethod.LZ4;
public CompressionMethod CompressionMethod { get; set; } = DiskSegmentDefaultValues.CompressionMethod;

/// <summary>
/// Gets or sets the compression level for the selected compression method.
/// Default value is <see cref="CompressionLevels.LZ4Fastest"/>.
/// </summary>
public int CompressionLevel { get; set; } = CompressionLevels.LZ4Fastest;
public int CompressionLevel { get; set; } = DiskSegmentDefaultValues.CompressionLevel;

/// <summary>
/// Gets or sets the maximum number of records allowed in a disk segment when
/// <see cref="DiskSegmentMode.MultiPartDiskSegment"/> is enabled.
/// Default value is 3M records.
/// </summary>
public int MaximumRecordCount { get; set; } = 3_000_000;
public int MaximumRecordCount { get; set; } = DiskSegmentDefaultValues.MaximumRecordCount;

/// <summary>
/// Gets or sets the minimum number of records required in a disk segment when
/// <see cref="DiskSegmentMode.MultiPartDiskSegment"/> is enabled, unless there
/// are not enough records.
/// Default value is 1.5M records.
/// </summary>
public int MinimumRecordCount { get; set; } = 1_500_000;
public int MinimumRecordCount { get; set; } = DiskSegmentDefaultValues.MinimumRecordCount;

/// <summary>
/// Gets or sets the size of the circular buffer cache for keys.
/// This cache is checked before accessing the block cache during lookups and searches.
/// Default value is 1024.
/// </summary>
public int KeyCacheSize { get; set; } = 1024;
public int KeyCacheSize { get; set; } = DiskSegmentDefaultValues.KeyCacheSize;

/// <summary>
/// Gets or sets the size of the circular buffer cache for values.
/// This cache is checked before accessing the block cache during lookups and searches.
/// Default value is 1024.
/// </summary>
public int ValueCacheSize { get; set; } = 1024;
public int ValueCacheSize { get; set; } = DiskSegmentDefaultValues.ValueCacheSize;

/// <summary>
/// Gets or sets the maximum lifetime of a record in the key cache, in milliseconds.
/// Default value is 10,000 milliseconds (10 seconds).
/// </summary>
public int KeyCacheRecordLifeTimeInMillisecond { get; set; } = 10_000;
public int KeyCacheRecordLifeTimeInMillisecond { get; set; } = DiskSegmentDefaultValues.KeyCacheRecordLifeTimeInMillisecond;

/// <summary>
/// Gets or sets the maximum lifetime of a record in the value cache, in milliseconds.
/// Default value is 10,000 milliseconds (10 seconds).
/// </summary>
public int ValueCacheRecordLifeTimeInMillisecond { get; set; } = 10_000;
public int ValueCacheRecordLifeTimeInMillisecond { get; set; } = DiskSegmentDefaultValues.ValueCacheRecordLifeTimeInMillisecond;

/// <summary>
/// Gets or sets the default step size for the default sparse array of disk segments.
/// Setting the step size to zero disables loading and creating the default sparse array.
/// Default value is 1024.
/// </summary>
public int DefaultSparseArrayStepSize { get; set; } = 1024;
public int DefaultSparseArrayStepSize { get; set; } = DiskSegmentDefaultValues.DefaultSparseArrayStepSize;
}
18 changes: 18 additions & 0 deletions src/ZoneTree/Options/WriteAheadLogDefaultValues.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
namespace Tenray.ZoneTree.Options;

public static class WriteAheadLogDefaultValues
{
public static readonly WriteAheadLogMode WriteAheadLogMode = WriteAheadLogMode.AsyncCompressed;

public static readonly int CompressionBlockSize = 1024 * 32 * 8;

public static readonly CompressionMethod CompressionMethod = CompressionMethod.LZ4;

public static readonly int CompressionLevel = CompressionLevels.LZ4Fastest;

public static readonly bool SyncCompressedModeEnableTailWriterJob = true;

public static readonly int SyncCompressedModeTailWriterJobInterval = 500;

public static readonly int AsyncCompressedModeEmptyQueuePollInterval = 100;
}
2 changes: 1 addition & 1 deletion src/ZoneTree/Options/WriteAheadLogMode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ public enum WriteAheadLogMode : byte
/// <summary>
/// Sync mode write ahead log ensures that the data is flushed to the device
/// immediately.
/// It provides maximum durability in case of a crash/power cut,
/// It provides maximum durability in case of a crash,
/// but slower write speed.
/// </summary>
Sync = 0,
Expand Down
8 changes: 4 additions & 4 deletions src/ZoneTree/Options/WriteAheadLogOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public sealed class WriteAheadLogOptions
/// based on this setting. Default value is AsyncCompressed.
/// </summary>
public WriteAheadLogMode WriteAheadLogMode { get; set; }
= WriteAheadLogMode.AsyncCompressed;
= WriteAheadLogDefaultValues.WriteAheadLogMode;

/// <summary>
/// The custom options are reserved to be used
Expand All @@ -27,19 +27,19 @@ public sealed class WriteAheadLogOptions
/// based on this setting. Default value = 256 KB
/// </summary>
public int CompressionBlockSize { get; set; }
= 1024 * 32 * 8;
= WriteAheadLogDefaultValues.CompressionBlockSize;

/// <summary>
/// The compression method for the WALs with compression enabled.
/// Default is LZ4.
/// </summary>
public CompressionMethod CompressionMethod { get; set; } = CompressionMethod.LZ4;
public CompressionMethod CompressionMethod { get; set; } = WriteAheadLogDefaultValues.CompressionMethod;

/// <summary>
/// The compression level of the selected compression method.
/// Default is <see cref="CompressionLevels.LZ4Fastest"/>.
/// </summary>
public int CompressionLevel { get; set; } = CompressionLevels.LZ4Fastest;
public int CompressionLevel { get; set; } = WriteAheadLogDefaultValues.CompressionLevel;

/// <summary>
/// Options for sync-compressed mode.
Expand Down
10 changes: 5 additions & 5 deletions src/ZoneTree/Options/ZoneTreeOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,14 @@ public sealed class ZoneTreeOptions<TKey, TValue>
/// MoveMutableSegmentForward is called and current mutable segment is enqueued to
/// the ReadOnlySegments layer.
/// </summary>
public int MutableSegmentMaxItemCount { get; set; } = 1_000_000;
public int MutableSegmentMaxItemCount { get; set; } = DefaultValues.MutableSegmentMaxItemCount;

/// <summary>
/// Disk segment maximumum key-value pair count.
/// When the maximum count is reached
/// The disk segment is enqueued into to the bottom segments layer.
/// </summary>
public int DiskSegmentMaxItemCount { get; set; } = 20_000_000;
public int DiskSegmentMaxItemCount { get; set; } = DefaultValues.DiskSegmentMaxItemCount;

/// <summary>
/// The key comparer.
Expand Down Expand Up @@ -92,17 +92,17 @@ public sealed class ZoneTreeOptions<TKey, TValue>
/// Controls lock granularity of in-memory BTree that represents the
/// mutable segment.
/// </summary>
public BTreeLockMode BTreeLockMode { get; set; } = BTreeLockMode.NodeLevelMonitor;
public BTreeLockMode BTreeLockMode { get; set; } = DefaultValues.BTreeLockMode;

/// <summary>
/// The B+Tree node size.
/// </summary>
public int BTreeNodeSize { get; set; } = 128;
public int BTreeNodeSize { get; set; } = DefaultValues.BTreeNodeSize;

/// <summary>
/// The B+Tree leaf size.
/// </summary>
public int BTreeLeafSize { get; set; } = 128;
public int BTreeLeafSize { get; set; } = DefaultValues.BTreeLeafSize;

/// <summary>
/// ZoneTree Logger.
Expand Down
6 changes: 4 additions & 2 deletions src/ZoneTree/WAL/Async/AsyncCompressedModeOptions.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace Tenray.ZoneTree.WAL;
using Tenray.ZoneTree.Options;

namespace Tenray.ZoneTree.WAL;

public sealed class AsyncCompressedModeOptions
{
Expand All @@ -7,5 +9,5 @@ public sealed class AsyncCompressedModeOptions
/// to retrieve the new entries in the queue,
/// when the queue is empty.
/// </summary>
public int EmptyQueuePollInterval { get; set; } = 100;
public int EmptyQueuePollInterval { get; set; } = WriteAheadLogDefaultValues.AsyncCompressedModeEmptyQueuePollInterval;
}
8 changes: 5 additions & 3 deletions src/ZoneTree/WAL/SyncCompressed/SyncCompressedModeOptions.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace Tenray.ZoneTree.WAL;
using Tenray.ZoneTree.Options;

namespace Tenray.ZoneTree.WAL;

public sealed class SyncCompressedModeOptions
{
Expand All @@ -9,11 +11,11 @@ public sealed class SyncCompressedModeOptions
/// This improves durability in compressed WALs.
/// Default value is true.
/// </summary>
public bool EnableTailWriterJob { get; set; } = true;
public bool EnableTailWriterJob { get; set; } = WriteAheadLogDefaultValues.SyncCompressedModeEnableTailWriterJob;

/// <summary>
/// The delay in milliseconds before the next tail write.
/// Default value is 500 ms.
/// </summary>
public int TailWriterJobInterval { get; set; } = 500;
public int TailWriterJobInterval { get; set; } = WriteAheadLogDefaultValues.SyncCompressedModeTailWriterJobInterval;
}
Loading