diff --git a/.github/CODING_STANDARDS_CSHARP14.md b/.github/CODING_STANDARDS_CSHARP14.md index f1a076a6..20ad49fd 100644 --- a/.github/CODING_STANDARDS_CSHARP14.md +++ b/.github/CODING_STANDARDS_CSHARP14.md @@ -751,7 +751,7 @@ await WriteBatchAsync(operations); var checksum = SHA256.HashData(data.Span); // ✅ Mark TODO items -// TODO: Implement compression for blocks > 1MB +// TODO: Add streaming compression for blocks > 16MB (avoid full payload in memory) // ✅ Mark performance-critical sections // PERF: Hot path - avoid allocations diff --git a/docs/serialization/BINARY_FORMAT_VISUAL_REFERENCE.md b/docs/serialization/BINARY_FORMAT_VISUAL_REFERENCE.md index ea2bd568..672f318e 100644 --- a/docs/serialization/BINARY_FORMAT_VISUAL_REFERENCE.md +++ b/docs/serialization/BINARY_FORMAT_VISUAL_REFERENCE.md @@ -55,7 +55,7 @@ Offset Size Field Name Value 0x000C 4 HeaderSize 512 (always) 0x0010 1 EncryptionMode 0=None, 1=AES-256-GCM -0x0011 1 CompressionMode 0=None (reserved) +0x0011 1 CompressionMode 0=None, 1=Brotli, 2=GZip 0x0012 2 EncryptionKeyId Key derivation ID 0x0014 12 Nonce AES-GCM nonce diff --git a/docs/serialization/SERIALIZATION_AND_STORAGE_GUIDE.md b/docs/serialization/SERIALIZATION_AND_STORAGE_GUIDE.md index 2bea8a38..c5e88417 100644 --- a/docs/serialization/SERIALIZATION_AND_STORAGE_GUIDE.md +++ b/docs/serialization/SERIALIZATION_AND_STORAGE_GUIDE.md @@ -31,7 +31,7 @@ SharpCoreDB uses a **single-file binary format** (`.scdb`) for persistent storag | **String Storage** | Variable-length; prefixed with 4-byte length field | | **No Fixed-Length Requirement** | Strings can be arbitrarily long (limited by available disk space) | | **Encryption** | Optional AES-256-GCM | -| **Compression** | Not implemented (reserved in header) | +| **Compression** | Optional Brotli/GZip block-level compression (see `BlockCompressionMode`) | --- @@ -89,7 +89,7 @@ public struct ScdbFileHeader // === Encryption (16 bytes) === public byte EncryptionMode; // 0x0010: 0=None, 1=AES-256-GCM - public byte CompressionMode; // 0x0011: Reserved (always 0) + public byte CompressionMode; // 0x0011: 0=None, 1=Brotli, 2=GZip (see BlockCompressionMode) public ushort EncryptionKeyId;// 0x0012: Key derivation ID public fixed byte Nonce[12]; // 0x0014: AES-GCM nonce diff --git a/src/SharpCoreDB/Storage/Scdb/ScdbStructures.cs b/src/SharpCoreDB/Storage/Scdb/ScdbStructures.cs index c4ecffdb..72545a33 100644 --- a/src/SharpCoreDB/Storage/Scdb/ScdbStructures.cs +++ b/src/SharpCoreDB/Storage/Scdb/ScdbStructures.cs @@ -1,4 +1,4 @@ -// +// src\SharpCoreDB\Storage\Scdb\ScdbStructures.cs // Copyright (c) 2025-2026 MPCoreDeveloper and GitHub Copilot. All rights reserved. // Licensed under the MIT License. See LICENSE file in the project root for full license information. // @@ -38,8 +38,8 @@ public struct ScdbFileHeader /// Encryption mode: 0=None, 1=AES-256-GCM public byte EncryptionMode; // 0x0010: Encryption mode - /// Compression mode: 0=None (always 0 for .scdb) - public byte CompressionMode; // 0x0011: Compression (unused) + /// Compression mode: 0=None, 1=Brotli, 2=GZip (see BlockCompressionMode) + public byte CompressionMode; // 0x0011: Block compression mode /// Key derivation ID for encryption public ushort EncryptionKeyId;// 0x0012: Key derivation ID @@ -443,7 +443,8 @@ public enum BlockFlags : uint /// Block has uncommitted changes Dirty = 1 << 0, - /// Block is compressed (reserved, always 0 for .scdb) + /// Block is compressed (Brotli or GZip, see BlockCompressionMode) + Compressed = 1 << 1, /// Block is encrypted with AES-256-GCM