| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
A .NET port of Eclipse Store - Ultra-fast pure object graph persistence. Migration In Progress 🚧
NebulaStore provides .NET developers with high-performance, pure object graph storage capabilities similar to Eclipse Store for Java developers. This project is actively porting core Eclipse Store modules to .NET.
NebulaStore provides .NET developers with the same high-performance, pure object graph storage capabilities that Eclipse Store offers to Java developers. This project ports the core storage modules and architecture of Eclipse Store to work natively with .NET objects and the .NET runtime.
This project ports the following Eclipse Store modules from the original Java repository:
The module structure exactly mirrors the Eclipse Store Java repository for familiarity and consistency.
| Eclipse Store Java | NebulaStore .NET | Status |
|---|---|---|
| storage/embedded | storage/embedded/ | ✅ Complete |
| storage/embedded-configuration | storage/embedded-configuration/ | ✅ Complete |
| storage/storage | storage/storage/ | ✅ Complete |
| afs/blobstore | afs/blobstore/ | ✅ Complete |
| afs/aws/s3 | afs/aws/s3/ | ✅ Complete |
| afs/azure/storage | afs/azure/storage/ | ✅ Complete |
| afs/googlecloud/firestore | afs/googlecloud/firestore/ | ✅ Complete |
| gigamap/gigamap | gigamap/ | ✅ Complete |
Current Status: Core Modules Complete - Successfully ported essential Eclipse Store functionality to .NET with working storage engine, configuration system, and high-performance collections.
This project ports code from the Eclipse Store Java repository. Key source modules:
The .NET implementation maintains the same module structure, interfaces, and design patterns as the original Eclipse Store Java code while adapting to .NET conventions and leveraging C# language features.
NebulaStore follows the Eclipse Store module structure:
# Clone the repository
git clone https://github.com/hadv/NebulaStore.git
cd NebulaStore
# Restore dependencies
dotnet restore
# Build the solution
dotnet build# Run all unit tests
dotnet test
# Run tests with detailed output
dotnet test --verbosity normal
# Run AFS blobstore tests
dotnet test afs/blobstore/test/
# Run AFS integration tests
dotnet test afs/tests/
# Run AWS S3 tests
dotnet test afs/aws/s3/test/
# Run Azure Storage tests
dotnet test afs/azure/storage/test/
# Run GigaMap performance tests and benchmarks
dotnet test gigamap/tests/
# Run specific test project
dotnet test tests/NebulaStore.Core.Tests/using NebulaStore.Storage.Embedded;
// Start with default configuration
using var storage = EmbeddedStorage.Start();
// Get the root object
var root = storage.Root<MyDataClass>();
root.SomeProperty = "value";
// Persist changes with ACID transaction
storage.StoreRoot();
// Query objects with LINQ (Eclipse Store compatible)
var results = storage.Query<SomeType>().Where(x => x.Condition).ToList();using NebulaStore.GigaMap;
// Create high-performance indexed collection with Eclipse Store API
var gigaMap = GigaMap.Builder<Person>()
.WithBitmapIndex(Indexer.Property<Person, string>("Department", p => p.Department))
.WithBitmapUniqueIndex(Indexer.Property<Person, string>("Email", p => p.Email))
.WithBitmapIndex(Indexer.StringIgnoreCase<Person>("Name", p => p.Name))
.Build();
// Add data with ACID transactions
gigaMap.Add(new Person { Name = "John", Department = "Engineering", Email = "john@company.com" });
gigaMap.Add(new Person { Name = "Jane", Department = "Marketing", Email = "jane@company.com" });
// Advanced querying with LINQ (Eclipse Store pattern)
var engineers = gigaMap.Where(p => p.Department == "Engineering").ToList();
var johnDoe = gigaMap.FirstOrDefault(p => p.Name.Contains("John"));
// Case-insensitive queries work correctly
var caseInsensitive = gigaMap.Where(p => p.Name == "JOHN").ToList(); // Finds "John"
// Index statistics and monitoring
var departmentIndex = gigaMap.Index.Bitmap.Get("Department");
Console.WriteLine($"Unique departments: {departmentIndex.Size}");
var stats = departmentIndex.CreateStatistics();
Console.WriteLine($"Total entities: {stats.TotalEntityCount}");
Console.WriteLine($"Unique keys: {stats.UniqueKeyCount}");var config = EmbeddedStorageConfiguration.New()
.SetStorageDirectory("my-storage")
.SetChannelCount(4)
.SetEntityCacheThreshold(2000000)
.Build();
using var storage = EmbeddedStorage.Start(config);// Start with AFS blob storage
using var storage = EmbeddedStorage.StartWithAfs("afs-storage");
// Custom AFS configuration
var afsConfig = EmbeddedStorageConfiguration.New()
.SetStorageDirectory("my-afs-storage")
.SetUseAfs(true)
.SetAfsStorageType("blobstore")
.SetAfsUseCache(true)
.Build();
using var afsStorage = EmbeddedStorage.StartWithAfs(afsConfig);using NebulaStore.Afs.Aws.S3;
// Start with S3 storage
using var storage = EmbeddedStorage.StartWithS3("my-bucket", "storage-prefix");
// Custom S3 configuration
var s3Config = EmbeddedStorageConfiguration.New()
.UseS3("my-bucket", "storage-prefix")
.SetChannelCount(4)
.Build();
using var s3Storage = EmbeddedStorage.Foundation(s3Config).Start();using NebulaStore.Afs.Azure.Storage;
// Start with Azure Storage
using var storage = EmbeddedStorage.StartWithAzure("connection-string", "container-name");
// Custom Azure configuration
var azureConfig = EmbeddedStorageConfiguration.New()
.UseAzureStorage("connection-string", "container-name")
.SetChannelCount(4)
.Build();
using var azureStorage = EmbeddedStorage.Foundation(azureConfig).Start();using NebulaStore.Afs.GoogleCloud.Firestore;
using NebulaStore.Storage.Embedded;
using NebulaStore.Storage.EmbeddedConfiguration;
// Start with Google Cloud Firestore
using var storage = EmbeddedStorage.StartWithFirestore("your-project-id");
// Custom Firestore configuration
var firestoreConfig = EmbeddedStorageConfiguration.New()
.UseFirestore("your-project-id", "my-storage", useCache: true)
.SetChannelCount(4)
.Build();
using var firestoreStorage = EmbeddedStorage.Foundation(firestoreConfig).Start();var myRoot = new MyDataClass { SomeProperty = "initial" };
using var storage = EmbeddedStorage.Start(myRoot, "storage-dir");// Access comprehensive monitoring
var monitoringManager = storage.GetMonitoringManager();
// Storage statistics
var stats = monitoringManager.StorageManagerMonitor.StorageStatistics;
Console.WriteLine($"Usage Ratio: {stats.UsageRatio:P2}");
// Entity cache metrics
var cacheMonitor = monitoringManager.EntityCacheSummaryMonitor;
Console.WriteLine($"Cached Entities: {cacheMonitor.EntityCount}");
// Trigger housekeeping operations
monitoringManager.StorageManagerMonitor.IssueFullGarbageCollection();using var storer = storage.CreateStorer();
var objectIds = storer.StoreAll(obj1, obj2, obj3);
storer.Commit();await storage.CreateBackupAsync("backup-directory");// Comprehensive performance monitoring
var monitoringManager = storage.GetMonitoringManager();
// Storage statistics with detailed metrics
var stats = monitoringManager.StorageManagerMonitor.StorageStatistics;
Console.WriteLine($"Storage Usage: {stats.UsageRatio:P2}");
Console.WriteLine($"Total Objects: {stats.ObjectCount}");
// GigaMap performance statistics
var departmentIndex = gigaMap.Index.Bitmap.Get("Department");
var indexStats = departmentIndex.CreateStatistics();
Console.WriteLine($"Index Size: {indexStats.UniqueKeyCount} unique keys");
Console.WriteLine($"Total Entities: {indexStats.TotalEntityCount}");
Console.WriteLine($"Memory Usage: {indexStats.TotalDataMemorySize} bytes");
// Trigger maintenance operations
monitoringManager.StorageManagerMonitor.IssueFullGarbageCollection();The examples/ directory contains comprehensive examples demonstrating NebulaStore features:
Run the examples:
cd examples/ConsoleApp
dotnet run
# Run specific example
dotnet run -- --example GigaMapAdvanced
dotnet run -- --example Transactions
dotnet run -- --example ProductionCurrent Progress: Core Functionality Complete 🚀
The migration has successfully implemented essential Eclipse Store functionality for .NET, providing a solid foundation for object graph persistence.
NebulaStore currently provides:
The core migration is complete, but we welcome contributions for:
🎯 Eclipse Store for .NET - Core Implementation Complete! NebulaStore provides ultra-fast, pure object graph persistence similar to Eclipse Store for Java developers, now available for the .NET ecosystem with core functionality and native C# integration.
| Back | FazBrowse Home | New Git URL |