@soulcraft/brainy 0.31.0 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +100 -0
- package/dist/brainyData.d.ts +8 -0
- package/dist/coreTypes.d.ts +1 -0
- package/dist/storage/adapters/s3CompatibleStorage.d.ts +75 -0
- package/dist/storage/adapters/s3CompatibleStorage.d.ts.map +1 -1
- package/dist/storage/baseStorage.d.ts +4 -0
- package/dist/storage/baseStorage.d.ts.map +1 -1
- package/dist/storage/cacheManager.d.ts +250 -0
- package/dist/storage/cacheManager.d.ts.map +1 -0
- package/dist/unified.js +1566 -322
- package/dist/unified.min.js +748 -748
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1379,6 +1379,106 @@ terabyte-scale data that can't fit entirely in memory, we provide several approa
|
|
|
1379
1379
|
|
|
1380
1380
|
For detailed information on how to scale Brainy for large datasets, vector dimension standardization, threading implementation, storage testing, and other technical topics, see our comprehensive [Technical Guides](TECHNICAL_GUIDES.md).
|
|
1381
1381
|
|
|
1382
|
+
## Recent Changes and Performance Improvements
|
|
1383
|
+
|
|
1384
|
+
### Enhanced Memory Management and Scalability
|
|
1385
|
+
|
|
1386
|
+
Brainy has been significantly improved to handle larger datasets more efficiently:
|
|
1387
|
+
|
|
1388
|
+
- **Pagination Support**: All data retrieval methods now support pagination to avoid loading entire datasets into memory at once. The deprecated `getAllNouns()` and `getAllVerbs()` methods have been replaced with `getNouns()` and `getVerbs()` methods that support pagination, filtering, and cursor-based navigation.
|
|
1389
|
+
|
|
1390
|
+
- **Multi-level Caching**: A sophisticated three-level caching strategy has been implemented:
|
|
1391
|
+
- **Level 1**: Hot cache (most accessed nodes) - RAM (automatically detecting and adjusting in each environment)
|
|
1392
|
+
- **Level 2**: Warm cache (recent nodes) - OPFS, Filesystem or S3 depending on environment
|
|
1393
|
+
- **Level 3**: Cold storage (all nodes) - OPFS, Filesystem or S3 depending on environment
|
|
1394
|
+
|
|
1395
|
+
- **Adaptive Memory Usage**: The system automatically detects available memory and adjusts cache sizes accordingly:
|
|
1396
|
+
- In Node.js: Uses 10% of free memory (minimum 1000 entries)
|
|
1397
|
+
- In browsers: Scales based on device memory (500 entries per GB, minimum 1000)
|
|
1398
|
+
|
|
1399
|
+
- **Intelligent Cache Eviction**: Implements a Least Recently Used (LRU) policy that evicts the oldest 20% of items when the cache reaches the configured threshold.
|
|
1400
|
+
|
|
1401
|
+
- **Prefetching Strategy**: Implements batch prefetching to improve performance while avoiding overwhelming system resources.
|
|
1402
|
+
|
|
1403
|
+
### S3-Compatible Storage Improvements
|
|
1404
|
+
|
|
1405
|
+
- **Enhanced Cloud Storage**: Improved support for S3-compatible storage services including AWS S3, Cloudflare R2, and others.
|
|
1406
|
+
|
|
1407
|
+
- **Optimized Data Access**: Batch operations and error handling for efficient cloud storage access.
|
|
1408
|
+
|
|
1409
|
+
- **Change Log Management**: Efficient synchronization through change logs to track updates.
|
|
1410
|
+
|
|
1411
|
+
### Data Compatibility
|
|
1412
|
+
|
|
1413
|
+
Yes, you can use existing data indexed from an old version. Brainy includes robust data migration capabilities:
|
|
1414
|
+
|
|
1415
|
+
- **Vector Regeneration**: If vectors are missing in imported data, they will be automatically created using the embedding function.
|
|
1416
|
+
|
|
1417
|
+
- **HNSW Index Reconstruction**: The system can reconstruct the HNSW index from backup data, ensuring compatibility with previous versions.
|
|
1418
|
+
|
|
1419
|
+
- **Sparse Data Import**: Support for importing sparse data (without vectors) through the `importSparseData()` method.
|
|
1420
|
+
|
|
1421
|
+
### System Requirements
|
|
1422
|
+
|
|
1423
|
+
#### Default Mode
|
|
1424
|
+
|
|
1425
|
+
- **Memory**:
|
|
1426
|
+
- Minimum: 512MB RAM
|
|
1427
|
+
- Recommended: 2GB+ RAM for medium datasets, 8GB+ for large datasets
|
|
1428
|
+
|
|
1429
|
+
- **CPU**:
|
|
1430
|
+
- Minimum: 2 cores
|
|
1431
|
+
- Recommended: 4+ cores for better performance with parallel operations
|
|
1432
|
+
|
|
1433
|
+
- **Storage**:
|
|
1434
|
+
- Minimum: 1GB available storage
|
|
1435
|
+
- Recommended: Storage space at least 3x the size of your dataset
|
|
1436
|
+
|
|
1437
|
+
#### Read-Only Mode
|
|
1438
|
+
|
|
1439
|
+
Read-only mode prevents all write operations (add, update, delete) and is optimized for search operations.
|
|
1440
|
+
|
|
1441
|
+
- **Memory**:
|
|
1442
|
+
- Minimum: 256MB RAM
|
|
1443
|
+
- Recommended: 1GB+ RAM
|
|
1444
|
+
|
|
1445
|
+
- **CPU**:
|
|
1446
|
+
- Minimum: 1 core
|
|
1447
|
+
- Recommended: 2+ cores
|
|
1448
|
+
|
|
1449
|
+
- **Storage**:
|
|
1450
|
+
- Minimum: Storage space equal to the size of your dataset
|
|
1451
|
+
- Recommended: 2x the size of your dataset for caching
|
|
1452
|
+
|
|
1453
|
+
- **New Feature**: Lazy loading support in read-only mode for improved performance with large datasets.
|
|
1454
|
+
|
|
1455
|
+
#### Write-Only Mode
|
|
1456
|
+
|
|
1457
|
+
Write-only mode prevents all search operations and is optimized for initial data loading or when you want to optimize for write performance.
|
|
1458
|
+
|
|
1459
|
+
- **Memory**:
|
|
1460
|
+
- Minimum: 512MB RAM
|
|
1461
|
+
- Recommended: 2GB+ RAM
|
|
1462
|
+
|
|
1463
|
+
- **CPU**:
|
|
1464
|
+
- Minimum: 2 cores
|
|
1465
|
+
- Recommended: 4+ cores for faster data ingestion
|
|
1466
|
+
|
|
1467
|
+
- **Storage**:
|
|
1468
|
+
- Minimum: Storage space at least 2x the size of your dataset
|
|
1469
|
+
- Recommended: 4x the size of your dataset for optimal performance
|
|
1470
|
+
|
|
1471
|
+
### Performance Tuning Parameters
|
|
1472
|
+
|
|
1473
|
+
Brainy offers several configuration options for performance tuning:
|
|
1474
|
+
|
|
1475
|
+
- **Hot Cache Size**: Control the maximum number of items to keep in memory.
|
|
1476
|
+
- **Eviction Threshold**: Set the threshold at which cache eviction begins (default: 0.8 or 80% of max size).
|
|
1477
|
+
- **Warm Cache TTL**: Set the time-to-live for items in the warm cache (default: 24 hours).
|
|
1478
|
+
- **Batch Size**: Control the number of items to process in a single batch for operations like prefetching (default: 10).
|
|
1479
|
+
|
|
1480
|
+
These improvements make Brainy more efficient, scalable, and adaptable to different environments and usage patterns.
|
|
1481
|
+
|
|
1382
1482
|
## Testing
|
|
1383
1483
|
|
|
1384
1484
|
Brainy uses Vitest for testing. For detailed information about testing in Brainy, including test configuration, scripts, reporting tools, and best practices, see our [Testing Guide](TESTING.md).
|
package/dist/brainyData.d.ts
CHANGED
|
@@ -65,6 +65,13 @@ export interface BrainyDataConfig {
|
|
|
65
65
|
* When true, all write operations will throw an error
|
|
66
66
|
*/
|
|
67
67
|
readOnly?: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Enable lazy loading in read-only mode
|
|
70
|
+
* When true and in read-only mode, the index is not fully loaded during initialization
|
|
71
|
+
* Nodes are loaded on-demand during search operations
|
|
72
|
+
* This improves startup performance for large datasets
|
|
73
|
+
*/
|
|
74
|
+
lazyLoadInReadOnlyMode?: boolean;
|
|
68
75
|
/**
|
|
69
76
|
* Set the database to write-only mode
|
|
70
77
|
* When true, the index is not loaded into memory and search operations will throw an error
|
|
@@ -183,6 +190,7 @@ export declare class BrainyData<T = any> implements BrainyDataInterface<T> {
|
|
|
183
190
|
private distanceFunction;
|
|
184
191
|
private requestPersistentStorage;
|
|
185
192
|
private readOnly;
|
|
193
|
+
private lazyLoadInReadOnlyMode;
|
|
186
194
|
private writeOnly;
|
|
187
195
|
private storageConfig;
|
|
188
196
|
private useOptimizedIndex;
|
package/dist/coreTypes.d.ts
CHANGED
|
@@ -58,6 +58,8 @@ export declare class S3CompatibleStorage extends BaseStorage {
|
|
|
58
58
|
private activeLocks;
|
|
59
59
|
private changeLogPrefix;
|
|
60
60
|
private operationExecutors;
|
|
61
|
+
private nounCacheManager;
|
|
62
|
+
private verbCacheManager;
|
|
61
63
|
/**
|
|
62
64
|
* Initialize the storage adapter
|
|
63
65
|
* @param options Configuration options for the S3-compatible storage
|
|
@@ -72,6 +74,11 @@ export declare class S3CompatibleStorage extends BaseStorage {
|
|
|
72
74
|
sessionToken?: string;
|
|
73
75
|
serviceType?: string;
|
|
74
76
|
operationConfig?: OperationConfig;
|
|
77
|
+
cacheConfig?: {
|
|
78
|
+
hotCacheMaxSize?: number;
|
|
79
|
+
hotCacheEvictionThreshold?: number;
|
|
80
|
+
warmCacheTTL?: number;
|
|
81
|
+
};
|
|
75
82
|
});
|
|
76
83
|
/**
|
|
77
84
|
* Initialize the storage adapter
|
|
@@ -97,10 +104,27 @@ export declare class S3CompatibleStorage extends BaseStorage {
|
|
|
97
104
|
* Get all nouns from storage (internal implementation)
|
|
98
105
|
*/
|
|
99
106
|
protected getAllNouns_internal(): Promise<HNSWNoun[]>;
|
|
107
|
+
private nodeCache;
|
|
100
108
|
/**
|
|
101
109
|
* Get all nodes from storage
|
|
110
|
+
* @deprecated This method is deprecated and will be removed in a future version.
|
|
111
|
+
* It can cause memory issues with large datasets. Use getNodesWithPagination() instead.
|
|
102
112
|
*/
|
|
103
113
|
protected getAllNodes(): Promise<HNSWNode[]>;
|
|
114
|
+
/**
|
|
115
|
+
* Get nodes with pagination
|
|
116
|
+
* @param options Pagination options
|
|
117
|
+
* @returns Promise that resolves to a paginated result of nodes
|
|
118
|
+
*/
|
|
119
|
+
protected getNodesWithPagination(options?: {
|
|
120
|
+
limit?: number;
|
|
121
|
+
cursor?: string;
|
|
122
|
+
useCache?: boolean;
|
|
123
|
+
}): Promise<{
|
|
124
|
+
nodes: HNSWNode[];
|
|
125
|
+
hasMore: boolean;
|
|
126
|
+
nextCursor?: string;
|
|
127
|
+
}>;
|
|
104
128
|
/**
|
|
105
129
|
* Get nouns by noun type (internal implementation)
|
|
106
130
|
* @param nounType The noun type to filter by
|
|
@@ -139,12 +163,63 @@ export declare class S3CompatibleStorage extends BaseStorage {
|
|
|
139
163
|
protected getEdge(id: string): Promise<Edge | null>;
|
|
140
164
|
/**
|
|
141
165
|
* Get all verbs from storage (internal implementation)
|
|
166
|
+
* @deprecated This method is deprecated and will be removed in a future version.
|
|
167
|
+
* It can cause memory issues with large datasets. Use getVerbsWithPagination() instead.
|
|
142
168
|
*/
|
|
143
169
|
protected getAllVerbs_internal(): Promise<GraphVerb[]>;
|
|
144
170
|
/**
|
|
145
171
|
* Get all edges from storage
|
|
172
|
+
* @deprecated This method is deprecated and will be removed in a future version.
|
|
173
|
+
* It can cause memory issues with large datasets. Use getEdgesWithPagination() instead.
|
|
146
174
|
*/
|
|
147
175
|
protected getAllEdges(): Promise<Edge[]>;
|
|
176
|
+
/**
|
|
177
|
+
* Get edges with pagination
|
|
178
|
+
* @param options Pagination options
|
|
179
|
+
* @returns Promise that resolves to a paginated result of edges
|
|
180
|
+
*/
|
|
181
|
+
protected getEdgesWithPagination(options?: {
|
|
182
|
+
limit?: number;
|
|
183
|
+
cursor?: string;
|
|
184
|
+
useCache?: boolean;
|
|
185
|
+
filter?: {
|
|
186
|
+
sourceId?: string;
|
|
187
|
+
targetId?: string;
|
|
188
|
+
type?: string;
|
|
189
|
+
};
|
|
190
|
+
}): Promise<{
|
|
191
|
+
edges: Edge[];
|
|
192
|
+
hasMore: boolean;
|
|
193
|
+
nextCursor?: string;
|
|
194
|
+
}>;
|
|
195
|
+
/**
|
|
196
|
+
* Filter an edge based on filter criteria
|
|
197
|
+
* @param edge The edge to filter
|
|
198
|
+
* @param filter The filter criteria
|
|
199
|
+
* @returns True if the edge matches the filter, false otherwise
|
|
200
|
+
*/
|
|
201
|
+
private filterEdge;
|
|
202
|
+
/**
|
|
203
|
+
* Get verbs with pagination
|
|
204
|
+
* @param options Pagination options
|
|
205
|
+
* @returns Promise that resolves to a paginated result of verbs
|
|
206
|
+
*/
|
|
207
|
+
getVerbsWithPagination(options?: {
|
|
208
|
+
limit?: number;
|
|
209
|
+
cursor?: string;
|
|
210
|
+
filter?: {
|
|
211
|
+
verbType?: string | string[];
|
|
212
|
+
sourceId?: string | string[];
|
|
213
|
+
targetId?: string | string[];
|
|
214
|
+
service?: string | string[];
|
|
215
|
+
metadata?: Record<string, any>;
|
|
216
|
+
};
|
|
217
|
+
}): Promise<{
|
|
218
|
+
items: GraphVerb[];
|
|
219
|
+
totalCount?: number;
|
|
220
|
+
hasMore: boolean;
|
|
221
|
+
nextCursor?: string;
|
|
222
|
+
}>;
|
|
148
223
|
/**
|
|
149
224
|
* Get verbs by source (internal implementation)
|
|
150
225
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3CompatibleStorage.d.ts","sourceRoot":"","sources":["../../../src/storage/adapters/s3CompatibleStorage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"s3CompatibleStorage.d.ts","sourceRoot":"","sources":["../../../src/storage/adapters/s3CompatibleStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,6 +34,8 @@ export declare abstract class BaseStorage extends BaseStorageAdapter {
|
|
|
34
34
|
getNoun(id: string): Promise<HNSWNoun | null>;
|
|
35
35
|
/**
|
|
36
36
|
* Get all nouns from storage
|
|
37
|
+
* @deprecated This method is deprecated and will be removed in a future version.
|
|
38
|
+
* It can cause memory issues with large datasets. Use getNouns() with pagination instead.
|
|
37
39
|
*/
|
|
38
40
|
getAllNouns(): Promise<HNSWNoun[]>;
|
|
39
41
|
/**
|
|
@@ -56,6 +58,8 @@ export declare abstract class BaseStorage extends BaseStorageAdapter {
|
|
|
56
58
|
getVerb(id: string): Promise<GraphVerb | null>;
|
|
57
59
|
/**
|
|
58
60
|
* Get all verbs from storage
|
|
61
|
+
* @deprecated This method is deprecated and will be removed in a future version.
|
|
62
|
+
* It can cause memory issues with large datasets. Use getVerbs() with pagination instead.
|
|
59
63
|
*/
|
|
60
64
|
getAllVerbs(): Promise<GraphVerb[]>;
|
|
61
65
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseStorage.d.ts","sourceRoot":"","sources":["../../src/storage/baseStorage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AAGrE,eAAO,MAAM,SAAS,UAAU,CAAA;AAChC,eAAO,MAAM,SAAS,UAAU,CAAA;AAChC,eAAO,MAAM,YAAY,aAAa,CAAA;AACtC,eAAO,MAAM,SAAS,UAAU,CAAA;AAChC,eAAO,MAAM,cAAc,eAAe,CAAA;AAE1C;;;GAGG;AACH,8BAAsB,WAAY,SAAQ,kBAAkB;IAC1D,SAAS,CAAC,aAAa,UAAQ;IAE/B;;;OAGG;aACa,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAErC;;OAEG;cACa,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMlD;;OAEG;IACU,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpD;;OAEG;IACU,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAK1D
|
|
1
|
+
{"version":3,"file":"baseStorage.d.ts","sourceRoot":"","sources":["../../src/storage/baseStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Multi-level Cache Manager
|
|
3
|
+
*
|
|
4
|
+
* Implements a three-level caching strategy:
|
|
5
|
+
* - Level 1: Hot cache (most accessed nodes) - RAM (automatically detecting and adjusting in each environment)
|
|
6
|
+
* - Level 2: Warm cache (recent nodes) - OPFS, Filesystem or S3 depending on environment
|
|
7
|
+
* - Level 3: Cold storage (all nodes) - OPFS, Filesystem or S3 depending on environment
|
|
8
|
+
*/
|
|
9
|
+
import { HNSWNoun, GraphVerb } from '../coreTypes.js';
|
|
10
|
+
declare global {
|
|
11
|
+
interface Navigator {
|
|
12
|
+
deviceMemory?: number;
|
|
13
|
+
}
|
|
14
|
+
interface WorkerGlobalScope {
|
|
15
|
+
storage?: {
|
|
16
|
+
getDirectory?: () => Promise<any>;
|
|
17
|
+
[key: string]: any;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
type HNSWNode = HNSWNoun;
|
|
22
|
+
type Edge = GraphVerb;
|
|
23
|
+
interface CacheStats {
|
|
24
|
+
hits: number;
|
|
25
|
+
misses: number;
|
|
26
|
+
evictions: number;
|
|
27
|
+
size: number;
|
|
28
|
+
maxSize: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Multi-level cache manager for efficient data access
|
|
32
|
+
*/
|
|
33
|
+
export declare class CacheManager<T extends HNSWNode | Edge> {
|
|
34
|
+
private hotCache;
|
|
35
|
+
private stats;
|
|
36
|
+
private environment;
|
|
37
|
+
private warmStorageType;
|
|
38
|
+
private coldStorageType;
|
|
39
|
+
private hotCacheMaxSize;
|
|
40
|
+
private hotCacheEvictionThreshold;
|
|
41
|
+
private warmCacheTTL;
|
|
42
|
+
private batchSize;
|
|
43
|
+
private autoTune;
|
|
44
|
+
private lastAutoTuneTime;
|
|
45
|
+
private autoTuneInterval;
|
|
46
|
+
private storageStatistics;
|
|
47
|
+
private warmStorage;
|
|
48
|
+
private coldStorage;
|
|
49
|
+
/**
|
|
50
|
+
* Initialize the cache manager
|
|
51
|
+
* @param options Configuration options
|
|
52
|
+
*/
|
|
53
|
+
constructor(options?: {
|
|
54
|
+
hotCacheMaxSize?: number;
|
|
55
|
+
hotCacheEvictionThreshold?: number;
|
|
56
|
+
warmCacheTTL?: number;
|
|
57
|
+
batchSize?: number;
|
|
58
|
+
autoTune?: boolean;
|
|
59
|
+
warmStorage?: any;
|
|
60
|
+
coldStorage?: any;
|
|
61
|
+
});
|
|
62
|
+
/**
|
|
63
|
+
* Detect the current environment
|
|
64
|
+
*/
|
|
65
|
+
private detectEnvironment;
|
|
66
|
+
/**
|
|
67
|
+
* Detect the optimal cache size based on available memory
|
|
68
|
+
*/
|
|
69
|
+
private detectOptimalCacheSize;
|
|
70
|
+
/**
|
|
71
|
+
* Tune cache parameters based on statistics and environment
|
|
72
|
+
* This method is called periodically if auto-tuning is enabled
|
|
73
|
+
*
|
|
74
|
+
* The auto-tuning process:
|
|
75
|
+
* 1. Retrieves storage statistics if available
|
|
76
|
+
* 2. Tunes each parameter based on statistics and environment
|
|
77
|
+
* 3. Logs the tuned parameters if debug is enabled
|
|
78
|
+
*
|
|
79
|
+
* Auto-tuning helps optimize cache performance by adapting to:
|
|
80
|
+
* - The current environment (Node.js, browser, worker)
|
|
81
|
+
* - Available system resources (memory, CPU)
|
|
82
|
+
* - Usage patterns (read-heavy vs. write-heavy workloads)
|
|
83
|
+
* - Cache efficiency (hit/miss ratios)
|
|
84
|
+
*/
|
|
85
|
+
private tuneParameters;
|
|
86
|
+
/**
|
|
87
|
+
* Tune hot cache size based on statistics and environment
|
|
88
|
+
*
|
|
89
|
+
* The hot cache size is tuned based on:
|
|
90
|
+
* 1. Available memory in the current environment
|
|
91
|
+
* 2. Total number of nodes and edges in the system
|
|
92
|
+
* 3. Cache hit/miss ratio
|
|
93
|
+
*
|
|
94
|
+
* Algorithm:
|
|
95
|
+
* - Start with a size based on available memory
|
|
96
|
+
* - If storage statistics are available, consider caching a percentage of total items
|
|
97
|
+
* - If hit ratio is low, increase the cache size to improve performance
|
|
98
|
+
* - Ensure a reasonable minimum size to maintain basic functionality
|
|
99
|
+
*/
|
|
100
|
+
private tuneHotCacheSize;
|
|
101
|
+
/**
|
|
102
|
+
* Tune eviction threshold based on statistics
|
|
103
|
+
*
|
|
104
|
+
* The eviction threshold determines when items start being evicted from the hot cache.
|
|
105
|
+
* It is tuned based on:
|
|
106
|
+
* 1. Cache hit/miss ratio
|
|
107
|
+
* 2. Operation patterns (read-heavy vs. write-heavy workloads)
|
|
108
|
+
*
|
|
109
|
+
* Algorithm:
|
|
110
|
+
* - Start with a default threshold of 0.8 (80% of max size)
|
|
111
|
+
* - For high hit ratios, increase the threshold to keep more items in cache
|
|
112
|
+
* - For low hit ratios, decrease the threshold to evict items more aggressively
|
|
113
|
+
* - For read-heavy workloads, use a higher threshold
|
|
114
|
+
* - For write-heavy workloads, use a lower threshold
|
|
115
|
+
*/
|
|
116
|
+
private tuneEvictionThreshold;
|
|
117
|
+
/**
|
|
118
|
+
* Tune warm cache TTL based on statistics
|
|
119
|
+
*
|
|
120
|
+
* The warm cache TTL determines how long items remain in the warm cache.
|
|
121
|
+
* It is tuned based on:
|
|
122
|
+
* 1. Update frequency from operation statistics
|
|
123
|
+
*
|
|
124
|
+
* Algorithm:
|
|
125
|
+
* - Start with a default TTL of 24 hours
|
|
126
|
+
* - For frequently updated data, use a shorter TTL
|
|
127
|
+
* - For rarely updated data, use a longer TTL
|
|
128
|
+
*/
|
|
129
|
+
private tuneWarmCacheTTL;
|
|
130
|
+
/**
|
|
131
|
+
* Tune batch size based on statistics and environment
|
|
132
|
+
*
|
|
133
|
+
* The batch size determines how many items are processed in a single batch
|
|
134
|
+
* for operations like prefetching. It is tuned based on:
|
|
135
|
+
* 1. Current environment (Node.js, browser, worker)
|
|
136
|
+
* 2. Available memory
|
|
137
|
+
* 3. Operation patterns
|
|
138
|
+
* 4. Cache hit/miss ratio
|
|
139
|
+
*
|
|
140
|
+
* Algorithm:
|
|
141
|
+
* - Start with a default based on the environment
|
|
142
|
+
* - Adjust based on available memory in browsers
|
|
143
|
+
* - For bulk-heavy workloads, use a larger batch size
|
|
144
|
+
* - For high hit ratios, use smaller batches (items likely in cache)
|
|
145
|
+
* - For low hit ratios, use larger batches (need to fetch more items)
|
|
146
|
+
*/
|
|
147
|
+
private tuneBatchSize;
|
|
148
|
+
/**
|
|
149
|
+
* Detect the appropriate warm storage type based on environment
|
|
150
|
+
*/
|
|
151
|
+
private detectWarmStorageType;
|
|
152
|
+
/**
|
|
153
|
+
* Detect the appropriate cold storage type based on environment
|
|
154
|
+
*/
|
|
155
|
+
private detectColdStorageType;
|
|
156
|
+
/**
|
|
157
|
+
* Initialize warm storage adapter
|
|
158
|
+
*/
|
|
159
|
+
private initializeWarmStorage;
|
|
160
|
+
/**
|
|
161
|
+
* Initialize cold storage adapter
|
|
162
|
+
*/
|
|
163
|
+
private initializeColdStorage;
|
|
164
|
+
/**
|
|
165
|
+
* Get an item from cache, trying each level in order
|
|
166
|
+
* @param id The item ID
|
|
167
|
+
* @returns The cached item or null if not found
|
|
168
|
+
*/
|
|
169
|
+
get(id: string): Promise<T | null>;
|
|
170
|
+
/**
|
|
171
|
+
* Get an item from warm cache
|
|
172
|
+
* @param id The item ID
|
|
173
|
+
* @returns The cached item or null if not found
|
|
174
|
+
*/
|
|
175
|
+
private getFromWarmCache;
|
|
176
|
+
/**
|
|
177
|
+
* Get an item from cold storage
|
|
178
|
+
* @param id The item ID
|
|
179
|
+
* @returns The item or null if not found
|
|
180
|
+
*/
|
|
181
|
+
private getFromColdStorage;
|
|
182
|
+
/**
|
|
183
|
+
* Add an item to hot cache
|
|
184
|
+
* @param id The item ID
|
|
185
|
+
* @param item The item to cache
|
|
186
|
+
*/
|
|
187
|
+
private addToHotCache;
|
|
188
|
+
/**
|
|
189
|
+
* Add an item to warm cache
|
|
190
|
+
* @param id The item ID
|
|
191
|
+
* @param item The item to cache
|
|
192
|
+
*/
|
|
193
|
+
private addToWarmCache;
|
|
194
|
+
/**
|
|
195
|
+
* Evict items from hot cache based on LRU policy
|
|
196
|
+
*/
|
|
197
|
+
private evictFromHotCache;
|
|
198
|
+
/**
|
|
199
|
+
* Set an item in all cache levels
|
|
200
|
+
* @param id The item ID
|
|
201
|
+
* @param item The item to cache
|
|
202
|
+
*/
|
|
203
|
+
set(id: string, item: T): Promise<void>;
|
|
204
|
+
/**
|
|
205
|
+
* Delete an item from all cache levels
|
|
206
|
+
* @param id The item ID to delete
|
|
207
|
+
*/
|
|
208
|
+
delete(id: string): Promise<void>;
|
|
209
|
+
/**
|
|
210
|
+
* Clear all cache levels
|
|
211
|
+
*/
|
|
212
|
+
clear(): Promise<void>;
|
|
213
|
+
/**
|
|
214
|
+
* Get cache statistics
|
|
215
|
+
* @returns Cache statistics
|
|
216
|
+
*/
|
|
217
|
+
getStats(): CacheStats;
|
|
218
|
+
/**
|
|
219
|
+
* Prefetch items based on ID patterns or relationships
|
|
220
|
+
* @param ids Array of IDs to prefetch
|
|
221
|
+
*/
|
|
222
|
+
prefetch(ids: string[]): Promise<void>;
|
|
223
|
+
/**
|
|
224
|
+
* Check if it's time to tune parameters and do so if needed
|
|
225
|
+
* This is called before operations that might benefit from tuned parameters
|
|
226
|
+
*
|
|
227
|
+
* This method serves as a checkpoint for auto-tuning, ensuring that:
|
|
228
|
+
* 1. Parameters are tuned periodically based on the auto-tune interval
|
|
229
|
+
* 2. Tuning happens before critical operations that would benefit from optimized parameters
|
|
230
|
+
* 3. Tuning doesn't happen too frequently, which could impact performance
|
|
231
|
+
*
|
|
232
|
+
* By calling this method before get(), getMany(), and prefetch() operations,
|
|
233
|
+
* we ensure that the cache parameters are optimized for the current workload
|
|
234
|
+
* without adding unnecessary overhead to every operation.
|
|
235
|
+
*/
|
|
236
|
+
private checkAndTuneParameters;
|
|
237
|
+
/**
|
|
238
|
+
* Get multiple items at once, optimizing for batch retrieval
|
|
239
|
+
* @param ids Array of IDs to get
|
|
240
|
+
* @returns Map of ID to item
|
|
241
|
+
*/
|
|
242
|
+
getMany(ids: string[]): Promise<Map<string, T>>;
|
|
243
|
+
/**
|
|
244
|
+
* Set the storage adapters for warm and cold caches
|
|
245
|
+
* @param warmStorage Warm cache storage adapter
|
|
246
|
+
* @param coldStorage Cold storage adapter
|
|
247
|
+
*/
|
|
248
|
+
setStorageAdapters(warmStorage: any, coldStorage: any): void;
|
|
249
|
+
}
|
|
250
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cacheManager.d.ts","sourceRoot":"","sources":["../../src/storage/cacheManager.ts"],"names":[],"mappings":"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"}
|