ssb: It is troubling to me that querying like this is so much faster.
All checks were successful
Build Tilde Friends / Build-All (push) Successful in 29m37s
All checks were successful
Build Tilde Friends / Build-All (push) Successful in 29m37s
This commit is contained in:
parent
e574758340
commit
8be354fc49
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"type": "tildefriends-app",
|
"type": "tildefriends-app",
|
||||||
"emoji": "🦀",
|
"emoji": "🦀",
|
||||||
"previous": "&R0bGxjJq3G2eJzuKfUrQP4ioSn75QlwvaS39Q9LzMto=.sha256"
|
"previous": "&lGTfidaEuVfuFbpQD9WGizMpC6OwYr1AqM+AH0yaVsc=.sha256"
|
||||||
}
|
}
|
||||||
|
@ -159,7 +159,7 @@ class TfTabNewsFeedElement extends LitElement {
|
|||||||
);
|
);
|
||||||
result = (await this.decrypt(result)).filter((x) => x.decrypted);
|
result = (await this.decrypt(result)).filter((x) => x.decrypted);
|
||||||
} else {
|
} else {
|
||||||
let st = new Date();
|
let t0 = new Date();
|
||||||
result = await tfrpc.rpc.query(
|
result = await tfrpc.rpc.query(
|
||||||
`
|
`
|
||||||
WITH
|
WITH
|
||||||
@ -172,22 +172,38 @@ class TfTabNewsFeedElement extends LitElement {
|
|||||||
SELECT * FROM all_news
|
SELECT * FROM all_news
|
||||||
WHERE all_news.timestamp < ?3 AND (?2 IS NULL OR all_news.timestamp >= ?2)
|
WHERE all_news.timestamp < ?3 AND (?2 IS NULL OR all_news.timestamp >= ?2)
|
||||||
ORDER BY timestamp DESC LIMIT 20
|
ORDER BY timestamp DESC LIMIT 20
|
||||||
),
|
|
||||||
refs AS (
|
|
||||||
SELECT refs_out.ref AS ref FROM messages_refs refs_out JOIN news ON refs_out.message = news.id
|
|
||||||
UNION
|
|
||||||
SELECT refs_in.message AS ref FROM messages_refs refs_in JOIN news ON refs_in.ref = news.id
|
|
||||||
)
|
)
|
||||||
SELECT TRUE AS is_primary, news.* FROM news
|
SELECT TRUE AS is_primary, news.* FROM news
|
||||||
UNION
|
|
||||||
SELECT FALSE AS is_primary, all_news.rowid, all_news.id, all_news.previous, all_news.author, all_news.sequence, all_news.timestamp, all_news.hash, json(all_news.content) AS content, all_news.signature
|
|
||||||
FROM all_news JOIN refs ON all_news.id = refs.ref
|
|
||||||
`,
|
`,
|
||||||
[JSON.stringify(this.following), start_time, end_time]
|
[JSON.stringify(this.following), start_time, end_time]
|
||||||
);
|
);
|
||||||
let et = new Date();
|
let news_length = result.length;
|
||||||
|
let t1 = new Date();
|
||||||
|
let refs = await tfrpc.rpc.query(
|
||||||
|
`
|
||||||
|
WITH
|
||||||
|
news AS (
|
||||||
|
SELECT value AS id FROM json_each(?)
|
||||||
|
)
|
||||||
|
SELECT refs_out.ref AS ref FROM messages_refs refs_out JOIN news ON refs_out.message = news.id
|
||||||
|
UNION
|
||||||
|
SELECT refs_in.message AS ref FROM messages_refs refs_in JOIN news ON refs_in.ref = news.id
|
||||||
|
`,
|
||||||
|
[JSON.stringify(result.map(x => x.id))]
|
||||||
|
);
|
||||||
|
let t2 = new Date();
|
||||||
|
let related_messages = await tfrpc.rpc.query(
|
||||||
|
`
|
||||||
|
SELECT FALSE AS is_primary, messages.rowid, messages.id, messages.previous, messages.author, messages.sequence, messages.timestamp, messages.hash, json(messages.content) AS content, messages.signature
|
||||||
|
FROM messages
|
||||||
|
JOIN json_each(?2) refs ON messages.id = refs.value
|
||||||
|
JOIN json_each(?1) AS following ON messages.author = following.value
|
||||||
|
`,
|
||||||
|
[JSON.stringify(this.following), JSON.stringify(refs.map(x => x.ref))]);
|
||||||
|
result = [].concat(result, related_messages);
|
||||||
|
let t3 = new Date();
|
||||||
console.log(
|
console.log(
|
||||||
`just the load of ${result.length} rows = ${(et - st) / 1000} following=${this.following.length} st=${start_time} et=${end_time}`
|
`load of ${result.length} rows took ${(t3 - t0) / 1000} (${(t1 - t0) / 1000} to find ${news_length} messages, ${(t2 - t1) / 1000} to find ${refs.length} refs, and ${(t3 - t2) / 1000} to find ${related_messages.length} related messages) following=${this.following.length} st=${start_time} et=${end_time}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
this.time_loading = undefined;
|
this.time_loading = undefined;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user