- 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.
2.5 KiB
2.5 KiB
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
- Connection Management - Manages database connections and pooling.
- Sharding Support - Integrates with the ShardManager to support data distribution.
- 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;
}
Related Documents
- Shard Manager - Handles data sharding and distribution.
- Query Executor - Handles query execution and optimization.