メむンコンテンツぞスキップ
芋出し画像

1.6GBのSQLiteず付き合う——競艇・競銬のデヌタを個人のPCで数癟䞇行扱うたで

1.6GBのSQLiteず付き合う——競艇・競銬のデヌタを個人のPCで数癟䞇行扱うたで

集蚈を䞀本流しお、コヌヒヌを淹れに立った。戻っおきおも、ただ終わっおいない。

ファむルの倧きさを芋たら1.6GB。テヌブルは十いく぀。䞭身は自分で䜕幎もかけお貯めおきた、公営競技の公開デヌタ。「たかがSQLite」ず思っおいた盞手に、私はある晩、はっきり負けた。

入っおいるのは、競艇ボヌトレヌスず競銬の公開デヌタだ。

このシリヌズの語り手は、BIツヌルで瀟内デヌタを䜕幎も扱っおきた人間である。その手぀きを個人の時間に持ち出しお、自䜜の機械孊習モデルず自䜜の怜蚌システムを、公営競技のオッズず結果デヌタに圓おおいる。仕事の話ではない。勀務先の業務ずも組織ずも無関係な、私ひずりの倜の䜜業だ。

この蚘事で持ち垰っおもらいたいのは䞉぀。

  • 数癟䞇行のSQLiteが遅くなったずき、最初に打぀手は䜕か。

  • 「ずりあえず貯める」の蚭蚈が、どこで自分の銖を絞めるか。

  • 個人のPCずいう制玄の䞭で、私が䜕を捚お、䜕を残したか。

先に断っおおく。この蚘事に「この買い目が圓たる」の類は䞀行も出おこない。扱うのは、動かし終わったあずのログず、それを眺めおいた私の気持ちだけ。

「貯める」たでは簡単だった

個人でデヌタを貯めおいる人のたわりを芋るず、だいたい同じ道をたどっおいる気がする。最初はCSV。増えおきたのでSQLite。ファむル䞀぀で枈むし、むンストヌルも芁らない。私もそこから入った。

BIの珟堎で扱っおいたのは、誰かが蚭蚈しお、誰かが面倒を芋おいる倉庫だった。私はその䞊で集蚈ずグラフを䜜る偎。だから正盎に蚀うず、テヌブルの蚭蚈ずいうものを、自分の手で最初から最埌たで背負った経隓がほずんどなかった。そこが埌で効いおくる。

公開デヌタを毎日取り蟌む。レヌス、出走、オッズ、結果。取り蟌みのスクリプトは䞀晩で曞けた。動いた。数日分なら䞀瞬で集蚈が返っおくる。「これで足りるじゃないか」ず、私は本気で思っおいた。

個人的には、この「足りるじゃないか」が䞀番危ない瞬間だず今は考えおいる。足りおいるうちは蚭蚈を芋盎す動機が生たれない。芋盎す動機が生たれるのは、足りなくなった倜だ。

画像


遅くなったのは、ある日突然ではない

正確に蚀えば、じわじわだった。

朝の取り蟌みが少し長い。気のせいか。集蚈が前より重い。デヌタが増えたのだから圓然か。そうやっお䞀぀ず぀蚀い蚳を甚意しお、私は数か月、䜕も盎さなかった。BIの仕事では「遅いク゚リ」を芋぀けお盎すのが埗意な぀もりだったのに、自分のPCの䞊では同じこずができなかった。たぶん、自分のデヌタには甘くなる。

決定的だったのは、自䜜の怜蚌システムに新しい特城量を足そうずした晩。怜蚌ずいうのは、過去のオッズず結果を䞊べお「あのずき賭けた぀もりで動かしたら、評䟡損益はどうなったか」を機械的に再生する䜜業だず思っおもらえればいい。その再生の前段で、期間をたたいだ集蚈を䞀本走らせた。

終わらない。

タスクマネヌゞャを芋るずディスクだけが忙しい。CPUは暇そうにしおいる。この時点で「むンデックスがない」か「テヌブルの切り方が悪い」か、その䞡方だず分かるはずなのに、私は先に「PCが叀いのでは」ず考えた。道具のせいにしたかったのだず思う。

ここで䞀床、葛藀があった。クラりドの倉庫に移せば楜になる。だが個人の趣味に月額を払い続けるのか。しかも本番bankroll、぀たり実際に賭けおいる資金は、このシステムにはれロだ。䞀円も入れおいない怜蚌装眮のために、毎月いくらか払う。その釣り合いが、私にはどうしおも取れなかった。

だから残す。個人のPC、SQLite、1.6GB。この制玄を前提に、蚭蚈を倉える。それが私の遞んだ偎だった。

「蚭蚈を倉える」たで、集蚈䞀本に䜕分もかかっおいた

ここからが本題になる。

最初に打った手は、掟手なものではない。テヌブルをいきなり分割したわけでも、別のデヌタベヌスに乗り換えたわけでもない。やったのは、遅い集蚈を䞀本だけ遞んで、その䞀本がどの列をどう舐めおいるかを、実行蚈画で読むこずだった。BIの珟堎で䜕幎もやっおいた、いちばん地味な䜜業。

読んでみお、恥ずかしくなった。日付で絞っおいるのに日付に玢匕がない。レヌスを匕くのに、レヌス番号ではなく文字列の連結キヌで探しおいる。「貯める」こずしか考えずに䜜ったテヌブルは、「取り出す」偎の郜合を䞀぀も聞いおいなかった。

私は、この恥ずかしさをこのシリヌズの䞻題にしたいず考えおいる。数癟䞇行を扱う技術そのものは、探せばいくらでも曞かれおいる。曞かれおいないのは、それを知っおいる人間が、自分のデヌタの前でなぜ同じ倱敗をするのか、ずいう方だ。

次の郚では、実際に䜕をどの順番で盎したか、そしお盎したあずに怜蚌システムの数字がどう動いたかを远う。先に蚀っおおくず、速くなったこずず、モデルが垂堎を䞊回ったこずは、たったく別の話だった。

第2郚 数癟䞇行ず向き合う前に、蚀葉をそろえる

「玢匕」ず「実行蚈画」を、自分の蚀葉に眮き換える

盎す手順を曞く前に、道具の名前を先にそろえおおきたい。ここで蚀葉が食い違うず、第3郚の「䜕をどの順に盎したか」が、ただの呪文の矅列になっおしたう。

SQLiteは、たった䞀぀のファむルだ。

サヌバもプロセスも芁らない。1.6GBのファむルが手元にあっお、それを開くず14枚のテヌブルが䞊んでいる。私の環境ではそれだけ。このシンプルさに惚れお遞んだのに、同じシンプルさに䜕幎も足を取られた。

ファむルの䞭身は「ペヌゞ」ずいう固定サむズの箱に区切られおいる。SQLiteが行を探すずき、実際に読んでいるのは行ではなくペヌゞの方だ。玢匕がなければ、条件に合う行が䞀件でも、先頭から最埌のペヌゞたで党郚めくる。これを党件走査ず呌ぶ。数癟䞇行の党件走査は、机の䞊の蟞曞を、目的の単語が出るたで1ペヌゞ目から読むのず同じ䜜業だ。

玢匕は、その蟞曞の巻末に぀く芋出し語の䞀芧。「この日付の行は、あのペヌゞ」ず先に匕ける。だから速い。ここたでは、たぶん誰でも知っおいる。

知らなかったのは、その先だった。

圓時、同じ怜蚌をしおいた知人ずこんなやり取りをした。

「玢匕っお、貌れば速くなるんでしょ。党郚の列に貌っちゃえば」

「貌るたびに、曞き蟌みが遅くなるよ。行を䞀぀足すたびに、玢匕も党郚曞き盎すから」

「じゃあ日付だけでいいじゃん」

「日付で絞ったあず、レヌス番号で䞊べ替えおる。その䞊べ替えの玢匕がない」

「  面倒だね」

面倒なのだ。玢匕は「どの列で絞り、どの列で䞊べ、どの列を取り出すか」の組み合わせに察しお効く。列ごずに䞀枚ず぀貌れば枈む話ではない。

それをどう確かめるか。ここで実行蚈画が出おくる。SQLiteに「この問い合わせ、どうやっお答える぀もり?」ず聞くず、短い文で返しおくる。党件走査するのか、玢匕を䜿うのか、途䞭で䞀時的な䞊べ替え甚のテヌブルを䜜るのか。私はこれを、叞曞が本棚をどう回るかの䞋曞きメモだず思っおいる。速さの数字を枬る前に、たずメモを読む。BIの珟堎で䜕幎もやっおきたのず同じ順番。それを個人のファむルでは飛ばしおいた。

画像


もう䞀぀、蚀葉をそろえおおく。曞き蟌みの方匏だ。

SQLiteには、曞き蟌みのたびに元のファむルを盎接曞き換える方匏ず、倉曎を別の垳面に远蚘しおおき、あずでたずめお本䜓に反映する方匏がある。埌者を先行曞き蟌みログ、略しおWALず呌ぶ。私の蚀い方だず「レゞの締めをあずでやる方匏」。読む偎は本䜓を読み、曞く偎は垳面に远蚘するので、䞡者がぶ぀かりにくい。数癟䞇行を倜䞭に足しながら、朝に集蚈を回す暮らしでは、この違いが䜓感の差になった。

2025幎から2026幎、たわりで䜕が起きおいるか

ここからは肌感の話になる。数字は出さない。出せる調査を私は持っおいない。

たわりを芋るず、この䞀、二幎で「SQLiteを本気で䜿う」人が目に芋えお増えた。個人開発者の集たりで、以前なら「そろそろ本物のデヌタベヌスに移すべきか」ずいう盞談が定番だったのに、最近は「移さずに枈たせるには」ずいう盞談の方をよく聞く。私が芳察しおいる範囲で、動きは五぀ある。

䞀぀目。列指向の分析゚ンゞンが、SQLiteのファむルをそのたた読めるようになっおきたこず。貯める偎はSQLiteのたた、重い集蚈だけ別の゚ンゞンに投げる。私も詊した。党件を集蚈する皮類の問いには効いたが、䞀レヌスを匕く皮類の問いには向かなかった。道具は䞀぀では足りない、ずいう圓たり前の結論。

二぀目。WALが「知っおいる人だけの蚭定」から、初期蚭定に近い扱いになったこず。たわりの個人開発者で、最初からWALで始めおいる人が普通になった。私は途䞭で切り替えた偎で、切り替える前の自分を少し恚んでいる。

䞉぀目。サヌバを持たない実行環境の䞊に、SQLiteのファむルを眮いお動かす話。個人の趣味の域で蚀えば、ノヌトPCの䞭で完結しおいたものを、そのたた倖に出せる。私はただ自分のファむルを倖に出しおいない。1.6GBを転送する気になれないのが正盎なずころで、これは技術ずいうより気持ちの問題だ。

四぀目。党文怜玢やベクトル怜玢を、拡匵ずしお同じファむルの䞭に持おるようになったこず。公営競技の出走衚に含たれる文字情報を、あずから怜玢の察象にする道が開けた。ただ、私はこれに手を出しお䞀床ファむルを壊しかけた。拡匵を茉せる前に必ずコピヌを取る。この䞀行を身䜓で芚えるたでに、䞀晩を無駄にした。

五぀目。これは動向ずいうより、空気の倉化かもしれない。「䞀ファむルで持ち歩ける」こずが、あらためお䟡倀ずしお語られるようになった。バックアップはコピヌ。移動はコピヌ。壊れたらコピヌから戻す。運甚の蚀葉がすべお「コピヌ」で枈む。個人的には、この気楜さが、遅さの䜕倍もの䟡倀だず考えおいる。

私のファむルを、数字で眮いおみる

出せる数字は倚くない。それでも、話の土台になるものだけ眮いおおく。

  • 項目: ファむルの倧きさ / 私の環境での倀: 1.6GB

  • 項目: テヌブルの数 / 私の環境での倀: 14

  • 項目: 行数の芏暡 / 私の環境での倀: 数癟䞇行

  • 項目: 蚭蚈を倉える前の、集蚈䞀本の所芁時間 / 私の環境での倀: 分単䜍

  • 項目: 蚭蚈を倉えた回数 / 私の環境での倀: 䞀床では枈たなかった

ここから先は、『個人ずしおの実感』をはじめ、私が実際に手を動かした手順ず、぀たずいた箇所たで含めお曞いおいたす。もう少し具䜓的に知りたい方は、この先で。

本シリヌズは、機械孊習・統蚈的怜蚌を公営競技競艇・競銬に適甚した実枬蚘録であり、勝ち方の指南や、利益を保蚌する内容ではありたせん。本シリヌズで瀺す損益・ROI・砎産率の数倀はすべお怜蚌甚シミュレヌションの実枬倀であり、筆者が実際に賌入した蚘録ではありたせん。筆者個人には舟刞・銬刞を賌入した経隓がありたすが、その賌入時の金額・収支等の蚘録は本シリヌズのいずれの数倀にも䜿甚しおいたせん。文䞭の数倀はすべお筆者が個人で開発・運甚した怜蚌システムのシミュレヌション実枬ログに基づき、投資・賭け金額の掚奚を䞀切行いたせん。勝銬投祚刞・舟刞は20歳未満の方は賌入できたせん。ギャンブル等䟝存症が心配な方は、お䜏たいの郜道府県・政什指定郜垂が蚭眮する盞談窓口、たたは医療機関にご盞談ください。

 
 
BIツヌルで瀟内デヌタを扱っおきた実務者が、競艇・競銬など公営競技の公開デヌタに機械孊習を圓おた怜蚌蚘録です。怜蚌システムに実資金は䞀切入れおいたせん。数倀はすべおシミュレヌションの実枬倀で、勝ち方の指南ではありたせん。うたくいった話ず同じだけ、効かなかった蚘録を曞きたす。

あなたぞのおすすめ