This repository has been archived on 2025-08-03. You can view files and clone it, but cannot push or open issues or pull requests.
network-orbit/docs/docs/core-concepts/database-management.md
anonpenguin f183015f47 Add comprehensive documentation for decorators, migration, and relationships in DebrosFramework
- Introduced hook decorators for lifecycle methods in models.
- Documented @Model decorator for model configuration.
- Added relationship decorators for defining model relationships.
- Created MigrationBuilder and MigrationManager documentation for schema migrations.
- Added QueryExecutor and RelationshipManager documentation for query execution and relationship handling.
- Included examples for complex queries and migration scenarios.
- Developed a social platform example showcasing model relationships and application structure.
- Enhanced contributing guidelines with community, documentation, and release processes.
- Established testing guidelines for unit and integration tests.
2025-07-09 16:43:01 +03:00

2.5 KiB
Raw Blame History

sidebar_position
sidebar_position
2

Database Management

The DatabaseManager class in DebrosFramework manages all aspects of database interaction and lifecycle.

Overview

The DatabaseManager handles:

  • Database creation
  • Connection pooling
  • User-scoped vs global database routing
  • Query execution optimization

Key Features

  1. Connection Management - Manages database connections and pooling.
  2. Sharding Support - Integrates with the ShardManager to support data distribution.
  3. Performance - Caches database instances for efficient access.

Classes

DatabaseManager

class DatabaseManager {
  constructor(
    private orbitDBService: FrameworkOrbitDBService,
    private shardManager: ShardManager,
    private configManager: ConfigManager
  );
}

Methods

getDatabaseForModel

Finds or creates a suitable database for a given model class, considering user-scope or global-scope.

async getDatabaseForModelcT extends BaseModele(
  modelClass: ModelConstructorcTe,
  userId?: string
): PromisecDatabasee

createUserDatabase

Creates a user-centric database using sharding strategies.

async createUserDatabasecT extends BaseModele(
  userId: string,
  modelClass: ModelConstructorcTe
): PromisecDatabasee

Usage Examples

Example: User-scoped Database

@Model({
  scope: 'user',
  type: 'docstore',
  sharding: { strategy: 'hash', count: 4, key: 'id' }
})
class UserProfile extends BaseModel {
   @Field({ type: 'string', required: true })
  userId: string;

  @Field({ type: 'string' })
  bio: string;
}

// Usage
const userDB = await databaseManager.getDatabaseForModel(UserProfile, 'user123');

Example: Global Database

@Model({
  scope: 'global',
  type: 'docstore'
})
class GlobalStats extends BaseModel {
   @Field({ type: 'number' })
  totalUsers: number;

  @Field({ type: 'number' })
  totalInteractions: number;
}

// Usage
const globalDB = await databaseManager.getDatabaseForModel(GlobalStats);

Configuration

Configuration Options

interface DatabaseConfig {
  maxDatabases: number;
  defaultType: StoreType;
  caching: {
    enabled: boolean;
    maxSize: number;
    ttl: number;
  };
}

interface ShardingConfig {
  defaultStrategy: ShardingStrategy;
  defaultCount: number;
}