From 139cfe4ebde273208f91d401a2938330faf41c06 Mon Sep 17 00:00:00 2001 From: Mischa POSLAWSKY Date: Sun, 26 Dec 2021 21:06:12 +0100 Subject: [PATCH] word: store data entries as prepared subarrays Time to split strings is comparable to directly loading structured values. Considered hashes for scalability with more (optional) columns, but not worth the cost at this time. Benchmark loading 1264 rows in perl: rate memory size strings 468/s 52kB 15kB split 257/s 152kB " arrays 221/s 133kB 17kB hashes 126/s 188kB 27kB --- tools/mkwordlist | 11 +++++++++-- word.plp | 6 +++--- word/quiz.js | 1 - 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/tools/mkwordlist b/tools/mkwordlist index 3c5aac9..78859b4 100755 --- a/tools/mkwordlist +++ b/tools/mkwordlist @@ -10,10 +10,17 @@ my $db = Shiar_Sheet::DB->connect; say 'use utf8;'; use Data::Dump 'pp'; +my %rows; if (my $lang = shift @ARGV) { my %filter = (lang => $lang); - say pp({ $db->select('_word_ref w' => "ref, exportform(row(w.*))", \%filter)->map }) + my $cols = "ref, id, prio, array_to_string(form || alt, '/')"; + %rows = $db->select(_word_ref => $cols, \%filter)->map_arrays; + say pp \%rows =~ s/\\x\{([0-9A-F]+)\}/chr hex $1/ger; exit; } -say pp { $db->select(_cat_words => "coalesce(id::text, ''), forms")->map }; +else { + %rows = $db->select(_cat_words => "coalesce(id::text, ''), forms")->map; + $_ = [ map { [split /:/, $_, 3] } @{$_} ] for values %rows; + say pp \%rows; +} diff --git a/word.plp b/word.plp index 41d2bd3..9ea54e8 100644 --- a/word.plp +++ b/word.plp @@ -90,7 +90,7 @@ sub showimg { sub printimgs { say '