@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.
- package/README.md +66 -0
- package/dist/CacheManager.d.ts +107 -0
- package/dist/CacheManager.d.ts.map +1 -0
- package/dist/CacheManager.js +343 -0
- package/dist/CacheManager.js.map +1 -0
- package/dist/IndexManager.d.ts +103 -0
- package/dist/IndexManager.d.ts.map +1 -0
- package/dist/IndexManager.js +385 -0
- package/dist/IndexManager.js.map +1 -0
- package/dist/MigrationHelper.d.ts +91 -0
- package/dist/MigrationHelper.d.ts.map +1 -0
- package/dist/MigrationHelper.js +220 -0
- package/dist/MigrationHelper.js.map +1 -0
- package/dist/QueryCoordinator.d.ts +76 -0
- package/dist/QueryCoordinator.d.ts.map +1 -0
- package/dist/QueryCoordinator.js +298 -0
- package/dist/QueryCoordinator.js.map +1 -0
- package/dist/ShardManager.d.ts +48 -0
- package/dist/ShardManager.d.ts.map +1 -0
- package/dist/ShardManager.js +193 -0
- package/dist/ShardManager.js.map +1 -0
- package/dist/SyncController.d.ts +102 -0
- package/dist/SyncController.d.ts.map +1 -0
- package/dist/SyncController.js +286 -0
- package/dist/SyncController.js.map +1 -0
- package/dist/YataScaleManager.d.ts +75 -0
- package/dist/YataScaleManager.d.ts.map +1 -0
- package/dist/YataScaleManager.js +265 -0
- package/dist/YataScaleManager.js.map +1 -0
- package/dist/cache/CacheManager.d.ts +116 -0
- package/dist/cache/CacheManager.d.ts.map +1 -0
- package/dist/cache/CacheManager.js +286 -0
- package/dist/cache/CacheManager.js.map +1 -0
- package/dist/cache/InvalidationManager.d.ts +91 -0
- package/dist/cache/InvalidationManager.d.ts.map +1 -0
- package/dist/cache/InvalidationManager.js +155 -0
- package/dist/cache/InvalidationManager.js.map +1 -0
- package/dist/cache/L1Cache.d.ts +97 -0
- package/dist/cache/L1Cache.d.ts.map +1 -0
- package/dist/cache/L1Cache.js +225 -0
- package/dist/cache/L1Cache.js.map +1 -0
- package/dist/cache/L2Cache.d.ts +93 -0
- package/dist/cache/L2Cache.d.ts.map +1 -0
- package/dist/cache/L2Cache.js +248 -0
- package/dist/cache/L2Cache.js.map +1 -0
- package/dist/cache/L3Cache.d.ts +101 -0
- package/dist/cache/L3Cache.d.ts.map +1 -0
- package/dist/cache/L3Cache.js +229 -0
- package/dist/cache/L3Cache.js.map +1 -0
- package/dist/cache/index.d.ts +12 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +11 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/errors.d.ts +255 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +515 -0
- package/dist/errors.js.map +1 -0
- package/dist/index/BPlusTreeIndex.d.ts +101 -0
- package/dist/index/BPlusTreeIndex.d.ts.map +1 -0
- package/dist/index/BPlusTreeIndex.js +310 -0
- package/dist/index/BPlusTreeIndex.js.map +1 -0
- package/dist/index/BloomFilter.d.ts +85 -0
- package/dist/index/BloomFilter.d.ts.map +1 -0
- package/dist/index/BloomFilter.js +215 -0
- package/dist/index/BloomFilter.js.map +1 -0
- package/dist/index/FullTextIndex.d.ts +87 -0
- package/dist/index/FullTextIndex.d.ts.map +1 -0
- package/dist/index/FullTextIndex.js +213 -0
- package/dist/index/FullTextIndex.js.map +1 -0
- package/dist/index/GraphIndex.d.ts +116 -0
- package/dist/index/GraphIndex.d.ts.map +1 -0
- package/dist/index/GraphIndex.js +308 -0
- package/dist/index/GraphIndex.js.map +1 -0
- package/dist/index/IndexManager.d.ts +105 -0
- package/dist/index/IndexManager.d.ts.map +1 -0
- package/dist/index/IndexManager.js +287 -0
- package/dist/index/IndexManager.js.map +1 -0
- package/dist/index/index.d.ts +12 -0
- package/dist/index/index.d.ts.map +1 -0
- package/dist/index/index.js +11 -0
- package/dist/index/index.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/query/DistributedExecutor.d.ts +78 -0
- package/dist/query/DistributedExecutor.d.ts.map +1 -0
- package/dist/query/DistributedExecutor.js +232 -0
- package/dist/query/DistributedExecutor.js.map +1 -0
- package/dist/query/QueryCoordinator.d.ts +98 -0
- package/dist/query/QueryCoordinator.d.ts.map +1 -0
- package/dist/query/QueryCoordinator.js +246 -0
- package/dist/query/QueryCoordinator.js.map +1 -0
- package/dist/query/QueryPlanner.d.ts +88 -0
- package/dist/query/QueryPlanner.d.ts.map +1 -0
- package/dist/query/QueryPlanner.js +235 -0
- package/dist/query/QueryPlanner.js.map +1 -0
- package/dist/query/WorkerPool.d.ts +108 -0
- package/dist/query/WorkerPool.d.ts.map +1 -0
- package/dist/query/WorkerPool.js +195 -0
- package/dist/query/WorkerPool.js.map +1 -0
- package/dist/query/index.d.ts +11 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +10 -0
- package/dist/query/index.js.map +1 -0
- package/dist/shard/GraphPartitionStrategy.d.ts +65 -0
- package/dist/shard/GraphPartitionStrategy.d.ts.map +1 -0
- package/dist/shard/GraphPartitionStrategy.js +208 -0
- package/dist/shard/GraphPartitionStrategy.js.map +1 -0
- package/dist/shard/HashPartitionStrategy.d.ts +56 -0
- package/dist/shard/HashPartitionStrategy.d.ts.map +1 -0
- package/dist/shard/HashPartitionStrategy.js +169 -0
- package/dist/shard/HashPartitionStrategy.js.map +1 -0
- package/dist/shard/RangePartitionStrategy.d.ts +63 -0
- package/dist/shard/RangePartitionStrategy.d.ts.map +1 -0
- package/dist/shard/RangePartitionStrategy.js +157 -0
- package/dist/shard/RangePartitionStrategy.js.map +1 -0
- package/dist/shard/Rebalancer.d.ts +70 -0
- package/dist/shard/Rebalancer.d.ts.map +1 -0
- package/dist/shard/Rebalancer.js +184 -0
- package/dist/shard/Rebalancer.js.map +1 -0
- package/dist/shard/ShardManager.d.ts +123 -0
- package/dist/shard/ShardManager.d.ts.map +1 -0
- package/dist/shard/ShardManager.js +353 -0
- package/dist/shard/ShardManager.js.map +1 -0
- package/dist/shard/ShardRouter.d.ts +102 -0
- package/dist/shard/ShardRouter.d.ts.map +1 -0
- package/dist/shard/ShardRouter.js +181 -0
- package/dist/shard/ShardRouter.js.map +1 -0
- package/dist/shard/index.d.ts +13 -0
- package/dist/shard/index.d.ts.map +1 -0
- package/dist/shard/index.js +12 -0
- package/dist/shard/index.js.map +1 -0
- package/dist/sync/ConflictResolver.d.ts +71 -0
- package/dist/sync/ConflictResolver.d.ts.map +1 -0
- package/dist/sync/ConflictResolver.js +214 -0
- package/dist/sync/ConflictResolver.js.map +1 -0
- package/dist/sync/SyncController.d.ts +150 -0
- package/dist/sync/SyncController.d.ts.map +1 -0
- package/dist/sync/SyncController.js +304 -0
- package/dist/sync/SyncController.js.map +1 -0
- package/dist/sync/VectorClock.d.ts +102 -0
- package/dist/sync/VectorClock.d.ts.map +1 -0
- package/dist/sync/VectorClock.js +189 -0
- package/dist/sync/VectorClock.js.map +1 -0
- package/dist/sync/WALManager.d.ts +120 -0
- package/dist/sync/WALManager.d.ts.map +1 -0
- package/dist/sync/WALManager.js +240 -0
- package/dist/sync/WALManager.js.map +1 -0
- package/dist/sync/index.d.ts +11 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +10 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/types.d.ts +323 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/package.json +86 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @nahisaho/yata-scale - Query Planner
|
|
3
|
+
*
|
|
4
|
+
* Generates optimized query execution plans
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Query planner for generating execution plans
|
|
8
|
+
*/
|
|
9
|
+
export class QueryPlanner {
|
|
10
|
+
indexStats = new Map();
|
|
11
|
+
constructor() { }
|
|
12
|
+
/**
|
|
13
|
+
* Register index statistics
|
|
14
|
+
*/
|
|
15
|
+
registerIndex(stats) {
|
|
16
|
+
this.indexStats.set(stats.name, stats);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Unregister index
|
|
20
|
+
*/
|
|
21
|
+
unregisterIndex(name) {
|
|
22
|
+
this.indexStats.delete(name);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Generate query plan
|
|
26
|
+
*/
|
|
27
|
+
plan(query) {
|
|
28
|
+
const steps = [];
|
|
29
|
+
let stepId = 0;
|
|
30
|
+
// Determine best access method
|
|
31
|
+
const accessStep = this.planAccessPath(query, stepId++);
|
|
32
|
+
steps.push(accessStep);
|
|
33
|
+
// Add filter step if needed
|
|
34
|
+
if (query.filters && query.filters.length > 0) {
|
|
35
|
+
for (const filter of query.filters) {
|
|
36
|
+
const filterStep = this.planFilterStep(filter, stepId++, [accessStep.id]);
|
|
37
|
+
steps.push(filterStep);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// Add traversal steps for graph queries
|
|
41
|
+
if (query.traversal) {
|
|
42
|
+
const traversalStep = this.planTraversalStep(query, stepId++, steps);
|
|
43
|
+
steps.push(traversalStep);
|
|
44
|
+
}
|
|
45
|
+
// Add sort step if needed
|
|
46
|
+
if (query.orderBy) {
|
|
47
|
+
const lastStep = steps[steps.length - 1];
|
|
48
|
+
const sortStep = this.planSortStep(query, stepId++, [lastStep.id]);
|
|
49
|
+
steps.push(sortStep);
|
|
50
|
+
}
|
|
51
|
+
// Add limit step if needed
|
|
52
|
+
if (query.limit !== undefined) {
|
|
53
|
+
const lastStep = steps[steps.length - 1];
|
|
54
|
+
const limitStep = this.planLimitStep(query, stepId++, [lastStep.id]);
|
|
55
|
+
steps.push(limitStep);
|
|
56
|
+
}
|
|
57
|
+
// Calculate total cost
|
|
58
|
+
const totalCost = steps.reduce((sum, step) => sum + step.estimatedCost, 0);
|
|
59
|
+
return {
|
|
60
|
+
query,
|
|
61
|
+
steps: steps.map((s) => ({
|
|
62
|
+
type: s.type,
|
|
63
|
+
target: s.target,
|
|
64
|
+
index: s.index,
|
|
65
|
+
filter: s.filter,
|
|
66
|
+
estimatedCost: s.estimatedCost,
|
|
67
|
+
})),
|
|
68
|
+
estimatedCost: totalCost,
|
|
69
|
+
parallelizable: this.isParallelizable(steps),
|
|
70
|
+
targetShards: this.determineTargetShards(query),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Plan access path (scan vs index)
|
|
75
|
+
*/
|
|
76
|
+
planAccessPath(query, id) {
|
|
77
|
+
// Check if we can use an index
|
|
78
|
+
const bestIndex = this.findBestIndex(query);
|
|
79
|
+
if (bestIndex) {
|
|
80
|
+
return {
|
|
81
|
+
id: `step_${id}`,
|
|
82
|
+
type: 'index',
|
|
83
|
+
target: query.entityTypes?.[0] ?? 'entity',
|
|
84
|
+
index: bestIndex.name,
|
|
85
|
+
dependencies: [],
|
|
86
|
+
estimatedCost: Math.log2(bestIndex.entryCount + 1) * 10,
|
|
87
|
+
estimatedRows: bestIndex.entryCount * bestIndex.selectivity,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
// Fall back to scan
|
|
91
|
+
return {
|
|
92
|
+
id: `step_${id}`,
|
|
93
|
+
type: 'scan',
|
|
94
|
+
target: query.entityTypes?.[0] ?? 'entity',
|
|
95
|
+
dependencies: [],
|
|
96
|
+
estimatedCost: 1000, // Full scan is expensive
|
|
97
|
+
estimatedRows: 10000, // Assume moderate result set
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Find best index for query
|
|
102
|
+
*/
|
|
103
|
+
findBestIndex(query) {
|
|
104
|
+
if (!query.filters || query.filters.length === 0) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
let bestIndex = null;
|
|
108
|
+
let bestSelectivity = 1;
|
|
109
|
+
for (const filter of query.filters) {
|
|
110
|
+
// Look for index on filter field
|
|
111
|
+
const indexName = `idx_${filter.field}`;
|
|
112
|
+
const stats = this.indexStats.get(indexName);
|
|
113
|
+
if (stats && stats.selectivity < bestSelectivity) {
|
|
114
|
+
bestIndex = stats;
|
|
115
|
+
bestSelectivity = stats.selectivity;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return bestIndex;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Plan filter step
|
|
122
|
+
*/
|
|
123
|
+
planFilterStep(filter, id, dependencies) {
|
|
124
|
+
return {
|
|
125
|
+
id: `step_${id}`,
|
|
126
|
+
type: 'filter',
|
|
127
|
+
filter,
|
|
128
|
+
dependencies,
|
|
129
|
+
estimatedCost: 1, // Filter is cheap per row
|
|
130
|
+
estimatedRows: 0, // Depends on previous step
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Plan traversal step
|
|
135
|
+
*/
|
|
136
|
+
planTraversalStep(query, id, previousSteps) {
|
|
137
|
+
const lastStep = previousSteps[previousSteps.length - 1];
|
|
138
|
+
const depth = query.traversal?.maxDepth ?? 1;
|
|
139
|
+
return {
|
|
140
|
+
id: `step_${id}`,
|
|
141
|
+
type: 'join',
|
|
142
|
+
target: 'relationship',
|
|
143
|
+
dependencies: [lastStep.id],
|
|
144
|
+
estimatedCost: depth * 100, // Cost increases with depth
|
|
145
|
+
estimatedRows: lastStep.estimatedRows * Math.pow(5, depth), // Assume 5 avg neighbors
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Plan sort step
|
|
150
|
+
*/
|
|
151
|
+
planSortStep(query, id, dependencies) {
|
|
152
|
+
return {
|
|
153
|
+
id: `step_${id}`,
|
|
154
|
+
type: 'sort',
|
|
155
|
+
target: query.orderBy,
|
|
156
|
+
dependencies,
|
|
157
|
+
estimatedCost: 50, // Sorting is moderately expensive
|
|
158
|
+
estimatedRows: 0, // Same as input
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Plan limit step
|
|
163
|
+
*/
|
|
164
|
+
planLimitStep(query, id, dependencies) {
|
|
165
|
+
return {
|
|
166
|
+
id: `step_${id}`,
|
|
167
|
+
type: 'limit',
|
|
168
|
+
dependencies,
|
|
169
|
+
estimatedCost: 1, // Limit is very cheap
|
|
170
|
+
estimatedRows: query.limit ?? 100,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Check if plan is parallelizable
|
|
175
|
+
*/
|
|
176
|
+
isParallelizable(steps) {
|
|
177
|
+
// Can parallelize if first step is scan or index lookup
|
|
178
|
+
const firstStep = steps[0];
|
|
179
|
+
return firstStep.type === 'scan' || firstStep.type === 'index';
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Determine target shards for query
|
|
183
|
+
*/
|
|
184
|
+
determineTargetShards(query) {
|
|
185
|
+
// If query has specific IDs, can route to specific shards
|
|
186
|
+
if (query.startEntityIds && query.startEntityIds.length > 0) {
|
|
187
|
+
// Would use shard router to determine shards
|
|
188
|
+
return ['shard_determined_by_router'];
|
|
189
|
+
}
|
|
190
|
+
// Otherwise, query all shards
|
|
191
|
+
return ['all'];
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Optimize plan
|
|
195
|
+
*/
|
|
196
|
+
optimize(plan) {
|
|
197
|
+
// Simple optimization: push down filters
|
|
198
|
+
const optimizedSteps = [...plan.steps];
|
|
199
|
+
// Reorder to put cheaper operations first
|
|
200
|
+
optimizedSteps.sort((a, b) => a.estimatedCost - b.estimatedCost);
|
|
201
|
+
return {
|
|
202
|
+
...plan,
|
|
203
|
+
steps: optimizedSteps,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Explain plan in human-readable format
|
|
208
|
+
*/
|
|
209
|
+
explain(plan) {
|
|
210
|
+
const lines = [];
|
|
211
|
+
lines.push('Query Execution Plan');
|
|
212
|
+
lines.push('====================');
|
|
213
|
+
lines.push(`Estimated Total Cost: ${plan.estimatedCost.toFixed(2)}`);
|
|
214
|
+
lines.push(`Parallelizable: ${plan.parallelizable}`);
|
|
215
|
+
lines.push(`Target Shards: ${plan.targetShards.join(', ')}`);
|
|
216
|
+
lines.push('');
|
|
217
|
+
lines.push('Steps:');
|
|
218
|
+
for (let i = 0; i < plan.steps.length; i++) {
|
|
219
|
+
const step = plan.steps[i];
|
|
220
|
+
lines.push(` ${i + 1}. ${step.type.toUpperCase()}`);
|
|
221
|
+
if (step.target) {
|
|
222
|
+
lines.push(` Target: ${step.target}`);
|
|
223
|
+
}
|
|
224
|
+
if (step.index) {
|
|
225
|
+
lines.push(` Index: ${step.index}`);
|
|
226
|
+
}
|
|
227
|
+
if (step.filter) {
|
|
228
|
+
lines.push(` Filter: ${step.filter.field} ${step.filter.operator} ${step.filter.value}`);
|
|
229
|
+
}
|
|
230
|
+
lines.push(` Estimated Cost: ${step.estimatedCost.toFixed(2)}`);
|
|
231
|
+
}
|
|
232
|
+
return lines.join('\n');
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=QueryPlanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QueryPlanner.js","sourceRoot":"","sources":["../../src/query/QueryPlanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @nahisaho/yata-scale - Worker Pool
|
|
3
|
+
*
|
|
4
|
+
* Manages worker threads for parallel query execution
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Task to execute
|
|
8
|
+
*/
|
|
9
|
+
export interface WorkerTask<T, R> {
|
|
10
|
+
readonly id: string;
|
|
11
|
+
readonly data: T;
|
|
12
|
+
readonly execute: (data: T) => Promise<R>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Task result
|
|
16
|
+
*/
|
|
17
|
+
export interface TaskResult<R> {
|
|
18
|
+
readonly taskId: string;
|
|
19
|
+
readonly result?: R;
|
|
20
|
+
readonly error?: Error;
|
|
21
|
+
readonly durationMs: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Worker pool statistics
|
|
25
|
+
*/
|
|
26
|
+
export interface WorkerPoolStats {
|
|
27
|
+
readonly poolSize: number;
|
|
28
|
+
readonly activeTasks: number;
|
|
29
|
+
readonly queuedTasks: number;
|
|
30
|
+
readonly completedTasks: number;
|
|
31
|
+
readonly failedTasks: number;
|
|
32
|
+
readonly avgDurationMs: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Worker pool for parallel task execution
|
|
36
|
+
* Note: In Node.js, this would use worker_threads
|
|
37
|
+
* This is a simplified async implementation
|
|
38
|
+
*/
|
|
39
|
+
export declare class WorkerPool {
|
|
40
|
+
private readonly poolSize;
|
|
41
|
+
private activeTasks;
|
|
42
|
+
private queuedTasks;
|
|
43
|
+
private completedTasks;
|
|
44
|
+
private failedTasks;
|
|
45
|
+
private totalDuration;
|
|
46
|
+
constructor(poolSize?: number);
|
|
47
|
+
/**
|
|
48
|
+
* Submit a task for execution
|
|
49
|
+
*/
|
|
50
|
+
submit<T, R>(task: WorkerTask<T, R>): Promise<TaskResult<R>>;
|
|
51
|
+
/**
|
|
52
|
+
* Execute a task
|
|
53
|
+
*/
|
|
54
|
+
private executeTask;
|
|
55
|
+
/**
|
|
56
|
+
* Process queued tasks
|
|
57
|
+
*/
|
|
58
|
+
private processQueue;
|
|
59
|
+
/**
|
|
60
|
+
* Submit multiple tasks and wait for all
|
|
61
|
+
*/
|
|
62
|
+
submitAll<T, R>(tasks: WorkerTask<T, R>[]): Promise<TaskResult<R>[]>;
|
|
63
|
+
/**
|
|
64
|
+
* Submit multiple tasks and get first result
|
|
65
|
+
*/
|
|
66
|
+
submitRace<T, R>(tasks: WorkerTask<T, R>[]): Promise<TaskResult<R>>;
|
|
67
|
+
/**
|
|
68
|
+
* Map operation over data with parallelism
|
|
69
|
+
*/
|
|
70
|
+
map<T, R>(items: T[], fn: (item: T) => Promise<R>, taskIdPrefix?: string): Promise<R[]>;
|
|
71
|
+
/**
|
|
72
|
+
* Filter operation with parallelism
|
|
73
|
+
*/
|
|
74
|
+
filter<T>(items: T[], predicate: (item: T) => Promise<boolean>, taskIdPrefix?: string): Promise<T[]>;
|
|
75
|
+
/**
|
|
76
|
+
* Reduce operation (sequential with parallel mapping)
|
|
77
|
+
*/
|
|
78
|
+
reduce<T, R>(items: T[], fn: (acc: R, item: T) => Promise<R>, initial: R): Promise<R>;
|
|
79
|
+
/**
|
|
80
|
+
* Get pool statistics
|
|
81
|
+
*/
|
|
82
|
+
getStats(): WorkerPoolStats;
|
|
83
|
+
/**
|
|
84
|
+
* Wait for all active tasks to complete
|
|
85
|
+
*/
|
|
86
|
+
drain(): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Clear queued tasks
|
|
89
|
+
*/
|
|
90
|
+
clear(): void;
|
|
91
|
+
/**
|
|
92
|
+
* Shutdown the pool
|
|
93
|
+
*/
|
|
94
|
+
shutdown(): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Get active task count
|
|
97
|
+
*/
|
|
98
|
+
get activeCount(): number;
|
|
99
|
+
/**
|
|
100
|
+
* Get queued task count
|
|
101
|
+
*/
|
|
102
|
+
get queuedCount(): number;
|
|
103
|
+
/**
|
|
104
|
+
* Check if pool is idle
|
|
105
|
+
*/
|
|
106
|
+
get isIdle(): boolean;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=WorkerPool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerPool.d.ts","sourceRoot":"","sources":["../../src/query/WorkerPool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @nahisaho/yata-scale - Worker Pool
|
|
3
|
+
*
|
|
4
|
+
* Manages worker threads for parallel query execution
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Worker pool for parallel task execution
|
|
8
|
+
* Note: In Node.js, this would use worker_threads
|
|
9
|
+
* This is a simplified async implementation
|
|
10
|
+
*/
|
|
11
|
+
export class WorkerPool {
|
|
12
|
+
poolSize;
|
|
13
|
+
activeTasks = 0;
|
|
14
|
+
queuedTasks = [];
|
|
15
|
+
completedTasks = 0;
|
|
16
|
+
failedTasks = 0;
|
|
17
|
+
totalDuration = 0;
|
|
18
|
+
constructor(poolSize = 4) {
|
|
19
|
+
this.poolSize = poolSize;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Submit a task for execution
|
|
23
|
+
*/
|
|
24
|
+
async submit(task) {
|
|
25
|
+
if (this.activeTasks < this.poolSize) {
|
|
26
|
+
return this.executeTask(task);
|
|
27
|
+
}
|
|
28
|
+
// Queue the task
|
|
29
|
+
return new Promise((resolve) => {
|
|
30
|
+
this.queuedTasks.push({
|
|
31
|
+
resolve: resolve,
|
|
32
|
+
task: task,
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Execute a task
|
|
38
|
+
*/
|
|
39
|
+
async executeTask(task) {
|
|
40
|
+
this.activeTasks++;
|
|
41
|
+
const startTime = Date.now();
|
|
42
|
+
try {
|
|
43
|
+
const result = await task.execute(task.data);
|
|
44
|
+
const durationMs = Date.now() - startTime;
|
|
45
|
+
this.completedTasks++;
|
|
46
|
+
this.totalDuration += durationMs;
|
|
47
|
+
this.activeTasks--;
|
|
48
|
+
// Process next queued task
|
|
49
|
+
this.processQueue();
|
|
50
|
+
return {
|
|
51
|
+
taskId: task.id,
|
|
52
|
+
result,
|
|
53
|
+
durationMs,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
const durationMs = Date.now() - startTime;
|
|
58
|
+
this.failedTasks++;
|
|
59
|
+
this.totalDuration += durationMs;
|
|
60
|
+
this.activeTasks--;
|
|
61
|
+
// Process next queued task
|
|
62
|
+
this.processQueue();
|
|
63
|
+
return {
|
|
64
|
+
taskId: task.id,
|
|
65
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
66
|
+
durationMs,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Process queued tasks
|
|
72
|
+
*/
|
|
73
|
+
processQueue() {
|
|
74
|
+
while (this.activeTasks < this.poolSize && this.queuedTasks.length > 0) {
|
|
75
|
+
const queued = this.queuedTasks.shift();
|
|
76
|
+
this.executeTask(queued.task).then(queued.resolve);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Submit multiple tasks and wait for all
|
|
81
|
+
*/
|
|
82
|
+
async submitAll(tasks) {
|
|
83
|
+
const promises = tasks.map((task) => this.submit(task));
|
|
84
|
+
return Promise.all(promises);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Submit multiple tasks and get first result
|
|
88
|
+
*/
|
|
89
|
+
async submitRace(tasks) {
|
|
90
|
+
const promises = tasks.map((task) => this.submit(task));
|
|
91
|
+
return Promise.race(promises);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Map operation over data with parallelism
|
|
95
|
+
*/
|
|
96
|
+
async map(items, fn, taskIdPrefix = 'map') {
|
|
97
|
+
const tasks = items.map((item, i) => ({
|
|
98
|
+
id: `${taskIdPrefix}_${i}`,
|
|
99
|
+
data: item,
|
|
100
|
+
execute: fn,
|
|
101
|
+
}));
|
|
102
|
+
const results = await this.submitAll(tasks);
|
|
103
|
+
// Preserve order and handle errors
|
|
104
|
+
const output = [];
|
|
105
|
+
for (const result of results) {
|
|
106
|
+
if (result.error) {
|
|
107
|
+
throw result.error;
|
|
108
|
+
}
|
|
109
|
+
output.push(result.result);
|
|
110
|
+
}
|
|
111
|
+
return output;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Filter operation with parallelism
|
|
115
|
+
*/
|
|
116
|
+
async filter(items, predicate, taskIdPrefix = 'filter') {
|
|
117
|
+
const tasks = items.map((item, i) => ({
|
|
118
|
+
id: `${taskIdPrefix}_${i}`,
|
|
119
|
+
data: item,
|
|
120
|
+
execute: predicate,
|
|
121
|
+
}));
|
|
122
|
+
const results = await this.submitAll(tasks);
|
|
123
|
+
const output = [];
|
|
124
|
+
for (let i = 0; i < results.length; i++) {
|
|
125
|
+
if (results[i].result) {
|
|
126
|
+
output.push(items[i]);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return output;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Reduce operation (sequential with parallel mapping)
|
|
133
|
+
*/
|
|
134
|
+
async reduce(items, fn, initial) {
|
|
135
|
+
let result = initial;
|
|
136
|
+
for (const item of items) {
|
|
137
|
+
result = await fn(result, item);
|
|
138
|
+
}
|
|
139
|
+
return result;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Get pool statistics
|
|
143
|
+
*/
|
|
144
|
+
getStats() {
|
|
145
|
+
const totalTasks = this.completedTasks + this.failedTasks;
|
|
146
|
+
return {
|
|
147
|
+
poolSize: this.poolSize,
|
|
148
|
+
activeTasks: this.activeTasks,
|
|
149
|
+
queuedTasks: this.queuedTasks.length,
|
|
150
|
+
completedTasks: this.completedTasks,
|
|
151
|
+
failedTasks: this.failedTasks,
|
|
152
|
+
avgDurationMs: totalTasks > 0 ? this.totalDuration / totalTasks : 0,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Wait for all active tasks to complete
|
|
157
|
+
*/
|
|
158
|
+
async drain() {
|
|
159
|
+
while (this.activeTasks > 0 || this.queuedTasks.length > 0) {
|
|
160
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Clear queued tasks
|
|
165
|
+
*/
|
|
166
|
+
clear() {
|
|
167
|
+
this.queuedTasks = [];
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Shutdown the pool
|
|
171
|
+
*/
|
|
172
|
+
async shutdown() {
|
|
173
|
+
await this.drain();
|
|
174
|
+
this.clear();
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Get active task count
|
|
178
|
+
*/
|
|
179
|
+
get activeCount() {
|
|
180
|
+
return this.activeTasks;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Get queued task count
|
|
184
|
+
*/
|
|
185
|
+
get queuedCount() {
|
|
186
|
+
return this.queuedTasks.length;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Check if pool is idle
|
|
190
|
+
*/
|
|
191
|
+
get isIdle() {
|
|
192
|
+
return this.activeTasks === 0 && this.queuedTasks.length === 0;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=WorkerPool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerPool.js","sourceRoot":"","sources":["../../src/query/WorkerPool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @nahisaho/yata-scale - Query Module
|
|
3
|
+
*
|
|
4
|
+
* Exports for distributed query functionality
|
|
5
|
+
*/
|
|
6
|
+
export { QueryCoordinator } from './QueryCoordinator.js';
|
|
7
|
+
export { QueryPlanner } from './QueryPlanner.js';
|
|
8
|
+
export { DistributedExecutor } from './DistributedExecutor.js';
|
|
9
|
+
export { WorkerPool } from './WorkerPool.js';
|
|
10
|
+
export type { GraphQuery, QueryResult, QueryPlan, QueryOptions, QueryFilter, SortOrder, } from '../types.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,YAAY,EACV,UAAU,EACV,WAAW,EACX,SAAS,EACT,YAAY,EACZ,WAAW,EACX,SAAS,GACV,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @nahisaho/yata-scale - Query Module
|
|
3
|
+
*
|
|
4
|
+
* Exports for distributed query functionality
|
|
5
|
+
*/
|
|
6
|
+
export { QueryCoordinator } from './QueryCoordinator.js';
|
|
7
|
+
export { QueryPlanner } from './QueryPlanner.js';
|
|
8
|
+
export { DistributedExecutor } from './DistributedExecutor.js';
|
|
9
|
+
export { WorkerPool } from './WorkerPool.js';
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @nahisaho/yata-scale - Graph Partition Strategy
|
|
3
|
+
*
|
|
4
|
+
* Graph-based partitioning using connected components
|
|
5
|
+
*/
|
|
6
|
+
import type { PartitionStrategy, PartitionStrategyType, EntityMetadata, Entity, Relationship } from '../types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Graph partition strategy based on connected components
|
|
9
|
+
*/
|
|
10
|
+
export declare class GraphPartitionStrategy implements PartitionStrategy {
|
|
11
|
+
readonly type: PartitionStrategyType;
|
|
12
|
+
private componentMap;
|
|
13
|
+
private shardIds;
|
|
14
|
+
private defaultShardId;
|
|
15
|
+
constructor(shardIds: string[]);
|
|
16
|
+
/**
|
|
17
|
+
* Initialize the partition map from entities and relationships
|
|
18
|
+
*/
|
|
19
|
+
initialize(entities: Entity[], relationships: Relationship[]): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Find connected components using Union-Find
|
|
22
|
+
*/
|
|
23
|
+
private findConnectedComponents;
|
|
24
|
+
/**
|
|
25
|
+
* Assign components to shards using best-fit decreasing
|
|
26
|
+
*/
|
|
27
|
+
private assignComponentsToShards;
|
|
28
|
+
/**
|
|
29
|
+
* Get shard ID for an entity
|
|
30
|
+
*/
|
|
31
|
+
getShardId(entityId: string, _metadata?: Partial<EntityMetadata>): string;
|
|
32
|
+
/**
|
|
33
|
+
* Get shard IDs for multiple entities
|
|
34
|
+
*/
|
|
35
|
+
getShardIds(entityIds: string[]): Map<string, string>;
|
|
36
|
+
/**
|
|
37
|
+
* Calculate remapping (graph partitioning requires recomputation)
|
|
38
|
+
*/
|
|
39
|
+
remap(_oldShardCount: number, _newShardCount: number): Map<string, string>;
|
|
40
|
+
/**
|
|
41
|
+
* Add entity to a specific shard
|
|
42
|
+
*/
|
|
43
|
+
assignEntity(entityId: string, shardId: string): void;
|
|
44
|
+
/**
|
|
45
|
+
* Add entity near related entity (locality)
|
|
46
|
+
*/
|
|
47
|
+
assignEntityNear(entityId: string, relatedEntityId: string): void;
|
|
48
|
+
/**
|
|
49
|
+
* Get shard distribution statistics
|
|
50
|
+
*/
|
|
51
|
+
getDistribution(): Map<string, number>;
|
|
52
|
+
/**
|
|
53
|
+
* Get all shard IDs
|
|
54
|
+
*/
|
|
55
|
+
getShardIdsList(): string[];
|
|
56
|
+
/**
|
|
57
|
+
* Get shard count
|
|
58
|
+
*/
|
|
59
|
+
get shardCount(): number;
|
|
60
|
+
/**
|
|
61
|
+
* Get entity count
|
|
62
|
+
*/
|
|
63
|
+
get entityCount(): number;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=GraphPartitionStrategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphPartitionStrategy.d.ts","sourceRoot":"","sources":["../../src/shard/GraphPartitionStrategy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,MAAM,EACN,YAAY,EACb,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,qBAAa,sBAAuB,YAAW,iBAAiB;IAC9D,SAAgB,IAAI,EAAE,qBAAqB,CAAW;IACtD,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,cAAc,CAAS;gBAEnB,QAAQ,EAAE,MAAM,EAAE;IAQ9B;;OAEG;IACG,UAAU,CACd,QAAQ,EAAE,MAAM,EAAE,EAClB,aAAa,EAAE,YAAY,EAAE,GAC5B,OAAO,CAAC,IAAI,CAAC;IA4BhB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA4D/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAmChC;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,MAAM;IAIzE;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAQrD;;OAEG;IACH,KAAK,CAAC,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAM1E;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAOrD;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,IAAI;IASjE;;OAEG;IACH,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IActC;;OAEG;IACH,eAAe,IAAI,MAAM,EAAE;IAI3B;;OAEG;IACH,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,MAAM,CAExB;CACF"}
|