@sailboat-computer/data-storage
Version:
Shared data storage library for sailboat computer v3
226 lines (187 loc) • 5.08 kB
Markdown
# Sailboat Computer Data Storage
A unified data storage solution for the Sailboat Computer system with resilience features and local storage fallback.
## Features
- **Unified Storage Manager**: A single interface for all storage operations
- **Multiple Storage Tiers**: Support for hot, warm, and cold storage tiers
- **Local Storage Fallback**: Automatic fallback to local storage when remote storage is unavailable
- **Synchronization**: Automatic synchronization between local and remote storage
- **Resilience Features**:
- Circuit breakers to prevent cascading failures
- Retry logic with exponential backoff
- Timeouts for operations
- Bulkhead pattern for isolation
- **Metrics**: Detailed metrics for storage operations and resilience features
## Installation
```bash
npm install @sailboat-computer/data-storage
```
## Usage
### Basic Usage
```typescript
import {
createUnifiedStorageManager,
StorageTier,
StorageConfig
} from '@sailboat-computer/data-storage';
// Create storage configuration
const config: StorageConfig = {
providers: {
hot: {
type: 'redis',
config: {
host: 'localhost',
port: 6379,
password: '',
db: 0,
tls: false
}
},
// Add warm and cold storage providers as needed
batching: {
timeBased: {
enabled: true,
intervalMs: 5000
},
sizeBased: {
enabled: true,
maxBatchSize: 100
},
priorityOverride: true
}
}
};
// Create unified storage manager options
const options = {
localStorage: {
directory: './data',
maxSizeBytes: 100 * 1024 * 1024, // 100MB
encrypt: false,
compressionLevel: 6
},
sync: {
enabled: true,
intervalMs: 60000, // 1 minute
batchSize: 100
},
resilience: {
circuitBreaker: {
failureThreshold: 3,
resetTimeoutMs: 30000 // 30 seconds
},
retry: {
maxRetries: 3,
baseDelayMs: 1000 // 1 second
},
timeout: {
defaultTimeoutMs: 5000 // 5 seconds
}
},
logger: {
level: 'info',
console: true
}
};
// Create and initialize storage manager
const storageManager = createUnifiedStorageManager(config, options);
await storageManager.initialize();
// Store data
const id = await storageManager.store(
{ sensorId: 'temp-1', value: 25.5 },
'sensor-readings',
{
timestamp: new Date(),
tags: { location: 'cabin' },
tier: StorageTier.HOT
}
);
// Retrieve data
const results = await storageManager.retrieve({
category: 'sensor-readings',
timeRange: {
start: new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString(),
end: new Date().toISOString()
}
});
// Close storage manager when done
await storageManager.close();
```
### Advanced Features
#### Local Storage Status
```typescript
const localStatus = await storageManager.getLocalStorageStatus();
console.log('Local storage status:', localStatus);
```
#### Force Synchronization
```typescript
const syncResult = await storageManager.forceSynchronization();
console.log('Synchronization result:', syncResult);
```
#### Resilience Metrics
```typescript
const metrics = storageManager.getResilienceMetrics();
console.log('Resilience metrics:', metrics);
```
## API Reference
### StorageManager
The main interface for storage operations.
```typescript
interface StorageManager {
initialize(): Promise<void>;
close(): Promise<void>;
store(data: any, category: string, options?: StorageOptions): Promise<string>;
retrieve(query: DataQuery, tier?: StorageTier): Promise<StoredData[]>;
update(data: StoredData): Promise<void>;
delete(id: string): Promise<void>;
storeBatch(items: Array<{ data: any; category: string; options?: StorageOptions }>): Promise<string[]>;
retrieveBatch(queries: DataQuery[], tier?: StorageTier): Promise<StoredData[][]>;
cleanup(category: string, tier: StorageTier, retentionDays: number): Promise<CleanupResult>;
migrate(id: string, fromTier: StorageTier, toTier: StorageTier): Promise<void>;
getStatus(): Promise<StorageStatus>;
}
```
### UnifiedStorageManager
Extends the StorageManager interface with additional features.
```typescript
interface UnifiedStorageManager extends StorageManager {
getLocalStorageStatus(): Promise<LocalStorageStatus>;
forceSynchronization(): Promise<SyncResult>;
clearLocalStorage(): Promise<ClearResult>;
getResilienceMetrics(): ResilienceMetrics;
}
```
### StorageTier
```typescript
enum StorageTier {
HOT = 'hot',
WARM = 'warm',
COLD = 'cold'
}
```
### DataQuery
```typescript
interface DataQuery {
category?: string;
timeRange?: {
start?: string;
end?: string;
};
sort?: {
field: string;
order: 'asc' | 'desc';
};
}
```
### StorageOptions
```typescript
interface StorageOptions {
timestamp?: Date;
tags?: Record<string, string>;
tier?: StorageTier;
priority?: 'low' | 'normal' | 'high' | 'critical';
ttl?: number; // Time to live in seconds
}
```
## Examples
See the [examples](./examples) directory for more usage examples.
## License
MIT