sonic, kdash を試してみた。

sonic

rust 製の検索エンジン。ElasticSearch と同系統のもの。

https://github.com/valeriansaliou/sonic

When reviewing Elasticsearch (ELS) and others, we found those were full-featured heavyweight systems that did not scale well with Crisp's freemium-based cost structure.

らしい。機能を絞って高速化した ES と説明からは捉えれば良さそう。 docker で起動するので、設定ファイルを記述して起動してみる。

これ を参考に、README.md に従って、設定を書き換える。

$ docker run -p 1491:1491 -v ~/Desktop/sonic/sonic.cfg:/etc/sonic.cfg -v ~/Desktop/sonic/:/var/lib/sonic/store/ valeriansaliou/sonic:v1.3.0
(INFO) - starting up
(INFO) - started
(DEBUG) - spawn managed thread: tasker
(DEBUG) - spawn managed thread: channel
(INFO) - tasker is now active
(INFO) - listening on tcp://0.0.0.0:1491

おお、なんかそれっぽいものが起動した! 次に client library でアクセスしてみる。使用できるライブラリは公式のものと非公式なものが存在する。rust だと以下の2つ。 非公式のものの方が star 数が多いという...

use sonic_channel::*;

fn main() -> result::Result<()> {
    insert()?;
    search()?;
    Ok(())
}

fn insert() -> result::Result<()> {
    let channel = IngestChannel::start("localhost:1491", "SecretPassword")?;
    let pushed = channel.push("collection", "bucket", "object:1", "my best recipe")?;
    dbg!(pushed);
    Ok(())
}

fn search() -> result::Result<()> {
    let channel = SearchChannel::start("localhost:1491", "SecretPassword")?;
    let objects = channel.query("collection", "bucket", "recipe")?;
    dbg!(objects);
    Ok(())
}

こうなる。

$ cargo run
...
[src/main.rs:12] pushed = true
[src/main.rs:19] objects = [
    "object:1",
]

collection, bucket というのは純粋に保存場所の識別子っぽい。"object:1" が検索結果となる文字列であり、"my bect recipe" となるのが検索で引っ掛けるの文字列ということか。 うーん。早いか遅いかはおいておいて機能としてまだまだ発達段階と言ったところか。Elasticsearch が強すぎる。

日本語にも対応しているらしいので、試してみる。

use sonic_channel::*;
use std::fs;

fn main() -> result::Result<()> {
    insert()?;
    // search()?;
    Ok(())
}

fn insert() -> result::Result<()> {
    let channel = IngestChannel::start("localhost:1491", "SecretPassword")?;
    let pushed = channel.push("collection", "bucket", "羅生門", "ある日の暮方の事である。")?;
    dbg!(pushed);
    Ok(())
}

うーん... 出来ない。本当に日本語に対応しているのか...??? 前のデータを削除して、sonic を再起動とか色々試してみたけど、無理そう...

$ cargo run
Error: Error { kind: WrongSonicResponse }

おとなしく Elasticsearch 使います...

kdash

kubernetesdashboardcli で提供するツール。

https://github.com/kdash-rs/kdash

使ってみた感じは結構良い。ただそこまで... cli での操作感は良いが、情報量が多くない。

  • 画面遷移が微妙。node -> namespace -> pod -> log というように遷移するが、pod -> pod と移動する際に、上位の階層を経由するのがめんどくさい。検索機能とかほしい。
  • 情報量が乏しい。 見た感じ、cpu/memory 使用量を載せているが、pod 毎の cpu/memory 割当なども欲しい。namespace, node, pod, log だけだとわざわざこのツールを使うほどでもない。

ただ、自分ではこのようなツールを作ったことが無いので、作れるのは単純にすごい。