mirror of
https://gitlab.com/soapbox-pub/mkstack.git
synced 2025-08-27 13:09:22 +00:00
"Efficient Query Design"
This commit is contained in:
parent
4e1c43ee13
commit
ad1c8b123c
38
CONTEXT.md
38
CONTEXT.md
@ -297,6 +297,44 @@ function usePosts() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### Efficient Query Design
|
||||||
|
|
||||||
|
**Critical**: Always minimize the number of separate queries to avoid rate limiting and improve performance. Combine related queries whenever possible.
|
||||||
|
|
||||||
|
**✅ Efficient - Single query with multiple kinds:**
|
||||||
|
```typescript
|
||||||
|
// Query multiple event types in one request
|
||||||
|
const events = await nostr.query([
|
||||||
|
{
|
||||||
|
kinds: [1, 6, 16], // All repost kinds in one query
|
||||||
|
'#e': [eventId],
|
||||||
|
limit: 150,
|
||||||
|
}
|
||||||
|
], { signal });
|
||||||
|
|
||||||
|
// Separate by type in JavaScript
|
||||||
|
const notes = events.filter((e) => e.kind === 1);
|
||||||
|
const reposts = events.filter((e) => e.kind === 6);
|
||||||
|
const genericReposts = events.filter((e) => e.kind === 16);
|
||||||
|
```
|
||||||
|
|
||||||
|
**❌ Inefficient - Multiple separate queries:**
|
||||||
|
```typescript
|
||||||
|
// This creates unnecessary load and can trigger rate limiting
|
||||||
|
const [notes, reposts, genericReposts] = await Promise.all([
|
||||||
|
nostr.query([{ kinds: [1], '#e': [eventId] }], { signal }),
|
||||||
|
nostr.query([{ kinds: [6], '#e': [eventId] }], { signal }),
|
||||||
|
nostr.query([{ kinds: [16], '#e': [eventId] }], { signal }),
|
||||||
|
]);
|
||||||
|
```
|
||||||
|
|
||||||
|
**Query Optimization Guidelines:**
|
||||||
|
1. **Combine kinds**: Use `kinds: [1, 6, 16]` instead of separate queries
|
||||||
|
2. **Use multiple filters**: When you need different tag filters, use multiple filter objects in a single query
|
||||||
|
3. **Adjust limits**: When combining queries, increase the limit appropriately
|
||||||
|
4. **Filter in JavaScript**: Separate event types after receiving results rather than making multiple requests
|
||||||
|
5. **Consider relay capacity**: Each query consumes relay resources and may count against rate limits
|
||||||
|
|
||||||
The data may be transformed into a more appropriate format if needed, and multiple calls to `nostr.query()` may be made in a single queryFn.
|
The data may be transformed into a more appropriate format if needed, and multiple calls to `nostr.query()` may be made in a single queryFn.
|
||||||
|
|
||||||
#### Event Validation
|
#### Event Validation
|
||||||
|
Loading…
x
Reference in New Issue
Block a user