[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
12/14: Speed up loading package metadata
From: |
Christopher Baines |
Subject: |
12/14: Speed up loading package metadata |
Date: |
Fri, 2 Feb 2024 10:58:40 -0500 (EST) |
cbaines pushed a commit to branch master
in repository data-service.
commit 0468bc43211755d1767db2be04925d4910e82384
Author: Christopher Baines <mail@cbaines.net>
AuthorDate: Thu Feb 1 13:15:30 2024 +0100
Speed up loading package metadata
By batching the SQL queries.
---
guix-data-service/model/package-metadata.scm | 90 +++++++++++++---------------
1 file changed, 40 insertions(+), 50 deletions(-)
diff --git a/guix-data-service/model/package-metadata.scm
b/guix-data-service/model/package-metadata.scm
index 77f24c6..6eca089 100644
--- a/guix-data-service/model/package-metadata.scm
+++ b/guix-data-service/model/package-metadata.scm
@@ -292,18 +292,6 @@ WHERE packages.id IN (
(prevent-inlining-for-tests
inferior-packages->translated-package-descriptions-and-synopsis)
-(define (package-synopsis-data->package-synopsis-ids
- conn synopsis-by-locale)
- (insert-missing-data-and-return-all-ids
- conn
- "package_synopsis"
- '(locale synopsis)
- (map (match-lambda
- ((locale . synopsis)
- (list locale synopsis)))
- synopsis-by-locale)
- #:delete-duplicates? #t))
-
(define (insert-package-synopsis-set conn package-synopsis-ids)
(let ((query
(string-append
@@ -320,38 +308,22 @@ WHERE packages.id IN (
(((id)) id))))
(define (package-synopsis-data->package-synopsis-set-id
- conn synopsis-by-locale)
- (let* ((package-synopsis-ids
- (package-synopsis-data->package-synopsis-ids
- conn
- synopsis-by-locale))
- (package-synopsis-set-id
- (exec-query
- conn
- (string-append
- "SELECT id FROM package_synopsis_sets"
- " WHERE synopsis_ids = ARRAY["
- (string-join (map number->string
- (sort package-synopsis-ids <)) ", ")
- "]"))))
+ conn package-synopsis-ids)
+ (let ((package-synopsis-set-id
+ (exec-query
+ conn
+ (string-append
+ "SELECT id FROM package_synopsis_sets"
+ " WHERE synopsis_ids = ARRAY["
+ (string-join (map number->string
+ (sort package-synopsis-ids <)) ", ")
+ "]"))))
(string->number
(match package-synopsis-set-id
(((id)) id)
(()
(insert-package-synopsis-set conn package-synopsis-ids))))))
-(define (package-description-data->package-description-ids
- conn descriptions-by-locale)
- (insert-missing-data-and-return-all-ids
- conn
- "package_descriptions"
- '(locale description)
- (map (match-lambda
- ((locale . description)
- (list locale description)))
- descriptions-by-locale)
- #:delete-duplicates? #t))
-
(define (insert-package-description-set conn package-description-ids)
(let ((query
(string-append
@@ -419,19 +391,37 @@ WHERE packages.id IN (
conn
package-description-ids))
(with-time-logging "preparing package description ids"
- (map (match-lambda
- ((_ _ package-description-data _)
- (package-description-data->package-description-ids
- conn
- package-description-data)))
- package-metadata))))
+ (insert-missing-data-and-return-all-ids
+ conn
+ "package_descriptions"
+ '(locale description)
+ (map (match-lambda
+ ((_ _ package-description-data _)
+ (map (match-lambda
+ ((locale . description)
+ (list locale description)))
+ package-description-data)))
+ package-metadata)
+ #:delete-duplicates? #t
+ #:sets-of-data? #t))))
(with-time-logging "preparing package synopsis set ids"
- (map (match-lambda
- ((_ _ _ package-synopsis-data)
- (package-synopsis-data->package-synopsis-set-id
- conn
- package-synopsis-data)))
- package-metadata)))
+ (map (lambda (package-synopsis-ids)
+ (package-synopsis-data->package-synopsis-set-id
+ conn
+ package-synopsis-ids))
+ (insert-missing-data-and-return-all-ids
+ conn
+ "package_synopsis"
+ '(locale synopsis)
+ (map (match-lambda
+ ((_ _ _ package-synopsis-data)
+ (map (match-lambda
+ ((locale . synopsis)
+ (list locale synopsis)))
+ package-synopsis-data)))
+ package-metadata)
+ #:delete-duplicates? #t
+ #:sets-of-data? #t))))
;; There can be duplicated entires in package-metadata, for example where
;; you have one package definition which interits from another, and just
;; overrides the version and the source, the package_metadata entries for
- branch master updated (e0a6c84 -> ac1a4cb), Christopher Baines, 2024/02/02
- 01/14: Remove some time logging, Christopher Baines, 2024/02/02
- 04/14: Remove even more time logging, Christopher Baines, 2024/02/02
- 02/14: Log the time to call inferior-packages-plus-replacements, Christopher Baines, 2024/02/02
- 05/14: Make sure to keep roots for channel instance derivations, Christopher Baines, 2024/02/02
- 07/14: Add more logging in when computing channel instance derivations, Christopher Baines, 2024/02/02
- 09/14: Split up handling of package description data, Christopher Baines, 2024/02/02
- 10/14: Fix exception handling in call-with-temporary-thread, Christopher Baines, 2024/02/02
- 12/14: Speed up loading package metadata,
Christopher Baines <=
- 14/14: Cleanup some with-time-logging, Christopher Baines, 2024/02/02
- 06/14: Add some time logging in to inferior-packages-plus-replacements, Christopher Baines, 2024/02/02
- 11/14: Ignore inferior-protocol-error when computing channel instances, Christopher Baines, 2024/02/02
- 13/14: Compute lint warnings in parallel, Christopher Baines, 2024/02/02
- 08/14: Speed up fetching package replacements, Christopher Baines, 2024/02/02
- 03/14: Improve logging when computing a channel instance derivation fails, Christopher Baines, 2024/02/02