nickna / Neighborly

An open-source vector database
MIT License
9 stars 2 forks source link

feat: Add MemoryMappedList #46

Closed hangy closed 2 weeks ago

hangy commented 3 weeks ago

## 📝 Description

Adds MemoryMappedList, which uses MemoryMappedFile to store vectors.

🔗 Related Issues

Relates to #13

💡 Additional Notes

Benchmarks

AddBenchmarks.cs ```csharp using BenchmarkDotNet.Attributes; using Neighborly; namespace Benchmarks; [MemoryDiagnoser] public class AddBenchmarks { private static readonly List s_vectorsSmall = Enumerable.Range(0, 100).Select(_ => RandomVectorGenerator.CreateRandomVector(1536)).ToList(); private static readonly List s_vectorsMedium = Enumerable.Range(0, 1_000).Select(_ => RandomVectorGenerator.CreateRandomVector(1536)).ToList(); private static readonly List s_vectorsLarge = Enumerable.Range(0, 10_000).Select(_ => RandomVectorGenerator.CreateRandomVector(1536)).ToList(); [Benchmark] public VectorList ListAddSmall() { var list = new VectorList(); list.AddRange(s_vectorsSmall); return list; } [Benchmark] public VectorListOld ListAddSmallOld() { var list = new VectorListOld(); list.AddRange(s_vectorsSmall); return list; } [Benchmark] public VectorList ListAddMedium() { var list = new VectorList(); list.AddRange(s_vectorsMedium); return list; } [Benchmark] public VectorListOld ListAddMediumOld() { var list = new VectorListOld(); list.AddRange(s_vectorsMedium); return list; } [Benchmark] public VectorList ListAddLarge() { var list = new VectorList(); list.AddRange(s_vectorsLarge); return list; } [Benchmark] public VectorListOld ListAddLargeOld() { var list = new VectorListOld(); list.AddRange(s_vectorsLarge); return list; } } ```
Method Mean Error StdDev Gen0 Gen1 Allocated
ListAddSmall 997.2 us 9.80 us 9.17 us 14.6484 4.8828 760.13 KB
ListAddSmallOld 6,410.8 us 65.38 us 64.21 us 15.6250 7.8125 797.08 KB
ListAddMedium 7,874.5 us 42.59 us 37.75 us 140.6250 - 7559.39 KB
ListAddMediumOld 64,658.4 us 1,181.29 us 986.43 us 125.0000 - 7947.95 KB
ListAddLarge 98,814.9 us 710.74 us 593.50 us 1500.0000 - 75551.85 KB
ListAddLargeOld 636,439.3 us 12,643.37 us 15,051.03 us 1000.0000 - 79854.53 KB