MySQL から完全にforkしてしまったmariaDB

最近のリレーショナル DB は geometry とか json とか使えるようになりましたが、MySQL と mariaDB でかなり仕様差があり、互換性がないという事態に陥ったので記録しておきます。

問題となるのは① geometry で2地点間の距離を求める場合。
MySQL v7.0 以降は ST_Distance_Sphere 関数があるが、mariaDBにはない。
地球楕円体から自分で計算するか、ST_Glength を使って度を算出し、それから km に直す必要がある。

②JSON カラムの初期値を MySQL は設定できないように見えるが、mariaDB は自由に設定できる。例えば

colmn json not null default '[]'

という構文を、mariaDB は許可するが、MySQL は許可しない。

そのうち統一されるのでしょうか、差異があるまま成長してしまうのか、注目しています。

Windows のシステムロケールではまる

MariaDB を utf8mb4 で使用しているにもかかわらず、

mysql -u user db <data.sql

という構文で cp932 エラーが発生。なんで??

Google 先生に聞いても良く分からなかったが、どうも CMD が CP932 になっているせいではないかということに思い当たり、

https://kuluna.github.io/blog/post/20180512/

を参考にして、CMD を UTF-8 にしてみたらうまく動いていた。

ファイルをオープンする時にコードチェックするなんて、Windows10、何て仕様なんだ…。

minosysScript を1年ぶりに更新中

実行エンジンを中途半端に実装して1年間
ほったらかしていた minosys-scrypt ですが、
1年ぶりに実装を追加することになりました。

minosys-script.git を取得するすると最近の
ソースコードが入手できます。

とりあえず、今週末までには class, package
関連以外の内容を追加したいと考えております。
毎日コミット予定なので、言語が出来ていく様子が
リアルタイムで見られるかも?!

minosys-script は最終的には www サーバ
として稼働して www に特化した処理(html の
ダウンロードや画像ファイルの range 転送)
を実装する予定ですので、乞うご期待。

何年先になるか分かりませんが。

 

どっちが正解??

スクリプト処理系で配列変数を定義するにあたり、どちらの実装にするべきか悩んでいる。

  1. 演算子 “[” を定義し、第1引数にベース、第2引数にキーを設定する。
  2. 変数に添え字配列を用意する。

1.の利点は固定数の引数に対して演算子を定義すればよいことで、実装が簡単になる。その分、実行エンジンは遅くなりますが。

2.はイメージとしては

class Content {
  Content *c;
  vector <Content *> pc;
};

として、pc が empty でない場合は連想配列の引数とみなすようにする。

2.の利点は実装が多少煩雑になるが、多重配列を定義する場合の実行速度を上げることができる。(ツリーをたどらず、O(1) の配列要素が利用できるので。)

最初1、の実装で考えていたが、途中で考え直して2.の実装に切り替えた。(コード上はその残骸が残っていますが)ただし、まだ変数を左辺値に指定すると NullException が発生するというバグがある。

N-gram 検索エンジンに and 機能を追加

N-gram 検索エンジンに and 検索機能を追加しました。

半角の空白文字を入力すると、空白で区切られた文字列を全て含むページを検索します。

実装がちょっとうまくないですが、おいおい直します。

表示についても統一化していないため、検索にヒットした文の数だけ結果が表示されます。例えば、「可逆 圧縮」と入力した場合、「可逆」で検索された後、「圧縮」で検索されるため、「可逆」で1行、「圧縮」で1行表示されます。

これは検索の問題というよりは表示の問題です。

N-gram 解説記事を展開しました

GitHub にはすでにサンプルを上げてありますが、N-gram 解説記事を新たに展開しました。

使い古されてあまり顧みられなくなった感のある N-gram ですが、実装が簡単な割には厳密な検索が可能なので、個人的には重宝しています。

解説記事はネットに多数掲載されていますが、他の検索エンジン技術と比較するときに対象記事があったほうが便利なので書いてみました。

振り返ってみると、あまり万人向けの解説になっていませんね..。

GitHub に検索エンジンソースを追加

GitHub.com に検索エンジンのソースコードを追加しました。

まだ N-gram ベースのプログラムしかありませんが、おいおい他のテクノロジーベースのエンジンも収録していきたいと思っています。

詳細はそのうちホームページに記述したいと思いますが、プログラムは以下のような構成になっています。

  • scayping.py: トップページを指定するとその下にある全てのページを取得し、検索用の3つのファイルを作ります。(ただし、ブログは収録しないようになっています。)
  • search.php: 検索エンジンのラッパーで、UI を与えるためのプログラムです。
  • search_engine.php: 検索エンジンの本体で、bi-gram による検索を実行します。

なお、前の記事にも書いたとおり、まだ And/Or 検索条件が書けません。

検索エンジン(2)

今更クローラを C で組みたくないな、と思い始めた。

XML と違って HTML は独特の書き方をするサイトもあるので、結構クローリングは大変なのである。N-gram を収容するファイルのフォーマットは大体決まったので、python か何かのクローリングライブラリを使おうかと思う。

N-gram ファイルの概要

明日は仕事が休みらしいので、ヒマがあれば片付けてしまおう。