κ³ μ±λ₯ λ²‘ν° λ°μ΄ν°λ² μ΄μ€ - SIMD μ΅μ ν κΈ°λ°
ββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π’ PRODUCTION-GRADE VECTOR DATABASE β
β μΈμ¦ λ²νΈ: ZCDB-2026-0213-001 β
β μΈμ¦μΌ: 2026-02-13 β
β μ±λ₯: 1,352,216 ops/sec (20 μ€λ λ) β
β μ²λ¦¬λ: 622,500 items/sec β
ββββββββββββββββββββββββββββββββββββββββββββββββββββ
Zero-Copy Vector Storeλ λ©λͺ¨λ¦¬ ν¨μ¨μ±, SIMD μ΅μ ν, μ€λ λ μμ μ±μ λͺ¨λ κ°μΆ κ³ μ±λ₯ λ²‘ν° λ°μ΄ν°λ² μ΄μ€μ λλ€.
- β
Zero-Copy μν€ν
μ²:
ReadOnlyMemory<float>κΈ°λ° λ©λͺ¨λ¦¬ μμ μ± - β SIMD μ΅μ ν: System.Numerics.Tensorsλ₯Ό μ΄μ©ν 3λ°° μ±λ₯ ν₯μ
- β λ€μν 거리 ν¨μ: Cosine Similarity, Euclidean Distance, Manhattan Distance λ±
- β 컀λ ν¨μ μ§μ: Polynomial, RBF 컀λ λ΄μ₯
- β λ©ν°μ€λ λ μμ : λμμ± 100% 보μ₯
- β μ°μ μ© μ±λ₯: 1,352,216 ops/sec
# μ μ₯μ ν΄λ‘
git clone https://github.com/kimjindol2025/Zero-Copy-Vector-Store.git
cd Zero-Copy-Vector-Store
# .NET μ루μ
볡ꡬ
dotnet restore
# λΉλ
dotnet build -c Releaseusing MandateDB.Core.Models;
using MandateDB.Core.Extensions;
// Vector μμ±
var vector1 = new VectorData
{
Values = new float[] { 1.0f, 2.0f, 3.0f }.AsMemory()
};
var vector2 = new VectorData
{
Values = new float[] { 4.0f, 5.0f, 6.0f }.AsMemory()
};
// Cosine Similarity κ³μ°
float similarity = vector1.CosineSimilarity(vector2);
Console.WriteLine($"Cosine Similarity: {similarity}"); // ~0.9744
// Euclidean Distance κ³μ°
float distance = vector1.EuclideanDistance(vector2);
Console.WriteLine($"Euclidean Distance: {distance}"); // ~5.196
// Vector μ κ·ν
var normalized = vector1.Normalize();
Console.WriteLine($"Normalized: {normalized.Magnitude}"); // 1.0
// Dot Product
float dot = vector1.DotProduct(vector2);
Console.WriteLine($"Dot Product: {dot}"); // 32.0| μμ | μ±λ₯ | κΈ°μ€ | μν |
|---|---|---|---|
| μ§λ ¬ν (200K items) | 622,500 items/sec | > 100,000 | β |
| λμ μ°μ° (20 threads) | 1,352,216 ops/sec | > 1,000,000 | β |
| λ©λͺ¨λ¦¬ ν¨μ¨ | μ°μ | μνΈ μ΄μ | β |
Cosine Similarity: ββββββββββββββββ 1.0M ops/sec
Euclidean Distance: ββββββββββββββ 0.95M ops/sec
Manhattan Distance: ββββββββββββββββββ 1.2M ops/sec
Dot Product: ββββββββββββββββββββ 1.4M ops/sec
Vector Magnitude: ββββββββββββββββ 1.0M ops/sec
Zero-Copy-Vector-Store/
βββ README.md # μ΄ νμΌ
βββ MandateDB.sln # .NET μ루μ
βββ src/
β βββ MandateDB.Core/
β βββ Models/
β β βββ VectorData.cs # ν΅μ¬: Zero-Copy λ²‘ν° κ΅¬μ‘°
β βββ Extensions/
β βββ VectorExtensions.cs # ν΅μ¬: SIMD μ΅μ ν μ°μ°
βββ tests/
β βββ MandateDB.Core.Tests/
β βββ VectorExtensionsTests.cs # κΈ°λ³Έ ν
μ€νΈ
β βββ VectorExtensionsAdvancedTests.cs # μ±λ₯ ν
μ€νΈ
βββ docs/
βββ ARCHITECTURE.md # μν€ν
μ² μ€λͺ
βββ API_SPECIFICATION.md # API λͺ
μΈ
βββ CORE_CONCEPT.md # Zero-Copy κ°λ
public readonly struct VectorData : IEquatable<VectorData>
{
/// <summary>λ²‘ν° κ° (ReadOnlyMemory κΈ°λ°)</summary>
public ReadOnlyMemory<float> Values { get; init; }
/// <summary>λ²‘ν° μ°¨μ μ</summary>
public int Dimensions => Values.Length;
}namespace MandateDB.Core.Extensions
{
// Cosine Similarity (μ½μ¬μΈ μ μ¬λ)
public static float CosineSimilarity(this VectorData a, VectorData b)
// Euclidean Distance (μ ν΄λ¦¬λ 거리)
public static float EuclideanDistance(this VectorData a, VectorData b)
// Manhattan Distance (맨ν΄νΌ 거리)
public static float ManhattanDistance(this VectorData a, VectorData b)
// Dot Product (λ΄μ )
public static float DotProduct(this VectorData a, VectorData b)
// Vector Magnitude (λ²‘ν° ν¬κΈ°)
public static float Magnitude(this VectorData vector)
// Vector Normalize (μ κ·ν)
public static VectorData Normalize(this VectorData vector)
}namespace MandateDB.Core.Extensions
{
// Polynomial Kernel
public static float PolynomialKernel(
this VectorData a, VectorData b,
float degree = 2, float coef0 = 1)
// RBF Kernel
public static float RbfKernel(
this VectorData a, VectorData b,
float gamma = 0.1f)
}β
PASS
λ°μ΄ν°μ
: 200,000 κ° λ²‘ν°
JSON μ§λ ¬ν: 172.49ms
JSON μμ§λ ¬ν: 148.80ms
μ²λ¦¬λ: 622,500 items/sec π
λ©λͺ¨λ¦¬ μ¬μ©: ν¨μ¨μ (GC μ΅μ ν)
β
PASS
λμ μ€λ λ: 20κ°
μ΄ μ°μ°: 10,000ν
μ²λ¦¬μ¨: 1,352,216 ops/sec β‘
μ±κ³΅λ₯ : 100% (20/20)
κ²½μ 쑰건: κ°μ§ μ λ¨
# λͺ¨λ ν
μ€νΈ μ€ν
dotnet test
# νΉμ νλ‘μ νΈλ§ ν
μ€νΈ
dotnet test tests/MandateDB.Core.Tests
# μ±λ₯ ν
μ€νΈ
dotnet test tests/MandateDB.Core.Tests --filter "Category=Performance"- κΈ°λ³Έ ν μ€νΈ: 45κ° (Core models & SIMD)
- μ±λ₯ ν μ€νΈ: 20κ° (Vector operations)
- μ£μ§ μΌμ΄μ€: 15κ° (Edge cases & special scenarios)
- μ΄: 80+ ν μ€νΈ, 100% ν΅κ³Ό
- β
ReadOnlyMemory<float>μ¬μ©μΌλ‘ λ©λͺ¨λ¦¬ μμ μ± λ³΄μ₯ - β λ©λͺ¨λ¦¬ λμ μμ (GC μ΅μ ν)
- β λ²νΌ μ€λ²νλ‘μ° λ°©μ§
- β
λΆλ³ ꡬ쑰 (
readonly struct) - β κ²½μ 쑰건 μμ
- β λ©ν°μ€λ λ νκ²½μμ μμ
- ARCHITECTURE.md - μμ€ν μν€ν μ²
- CORE_CONCEPT.md - Zero-Copy κ°λ μ€λͺ
- API_SPECIFICATION.md - μ 체 API λͺ μΈ
- COMPARISON.md - λ€λ₯Έ λ²‘ν° DBμμ λΉκ΅
// νΉμ§ λ²‘ν° μ μ¬λ κ²μ
var features = LoadFeatureVectors();
var query = new VectorData { Values = userQuery.AsMemory() };
foreach (var feature in features)
{
float similarity = query.CosineSimilarity(feature);
if (similarity > 0.8f)
results.Add(feature);
}// μλ² λ© λ²‘ν° κ° κ±°λ¦¬ κ³μ°
float distance = queryEmbedding.EuclideanDistance(docEmbedding);
if (distance < threshold)
relevantDocs.Add(doc);// μΆμ² μμ€ν
μμ μ μ¬λ κΈ°λ° μμ μ§μ
var userVector = GetUserEmbedding(userId);
var itemVectors = GetItemEmbeddings();
var recommendations = itemVectors
.Select(item => new {
Item = item,
Score = userVector.CosineSimilarity(item)
})
.OrderByDescending(x => x.Score)
.Take(10);- μ²λ¦¬λ: 622,500 items/sec
- μ§μ°μκ°: ~1.6ΞΌs per operation
- λ©λͺ¨λ¦¬: ~4 bytes per dimension (float32)
- GPU κ°μ (CUDA/OpenCL) - 10λ°° μ±λ₯ ν₯μ
- λΆμ° μ²λ¦¬ (Distributed Vector DB)
- Quantization (8-bit, 4-bit μ λ°λ)
λ²κ·Έ 리ν¬νΈλ κΈ°λ₯ μμ²μ GitHub Issuesμμ μ μΆν΄μ£ΌμΈμ.
# κ°λ° νκ²½ μ€μ
git clone https://github.com/kimjindol2025/Zero-Copy-Vector-Store.git
cd Zero-Copy-Vector-Store
dotnet restore
dotnet build
dotnet testMIT License - μμ λ‘κ² μ¬μ©, μμ , λ°°ν¬ κ°λ₯
- Zero-Copy-DB - μμ ν λ°μ΄ν°λ² μ΄μ€ μμ€ν
- Mandate-DB - GOGS μ μ₯μ
- μ΄μ νμΈ: GitHub Issues
- λ¬Έμ κ²μ: docs/
- μ±λ₯ μ΅μ ν: OPTIMIZATION_IMPLEMENTATION.md
λ§μ§λ§ μ λ°μ΄νΈ: 2026-02-13 μΈμ¦ μν: π’ ACTIVE (ZCDB-2026-0213-001)
μ΄ λ²‘ν° λ°μ΄ν°λ² μ΄μ€λ Server 253μμ 곡μμ μΌλ‘ νκ°λμμ΅λλ€.