@nahisaho/yata-scale 1.8.5

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.
Files changed (158) hide show
  1. package/README.md +66 -0
  2. package/dist/CacheManager.d.ts +107 -0
  3. package/dist/CacheManager.d.ts.map +1 -0
  4. package/dist/CacheManager.js +343 -0
  5. package/dist/CacheManager.js.map +1 -0
  6. package/dist/IndexManager.d.ts +103 -0
  7. package/dist/IndexManager.d.ts.map +1 -0
  8. package/dist/IndexManager.js +385 -0
  9. package/dist/IndexManager.js.map +1 -0
  10. package/dist/MigrationHelper.d.ts +91 -0
  11. package/dist/MigrationHelper.d.ts.map +1 -0
  12. package/dist/MigrationHelper.js +220 -0
  13. package/dist/MigrationHelper.js.map +1 -0
  14. package/dist/QueryCoordinator.d.ts +76 -0
  15. package/dist/QueryCoordinator.d.ts.map +1 -0
  16. package/dist/QueryCoordinator.js +298 -0
  17. package/dist/QueryCoordinator.js.map +1 -0
  18. package/dist/ShardManager.d.ts +48 -0
  19. package/dist/ShardManager.d.ts.map +1 -0
  20. package/dist/ShardManager.js +193 -0
  21. package/dist/ShardManager.js.map +1 -0
  22. package/dist/SyncController.d.ts +102 -0
  23. package/dist/SyncController.d.ts.map +1 -0
  24. package/dist/SyncController.js +286 -0
  25. package/dist/SyncController.js.map +1 -0
  26. package/dist/YataScaleManager.d.ts +75 -0
  27. package/dist/YataScaleManager.d.ts.map +1 -0
  28. package/dist/YataScaleManager.js +265 -0
  29. package/dist/YataScaleManager.js.map +1 -0
  30. package/dist/cache/CacheManager.d.ts +116 -0
  31. package/dist/cache/CacheManager.d.ts.map +1 -0
  32. package/dist/cache/CacheManager.js +286 -0
  33. package/dist/cache/CacheManager.js.map +1 -0
  34. package/dist/cache/InvalidationManager.d.ts +91 -0
  35. package/dist/cache/InvalidationManager.d.ts.map +1 -0
  36. package/dist/cache/InvalidationManager.js +155 -0
  37. package/dist/cache/InvalidationManager.js.map +1 -0
  38. package/dist/cache/L1Cache.d.ts +97 -0
  39. package/dist/cache/L1Cache.d.ts.map +1 -0
  40. package/dist/cache/L1Cache.js +225 -0
  41. package/dist/cache/L1Cache.js.map +1 -0
  42. package/dist/cache/L2Cache.d.ts +93 -0
  43. package/dist/cache/L2Cache.d.ts.map +1 -0
  44. package/dist/cache/L2Cache.js +248 -0
  45. package/dist/cache/L2Cache.js.map +1 -0
  46. package/dist/cache/L3Cache.d.ts +101 -0
  47. package/dist/cache/L3Cache.d.ts.map +1 -0
  48. package/dist/cache/L3Cache.js +229 -0
  49. package/dist/cache/L3Cache.js.map +1 -0
  50. package/dist/cache/index.d.ts +12 -0
  51. package/dist/cache/index.d.ts.map +1 -0
  52. package/dist/cache/index.js +11 -0
  53. package/dist/cache/index.js.map +1 -0
  54. package/dist/errors.d.ts +255 -0
  55. package/dist/errors.d.ts.map +1 -0
  56. package/dist/errors.js +515 -0
  57. package/dist/errors.js.map +1 -0
  58. package/dist/index/BPlusTreeIndex.d.ts +101 -0
  59. package/dist/index/BPlusTreeIndex.d.ts.map +1 -0
  60. package/dist/index/BPlusTreeIndex.js +310 -0
  61. package/dist/index/BPlusTreeIndex.js.map +1 -0
  62. package/dist/index/BloomFilter.d.ts +85 -0
  63. package/dist/index/BloomFilter.d.ts.map +1 -0
  64. package/dist/index/BloomFilter.js +215 -0
  65. package/dist/index/BloomFilter.js.map +1 -0
  66. package/dist/index/FullTextIndex.d.ts +87 -0
  67. package/dist/index/FullTextIndex.d.ts.map +1 -0
  68. package/dist/index/FullTextIndex.js +213 -0
  69. package/dist/index/FullTextIndex.js.map +1 -0
  70. package/dist/index/GraphIndex.d.ts +116 -0
  71. package/dist/index/GraphIndex.d.ts.map +1 -0
  72. package/dist/index/GraphIndex.js +308 -0
  73. package/dist/index/GraphIndex.js.map +1 -0
  74. package/dist/index/IndexManager.d.ts +105 -0
  75. package/dist/index/IndexManager.d.ts.map +1 -0
  76. package/dist/index/IndexManager.js +287 -0
  77. package/dist/index/IndexManager.js.map +1 -0
  78. package/dist/index/index.d.ts +12 -0
  79. package/dist/index/index.d.ts.map +1 -0
  80. package/dist/index/index.js +11 -0
  81. package/dist/index/index.js.map +1 -0
  82. package/dist/index.d.ts +12 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +12 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/query/DistributedExecutor.d.ts +78 -0
  87. package/dist/query/DistributedExecutor.d.ts.map +1 -0
  88. package/dist/query/DistributedExecutor.js +232 -0
  89. package/dist/query/DistributedExecutor.js.map +1 -0
  90. package/dist/query/QueryCoordinator.d.ts +98 -0
  91. package/dist/query/QueryCoordinator.d.ts.map +1 -0
  92. package/dist/query/QueryCoordinator.js +246 -0
  93. package/dist/query/QueryCoordinator.js.map +1 -0
  94. package/dist/query/QueryPlanner.d.ts +88 -0
  95. package/dist/query/QueryPlanner.d.ts.map +1 -0
  96. package/dist/query/QueryPlanner.js +235 -0
  97. package/dist/query/QueryPlanner.js.map +1 -0
  98. package/dist/query/WorkerPool.d.ts +108 -0
  99. package/dist/query/WorkerPool.d.ts.map +1 -0
  100. package/dist/query/WorkerPool.js +195 -0
  101. package/dist/query/WorkerPool.js.map +1 -0
  102. package/dist/query/index.d.ts +11 -0
  103. package/dist/query/index.d.ts.map +1 -0
  104. package/dist/query/index.js +10 -0
  105. package/dist/query/index.js.map +1 -0
  106. package/dist/shard/GraphPartitionStrategy.d.ts +65 -0
  107. package/dist/shard/GraphPartitionStrategy.d.ts.map +1 -0
  108. package/dist/shard/GraphPartitionStrategy.js +208 -0
  109. package/dist/shard/GraphPartitionStrategy.js.map +1 -0
  110. package/dist/shard/HashPartitionStrategy.d.ts +56 -0
  111. package/dist/shard/HashPartitionStrategy.d.ts.map +1 -0
  112. package/dist/shard/HashPartitionStrategy.js +169 -0
  113. package/dist/shard/HashPartitionStrategy.js.map +1 -0
  114. package/dist/shard/RangePartitionStrategy.d.ts +63 -0
  115. package/dist/shard/RangePartitionStrategy.d.ts.map +1 -0
  116. package/dist/shard/RangePartitionStrategy.js +157 -0
  117. package/dist/shard/RangePartitionStrategy.js.map +1 -0
  118. package/dist/shard/Rebalancer.d.ts +70 -0
  119. package/dist/shard/Rebalancer.d.ts.map +1 -0
  120. package/dist/shard/Rebalancer.js +184 -0
  121. package/dist/shard/Rebalancer.js.map +1 -0
  122. package/dist/shard/ShardManager.d.ts +123 -0
  123. package/dist/shard/ShardManager.d.ts.map +1 -0
  124. package/dist/shard/ShardManager.js +353 -0
  125. package/dist/shard/ShardManager.js.map +1 -0
  126. package/dist/shard/ShardRouter.d.ts +102 -0
  127. package/dist/shard/ShardRouter.d.ts.map +1 -0
  128. package/dist/shard/ShardRouter.js +181 -0
  129. package/dist/shard/ShardRouter.js.map +1 -0
  130. package/dist/shard/index.d.ts +13 -0
  131. package/dist/shard/index.d.ts.map +1 -0
  132. package/dist/shard/index.js +12 -0
  133. package/dist/shard/index.js.map +1 -0
  134. package/dist/sync/ConflictResolver.d.ts +71 -0
  135. package/dist/sync/ConflictResolver.d.ts.map +1 -0
  136. package/dist/sync/ConflictResolver.js +214 -0
  137. package/dist/sync/ConflictResolver.js.map +1 -0
  138. package/dist/sync/SyncController.d.ts +150 -0
  139. package/dist/sync/SyncController.d.ts.map +1 -0
  140. package/dist/sync/SyncController.js +304 -0
  141. package/dist/sync/SyncController.js.map +1 -0
  142. package/dist/sync/VectorClock.d.ts +102 -0
  143. package/dist/sync/VectorClock.d.ts.map +1 -0
  144. package/dist/sync/VectorClock.js +189 -0
  145. package/dist/sync/VectorClock.js.map +1 -0
  146. package/dist/sync/WALManager.d.ts +120 -0
  147. package/dist/sync/WALManager.d.ts.map +1 -0
  148. package/dist/sync/WALManager.js +240 -0
  149. package/dist/sync/WALManager.js.map +1 -0
  150. package/dist/sync/index.d.ts +11 -0
  151. package/dist/sync/index.d.ts.map +1 -0
  152. package/dist/sync/index.js +10 -0
  153. package/dist/sync/index.js.map +1 -0
  154. package/dist/types.d.ts +323 -0
  155. package/dist/types.d.ts.map +1 -0
  156. package/dist/types.js +7 -0
  157. package/dist/types.js.map +1 -0
  158. package/package.json +86 -0
@@ -0,0 +1,225 @@
1
+ /**
2
+ * @nahisaho/yata-scale - L1 Cache (Hot)
3
+ *
4
+ * In-memory LRU cache for frequently accessed data
5
+ */
6
+ import { LRUCache } from 'lru-cache';
7
+ /**
8
+ * L1 Cache - Hot tier, in-memory LRU
9
+ */
10
+ export class L1Cache {
11
+ entityCache;
12
+ relationshipCache;
13
+ hits = 0;
14
+ misses = 0;
15
+ constructor(maxEntries = 10000) {
16
+ const options = {
17
+ max: maxEntries,
18
+ updateAgeOnGet: true,
19
+ updateAgeOnHas: true,
20
+ };
21
+ this.entityCache = new LRUCache(options);
22
+ this.relationshipCache = new LRUCache(options);
23
+ }
24
+ /**
25
+ * Get entity from cache
26
+ */
27
+ getEntity(id) {
28
+ const entry = this.entityCache.get(id);
29
+ if (entry) {
30
+ this.hits++;
31
+ entry.accessCount++;
32
+ entry.lastAccess = new Date();
33
+ return entry.value;
34
+ }
35
+ this.misses++;
36
+ return undefined;
37
+ }
38
+ /**
39
+ * Set entity in cache
40
+ */
41
+ setEntity(entity) {
42
+ this.entityCache.set(entity.id, {
43
+ value: entity,
44
+ accessCount: 1,
45
+ lastAccess: new Date(),
46
+ });
47
+ }
48
+ /**
49
+ * Delete entity from cache
50
+ */
51
+ deleteEntity(id) {
52
+ return this.entityCache.delete(id);
53
+ }
54
+ /**
55
+ * Get relationship from cache
56
+ */
57
+ getRelationship(id) {
58
+ const entry = this.relationshipCache.get(id);
59
+ if (entry) {
60
+ this.hits++;
61
+ entry.accessCount++;
62
+ entry.lastAccess = new Date();
63
+ return entry.value;
64
+ }
65
+ this.misses++;
66
+ return undefined;
67
+ }
68
+ /**
69
+ * Set relationship in cache
70
+ */
71
+ setRelationship(relationship) {
72
+ this.relationshipCache.set(relationship.id, {
73
+ value: relationship,
74
+ accessCount: 1,
75
+ lastAccess: new Date(),
76
+ });
77
+ }
78
+ /**
79
+ * Delete relationship from cache
80
+ */
81
+ deleteRelationship(id) {
82
+ return this.relationshipCache.delete(id);
83
+ }
84
+ /**
85
+ * Check if entity exists in cache
86
+ */
87
+ hasEntity(id) {
88
+ return this.entityCache.has(id);
89
+ }
90
+ /**
91
+ * Check if relationship exists in cache
92
+ */
93
+ hasRelationship(id) {
94
+ return this.relationshipCache.has(id);
95
+ }
96
+ /**
97
+ * Get multiple entities
98
+ */
99
+ getEntities(ids) {
100
+ const result = new Map();
101
+ for (const id of ids) {
102
+ const entity = this.getEntity(id);
103
+ if (entity) {
104
+ result.set(id, entity);
105
+ }
106
+ }
107
+ return result;
108
+ }
109
+ /**
110
+ * Set multiple entities
111
+ */
112
+ setEntities(entities) {
113
+ for (const entity of entities) {
114
+ this.setEntity(entity);
115
+ }
116
+ }
117
+ /**
118
+ * Clear all caches
119
+ */
120
+ clear() {
121
+ this.entityCache.clear();
122
+ this.relationshipCache.clear();
123
+ this.hits = 0;
124
+ this.misses = 0;
125
+ }
126
+ /**
127
+ * Get hot keys (most accessed)
128
+ */
129
+ getHotKeys(limit = 10) {
130
+ const entries = [];
131
+ for (const [key, entry] of this.entityCache.entries()) {
132
+ entries.push({ key, accessCount: entry.accessCount });
133
+ }
134
+ for (const [key, entry] of this.relationshipCache.entries()) {
135
+ entries.push({ key, accessCount: entry.accessCount });
136
+ }
137
+ return entries
138
+ .sort((a, b) => b.accessCount - a.accessCount)
139
+ .slice(0, limit)
140
+ .map((e) => e.key);
141
+ }
142
+ /**
143
+ * Prewarm cache with entities
144
+ */
145
+ prewarm(entities) {
146
+ for (const entity of entities) {
147
+ this.setEntity(entity);
148
+ }
149
+ }
150
+ /**
151
+ * Get cache statistics
152
+ */
153
+ getStats() {
154
+ const total = this.hits + this.misses;
155
+ return {
156
+ tier: 'L1',
157
+ hitCount: this.hits,
158
+ missCount: this.misses,
159
+ hitRate: total > 0 ? this.hits / total : 0,
160
+ entryCount: this.entityCache.size + this.relationshipCache.size,
161
+ sizeBytes: this.estimateSize(),
162
+ evictionCount: 0, // LRU cache doesn't expose this directly
163
+ };
164
+ }
165
+ /**
166
+ * Estimate memory size
167
+ */
168
+ estimateSize() {
169
+ let size = 0;
170
+ for (const [, entry] of this.entityCache.entries()) {
171
+ size += this.estimateEntitySize(entry.value);
172
+ }
173
+ for (const [, entry] of this.relationshipCache.entries()) {
174
+ size += this.estimateRelationshipSize(entry.value);
175
+ }
176
+ return size;
177
+ }
178
+ /**
179
+ * Estimate entity size in bytes
180
+ */
181
+ estimateEntitySize(entity) {
182
+ // Rough estimate based on string lengths and object overhead
183
+ let size = 100; // Base overhead
184
+ size += entity.id.length * 2;
185
+ size += entity.name.length * 2;
186
+ size += entity.type.length * 2;
187
+ size += (entity.namespace?.length ?? 0) * 2;
188
+ // Attributes
189
+ for (const [key, value] of Object.entries(entity.attributes)) {
190
+ size += key.length * 2;
191
+ size += String(value).length * 2;
192
+ }
193
+ return size;
194
+ }
195
+ /**
196
+ * Estimate relationship size in bytes
197
+ */
198
+ estimateRelationshipSize(rel) {
199
+ let size = 100;
200
+ size += rel.id.length * 2;
201
+ size += rel.sourceId.length * 2;
202
+ size += rel.targetId.length * 2;
203
+ size += rel.type.length * 2;
204
+ return size;
205
+ }
206
+ /**
207
+ * Get entity count
208
+ */
209
+ get entityCount() {
210
+ return this.entityCache.size;
211
+ }
212
+ /**
213
+ * Get relationship count
214
+ */
215
+ get relationshipCount() {
216
+ return this.relationshipCache.size;
217
+ }
218
+ /**
219
+ * Get total entry count
220
+ */
221
+ get size() {
222
+ return this.entityCache.size + this.relationshipCache.size;
223
+ }
224
+ }
225
+ //# sourceMappingURL=L1Cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"L1Cache.js","sourceRoot":"","sources":["../../src/cache/L1Cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * @nahisaho/yata-scale - L2 Cache (Warm)
3
+ *
4
+ * Compressed in-memory cache for warm data
5
+ */
6
+ import type { CacheStats, Entity, Relationship } from '../types.js';
7
+ /**
8
+ * L2 Cache - Warm tier with compression
9
+ */
10
+ export declare class L2Cache {
11
+ private readonly entities;
12
+ private readonly relationships;
13
+ private readonly maxSize;
14
+ private currentSize;
15
+ private hits;
16
+ private misses;
17
+ private evictions;
18
+ constructor(maxSizeBytes?: number);
19
+ /**
20
+ * Get entity from cache
21
+ */
22
+ getEntity(id: string): Entity | undefined;
23
+ /**
24
+ * Set entity in cache
25
+ */
26
+ setEntity(entity: Entity): void;
27
+ /**
28
+ * Delete entity from cache
29
+ */
30
+ deleteEntity(id: string): boolean;
31
+ /**
32
+ * Get relationship from cache
33
+ */
34
+ getRelationship(id: string): Relationship | undefined;
35
+ /**
36
+ * Set relationship in cache
37
+ */
38
+ setRelationship(relationship: Relationship): void;
39
+ /**
40
+ * Delete relationship from cache
41
+ */
42
+ deleteRelationship(id: string): boolean;
43
+ /**
44
+ * Compress data (simple JSON + text encoding)
45
+ * In production, would use zstd, lz4, or similar
46
+ */
47
+ private compress;
48
+ /**
49
+ * Decompress data
50
+ */
51
+ private decompress;
52
+ /**
53
+ * Evict least recently used entry
54
+ */
55
+ private evictOne;
56
+ /**
57
+ * Promote entity to L1 (returns it for L1 to cache)
58
+ */
59
+ promoteEntity(id: string): Entity | undefined;
60
+ /**
61
+ * Demote entity from L1 (accepts and caches it)
62
+ */
63
+ demoteEntity(entity: Entity): void;
64
+ /**
65
+ * Clear all caches
66
+ */
67
+ clear(): void;
68
+ /**
69
+ * Get compression ratio
70
+ */
71
+ getCompressionRatio(): number;
72
+ /**
73
+ * Get cache statistics
74
+ */
75
+ getStats(): CacheStats;
76
+ /**
77
+ * Get entity count
78
+ */
79
+ get entityCount(): number;
80
+ /**
81
+ * Get relationship count
82
+ */
83
+ get relationshipCount(): number;
84
+ /**
85
+ * Get total entry count
86
+ */
87
+ get size(): number;
88
+ /**
89
+ * Get current size in bytes
90
+ */
91
+ get sizeBytes(): number;
92
+ }
93
+ //# sourceMappingURL=L2Cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"L2Cache.d.ts","sourceRoot":"","sources":["../../src/cache/L2Cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAmB,MAAM,aAAa,CAAC;AAYrF;;GAEG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2C;IACpE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2C;IACzE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,SAAS,CAAa;gBAElB,YAAY,GAAE,MAA0B;IAKpD;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAYzC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAwB/B;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAUjC;;OAEG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAYrD;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAyBjD;;OAEG;IACH,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAUvC;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAKhB;;OAEG;IACH,OAAO,CAAC,UAAU;IAKlB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAiChB;;OAEG;IACH,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAQ7C;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACH,KAAK,IAAI,IAAI;IASb;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAiB7B;;OAEG;IACH,QAAQ,IAAI,UAAU;IAatB;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;CACF"}
@@ -0,0 +1,248 @@
1
+ /**
2
+ * @nahisaho/yata-scale - L2 Cache (Warm)
3
+ *
4
+ * Compressed in-memory cache for warm data
5
+ */
6
+ /**
7
+ * L2 Cache - Warm tier with compression
8
+ */
9
+ export class L2Cache {
10
+ entities = new Map();
11
+ relationships = new Map();
12
+ maxSize;
13
+ currentSize = 0;
14
+ hits = 0;
15
+ misses = 0;
16
+ evictions = 0;
17
+ constructor(maxSizeBytes = 100 * 1024 * 1024) {
18
+ // Default 100MB
19
+ this.maxSize = maxSizeBytes;
20
+ }
21
+ /**
22
+ * Get entity from cache
23
+ */
24
+ getEntity(id) {
25
+ const entry = this.entities.get(id);
26
+ if (entry) {
27
+ this.hits++;
28
+ entry.accessCount++;
29
+ entry.lastAccess = new Date();
30
+ return this.decompress(entry.compressed);
31
+ }
32
+ this.misses++;
33
+ return undefined;
34
+ }
35
+ /**
36
+ * Set entity in cache
37
+ */
38
+ setEntity(entity) {
39
+ const compressed = this.compress(entity);
40
+ const entry = {
41
+ compressed,
42
+ originalSize: JSON.stringify(entity).length,
43
+ accessCount: 1,
44
+ lastAccess: new Date(),
45
+ };
46
+ // Evict if necessary
47
+ while (this.currentSize + compressed.length > this.maxSize && this.entities.size > 0) {
48
+ this.evictOne();
49
+ }
50
+ // Remove existing entry size if updating
51
+ const existing = this.entities.get(entity.id);
52
+ if (existing) {
53
+ this.currentSize -= existing.compressed.length;
54
+ }
55
+ this.entities.set(entity.id, entry);
56
+ this.currentSize += compressed.length;
57
+ }
58
+ /**
59
+ * Delete entity from cache
60
+ */
61
+ deleteEntity(id) {
62
+ const entry = this.entities.get(id);
63
+ if (entry) {
64
+ this.currentSize -= entry.compressed.length;
65
+ this.entities.delete(id);
66
+ return true;
67
+ }
68
+ return false;
69
+ }
70
+ /**
71
+ * Get relationship from cache
72
+ */
73
+ getRelationship(id) {
74
+ const entry = this.relationships.get(id);
75
+ if (entry) {
76
+ this.hits++;
77
+ entry.accessCount++;
78
+ entry.lastAccess = new Date();
79
+ return this.decompress(entry.compressed);
80
+ }
81
+ this.misses++;
82
+ return undefined;
83
+ }
84
+ /**
85
+ * Set relationship in cache
86
+ */
87
+ setRelationship(relationship) {
88
+ const compressed = this.compress(relationship);
89
+ const entry = {
90
+ compressed,
91
+ originalSize: JSON.stringify(relationship).length,
92
+ accessCount: 1,
93
+ lastAccess: new Date(),
94
+ };
95
+ while (this.currentSize + compressed.length > this.maxSize &&
96
+ this.relationships.size > 0) {
97
+ this.evictOne();
98
+ }
99
+ const existing = this.relationships.get(relationship.id);
100
+ if (existing) {
101
+ this.currentSize -= existing.compressed.length;
102
+ }
103
+ this.relationships.set(relationship.id, entry);
104
+ this.currentSize += compressed.length;
105
+ }
106
+ /**
107
+ * Delete relationship from cache
108
+ */
109
+ deleteRelationship(id) {
110
+ const entry = this.relationships.get(id);
111
+ if (entry) {
112
+ this.currentSize -= entry.compressed.length;
113
+ this.relationships.delete(id);
114
+ return true;
115
+ }
116
+ return false;
117
+ }
118
+ /**
119
+ * Compress data (simple JSON + text encoding)
120
+ * In production, would use zstd, lz4, or similar
121
+ */
122
+ compress(data) {
123
+ const json = JSON.stringify(data);
124
+ return new TextEncoder().encode(json);
125
+ }
126
+ /**
127
+ * Decompress data
128
+ */
129
+ decompress(compressed) {
130
+ const json = new TextDecoder().decode(compressed);
131
+ return JSON.parse(json);
132
+ }
133
+ /**
134
+ * Evict least recently used entry
135
+ */
136
+ evictOne() {
137
+ let oldestKey = null;
138
+ let oldestTime = Infinity;
139
+ let oldestMap = null;
140
+ // Find oldest in entities
141
+ for (const [key, entry] of this.entities) {
142
+ const time = entry.lastAccess.getTime();
143
+ if (time < oldestTime) {
144
+ oldestTime = time;
145
+ oldestKey = key;
146
+ oldestMap = this.entities;
147
+ }
148
+ }
149
+ // Find oldest in relationships
150
+ for (const [key, entry] of this.relationships) {
151
+ const time = entry.lastAccess.getTime();
152
+ if (time < oldestTime) {
153
+ oldestTime = time;
154
+ oldestKey = key;
155
+ oldestMap = this.relationships;
156
+ }
157
+ }
158
+ if (oldestKey && oldestMap) {
159
+ const entry = oldestMap.get(oldestKey);
160
+ this.currentSize -= entry.compressed.length;
161
+ oldestMap.delete(oldestKey);
162
+ this.evictions++;
163
+ }
164
+ }
165
+ /**
166
+ * Promote entity to L1 (returns it for L1 to cache)
167
+ */
168
+ promoteEntity(id) {
169
+ const entity = this.getEntity(id);
170
+ if (entity) {
171
+ this.deleteEntity(id);
172
+ }
173
+ return entity;
174
+ }
175
+ /**
176
+ * Demote entity from L1 (accepts and caches it)
177
+ */
178
+ demoteEntity(entity) {
179
+ this.setEntity(entity);
180
+ }
181
+ /**
182
+ * Clear all caches
183
+ */
184
+ clear() {
185
+ this.entities.clear();
186
+ this.relationships.clear();
187
+ this.currentSize = 0;
188
+ this.hits = 0;
189
+ this.misses = 0;
190
+ this.evictions = 0;
191
+ }
192
+ /**
193
+ * Get compression ratio
194
+ */
195
+ getCompressionRatio() {
196
+ let originalTotal = 0;
197
+ let compressedTotal = 0;
198
+ for (const entry of this.entities.values()) {
199
+ originalTotal += entry.originalSize;
200
+ compressedTotal += entry.compressed.length;
201
+ }
202
+ for (const entry of this.relationships.values()) {
203
+ originalTotal += entry.originalSize;
204
+ compressedTotal += entry.compressed.length;
205
+ }
206
+ return originalTotal > 0 ? compressedTotal / originalTotal : 1;
207
+ }
208
+ /**
209
+ * Get cache statistics
210
+ */
211
+ getStats() {
212
+ const total = this.hits + this.misses;
213
+ return {
214
+ tier: 'L2',
215
+ hitCount: this.hits,
216
+ missCount: this.misses,
217
+ hitRate: total > 0 ? this.hits / total : 0,
218
+ entryCount: this.entities.size + this.relationships.size,
219
+ sizeBytes: this.currentSize,
220
+ evictionCount: this.evictions,
221
+ };
222
+ }
223
+ /**
224
+ * Get entity count
225
+ */
226
+ get entityCount() {
227
+ return this.entities.size;
228
+ }
229
+ /**
230
+ * Get relationship count
231
+ */
232
+ get relationshipCount() {
233
+ return this.relationships.size;
234
+ }
235
+ /**
236
+ * Get total entry count
237
+ */
238
+ get size() {
239
+ return this.entities.size + this.relationships.size;
240
+ }
241
+ /**
242
+ * Get current size in bytes
243
+ */
244
+ get sizeBytes() {
245
+ return this.currentSize;
246
+ }
247
+ }
248
+ //# sourceMappingURL=L2Cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"L2Cache.js","sourceRoot":"","sources":["../../src/cache/L2Cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * @nahisaho/yata-scale - L3 Cache (Cold)
3
+ *
4
+ * Disk-based cache for cold data using LMDB
5
+ */
6
+ import type { CacheStats, Entity, Relationship } from '../types.js';
7
+ /**
8
+ * L3 Cache - Cold tier, disk-based
9
+ * Note: This is a simplified in-memory simulation.
10
+ * In production, would use LMDB or similar.
11
+ */
12
+ export declare class L3Cache {
13
+ private readonly entities;
14
+ private readonly relationships;
15
+ private readonly maxEntries;
16
+ private hits;
17
+ private misses;
18
+ private evictions;
19
+ constructor(maxEntries?: number);
20
+ /**
21
+ * Get entity from cache
22
+ */
23
+ getEntity(id: string): Promise<Entity | undefined>;
24
+ /**
25
+ * Set entity in cache
26
+ */
27
+ setEntity(entity: Entity): Promise<void>;
28
+ /**
29
+ * Delete entity from cache
30
+ */
31
+ deleteEntity(id: string): Promise<boolean>;
32
+ /**
33
+ * Get relationship from cache
34
+ */
35
+ getRelationship(id: string): Promise<Relationship | undefined>;
36
+ /**
37
+ * Set relationship in cache
38
+ */
39
+ setRelationship(relationship: Relationship): Promise<void>;
40
+ /**
41
+ * Delete relationship from cache
42
+ */
43
+ deleteRelationship(id: string): Promise<boolean>;
44
+ /**
45
+ * Batch get entities
46
+ */
47
+ getEntities(ids: string[]): Promise<Map<string, Entity>>;
48
+ /**
49
+ * Batch set entities
50
+ */
51
+ setEntities(entities: Entity[]): Promise<void>;
52
+ /**
53
+ * Evict oldest entity
54
+ */
55
+ private evictOldestEntity;
56
+ /**
57
+ * Evict oldest relationship
58
+ */
59
+ private evictOldestRelationship;
60
+ /**
61
+ * Promote entity to L2 (returns it for L2 to cache)
62
+ */
63
+ promoteEntity(id: string): Promise<Entity | undefined>;
64
+ /**
65
+ * Demote entity from L2 (accepts and caches it)
66
+ */
67
+ demoteEntity(entity: Entity): Promise<void>;
68
+ /**
69
+ * Clear all caches
70
+ */
71
+ clear(): Promise<void>;
72
+ /**
73
+ * Sync to disk (no-op in this simulation)
74
+ */
75
+ sync(): Promise<void>;
76
+ /**
77
+ * Close the cache
78
+ */
79
+ close(): Promise<void>;
80
+ /**
81
+ * Get cache statistics
82
+ */
83
+ getStats(): CacheStats;
84
+ /**
85
+ * Estimate size in bytes
86
+ */
87
+ private estimateSize;
88
+ /**
89
+ * Get entity count
90
+ */
91
+ get entityCount(): number;
92
+ /**
93
+ * Get relationship count
94
+ */
95
+ get relationshipCount(): number;
96
+ /**
97
+ * Get total entry count
98
+ */
99
+ get size(): number;
100
+ }
101
+ //# sourceMappingURL=L3Cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"L3Cache.d.ts","sourceRoot":"","sources":["../../src/cache/L3Cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAWpE;;;;GAIG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmC;IACjE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,SAAS,CAAa;gBAElB,UAAU,GAAE,MAAgB;IAIxC;;OAEG;IACG,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAYxD;;OAEG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa9C;;OAEG;IACG,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhD;;OAEG;IACG,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAYpE;;OAEG;IACG,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAehE;;OAEG;IACG,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAItD;;OAEG;IACG,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAW9D;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiBzB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAiB/B;;OAEG;IACG,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAQ5D;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;OAEG;IACH,QAAQ,IAAI,UAAU;IAatB;;OAEG;IACH,OAAO,CAAC,YAAY;IAWpB;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}