-
Notifications
You must be signed in to change notification settings - Fork 36
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: Use Deno.Kv to create a database of dictionaries #170
Conversation
bce0fa1
to
a1410a0
Compare
興味深い機能追加だと思います。 今の実装は以下の順番になっています。
私の懸念は、本来パスの設定と、機能の有効化/無効化は直交する操作であるのに、パスの設定から暗黙に機能が有効化されてしまうことです。 また設計についても懸念があります。 今は、Map()を使うか、DenoKVを使うかということで、Mapの機能とDenoKVの機能に重複があり、 もし不正確なところがありましたら、指摘していただければ幸いです。 |
デフォルトのパスをプラグインがわできめられなかったので、こういう実装になったと理解しています |
インメモリなDeno KVを使う場合、現状のMapを使った実装よりも初期化が遅くなってしまいます(手元では200 ms -> 1300 msほどの変化)。重複はありますが仕方ないのかなと |
という状態なのですね。 |
そうですね。巨大な辞書を使っており現在の起動時間に不満のある人にとっては良い選択肢になるはずです。 |
データベースへの変換がすごく遅いのでインメモリの有効化はしない方がいいと思います |
このPRでやるべきかは不明ですが、事前に変換する方式で辞書形式の1つにしてしまうのもありかもですね |
JISYO(新辞書形式)でも変換済みのDBが配布できるか検討してみます。 あと、複数辞書対応は出来ていますかね?ちょっとコードリーディングでできておらず... |
0a214ff
to
3f60b54
Compare
データベースは単独のファイルですが、keyの中にpathを入れることで辞書ごとに候補を管理できるようにしています。また、各辞書のmtimeも保存しているので、辞書それぞれの更新を検知して再構築を行います。 |
|
試しました。確かに初回だけ DB 作成に時間がかかりますが、あとは問題なさそう |
実装の重複とは skk_dictionary.ts と deno_kv.ts のことでしょうか? |
データベースを手動で更新するためのAPIを追加しました |
一つバグ見つけたので少し待ってください。 |
denoland/deno#21711 |
テストも入れて通ってるので明日の夜まで特に指摘なければそのままマージします。 |
https://github.com/denoland/denokv/blob/a5ae69f1dd58283ae124771e0d136a6b1815d7a5/proto/codec.rs#L36 Deno.AtomicOperation を使うとき、total key size が 81920 バイトを越えてコミットするとエラーが出ます。key は TypeScript のレイヤーでは 今回使う文字列の場合で説明すると
となるので、 また、mutation 自体の回数が 1000 を越えるとそれもエラーが出ます。これらの条件から IO が発生する |
話題のDeno KV (組み込み key-value database) を使って辞書をデータベース化します。
config.databasePath から有効化できます。