一日のまとめ。
一日のまとめ。
dg_bg_kt()
}{vw_dg_fg_kno}{vw_dg_bg_kno}{vw_dg_fg_kt}{vw_dg_bg_kt}{希哲13年6月22日}{希哲13年6月22日の開発}{希哲13年6月22日の進捗時限}(12)ページ付け改良。
vw_kt_bg をもとに vw_kt_fg も作成,vw_kno_bg もこれに合わせた形で再作成し,vw_kno_fg も作成。
vw_kt_bg を内部で使用し RETURNS TABLE を使った kt_bg() を実装し,性能試験。とりあえずは十分な速度で実行出来た。
これで実装した oln_bg_lim() も上手く動作した。
終了。
dg_bg_kt()
}{vw_dg_bg_kt}{希哲13年6月22日}{希哲13年6月22日の開発}{希哲13年6月22日の進捗時限}{希哲13年6月22日の進捗}{進捗時限}{USING 句}(10)dg_fg_kt()
}{dg_bg_kt()
}{vw_dg_bg_kno}{vw_dg_fg_kt}{vw_dg_bg_kt}{dg_bg_kno()}{希哲13年6月22日}{希哲13年6月22日の開発}(14)知番の索引化は断念したが,色々試行していて,やはり知番を指定するような求頼は原則的に函数化しておいた方が良いと思うようになった。
今回の vw_kno_bg も,函数化しておくことにした。kno_bg() は内部で集合演算をしているが,これはもう不要なので単純に指定した知番に対応する後景知番を vw_kno_bg から得るように書き換える。交度検索で依存部分が無いことは確認済み。
知番節列だけが欲しい場合,知番が直接欲しい場合に対応するため,vw_kt_fg, vw_kt_bg, kt_fg(), kt_bg() を追加することにした。これも知番の索引化を試みた時に索引名の整理をしたのが瀕答になった。
kt_bg() と vw_kt_bg から,函数とビューの関係を再考。函数の戻り型を対応する名前のビューにしていたため,函数内部でビューを利用出来なかった(WHERE 句 で使いたい列名とビューの出力結果が一致しない)。RETURNS TABLE を試してみる。
終了。
ページ付け改良続き。
vw_kno_bg の作成。これを使って集合演算部分の直後に時印による揃えが出来るようになったと思ったが,なぜか GREATEST() が使えない。集合演算の直後の ORDER BY 句に式は置けない,と書いてあるが,いまいち理屈が良くわからない。見た目は悪いが,とりあえず集合演算部分を副求頼にして対応。
これで10万輪近い後景輪の取得も10秒前後だったのが3秒以内に短縮した。
とはいえ揃えに索引は使えていないので十分速いとも言えない。実体化ビューを使うことも考えたが,PostgreSQL 9.3 からの対応で微妙に本番環境の版存が追いついていない。将来的な選択肢として頭に入れておく。
終了。
ページ付け改良の続き。
前回決めた通り,既存索引名を修正し,_dg_oln には idx_kno を,_dg_gg には idx_kno_fg, idx_kno_bg を加える。特に _dg_gg での索引作成にはかなり時間がかかる。最悪,使わないように修正する必要が出てくるかもしれない。
ここで idx_kt(旧 idx_kno)が主鍵 pk_dg_oln と被っていることに気付き削除。
idx_kno_fg, idx_kno_bg の作成に思ったより時間がかかるため,知番の索引化は保留することにした。すでに作成した idx_kno も削除。よく考えてみると,表記揺れに対応出来ないなど根本的な問題がある。知番で検索したければやはり函数を使うのが理に適っている。
正式に廃案した場合,やはり idx_kt も idx_kno に戻した方が内部的な知番の扱い方が分かりやすくていいかもしれない。
ページ付け改良の本筋に戻る。
vw_kno_bg の作成に戻ったところで終了。
ページ付け改良続き。
SPI::new_txt() での文字列生成が原因と判明。これに依存している函数はいまのところ kno(), cat(), hex() のみだが,全ての函数で末尾に文字列が連結出来ない,文字列定数と一致しないという問題があることを確認。
PostgreSQL から外部論組が受け取る分には適当に処理されていたが,内部での処理は出来ていなかったと考えられる。
今のところ重要な処理には使っていない函数ばかりだが,ここで問題を発見出来たのは不幸中の幸いだった。
SPI::new_txt() の内部で最初に文字列の長さに加えて終端文字列分の +1 を加えていたことが原因だった。仕様説明書を確認したところこれは不要。修正して各函数が正常に動作することを確認した。
ここでもう一度,知番索引の実験に入る。
今度は問題なく WHERE 句 での検索に成功。
索引の命名規約を整える。これまで知番節(kt.)をまとめた索引には idx_kno などと付けていたが,これから効率上の問題等が無ければ正規の知番表記による索引を採用する可能性があるため,これは idx_kt などに改称しておくことにした。
終了。
ページ付け改良続き。
不可解だが,索引はしっかり使っているので索引の問題か。
どうも kno() の生成する文字列がおかしいということを突き止めた。kno() の後に文字列連結してみると,何も表示されない。終端文字列処理の問題と過程したところで終了。
kno_T
}{vw_dg_fg_kno}{vw_dg_bg_kno}{希哲13年6月22日}{希哲13年6月22日の開発}{kno_T::s()}{希哲13年6月22日の進捗時限}{希哲13年6月22日の進捗}(11)