色々あったが、JSON DBライクなものを作ろうと決意した。
とはいっても、一度フォルダ構造へ展開し、
その後、フォルダに対するアクセスを行うことで、JSONのアクセスを行う仕組みを考えている。
だって、フォルダのがファイル仮想システムより早いでしょ?
それにファイルが壊れても、壊れた責任はOSに取らせられる。
つまり、ファイルの復元なども、OS側の機能にまかせられるはず。
そして、フォルダ展開しておけば、バックアップはフォルダ事コピーで済む。
この決意をしたのは、Sedna XML DB がラズパイでコンパイルできなかったからだ。
それに今どき、Golangでお気楽に逝きたい。
C++とか、もうないわーと思うし!
JSONを食わせると、1バイトずつ判定しつつ、JSONのキーやバリュー配列なんかを考慮し、フォルダに展開する。
展開結果は図の通り
3枚の画像が入り合計1M程度のJSONだが、WSLで動かして700mSecから2秒程度でインサートできる感じ
WSLが遅すぎるんじゃなかろうか・・・
さっきWindowsUpdateする前は、700mSecだったのに、今アップデート後にもう一度やってみたら、めちゃ遅いんですけど、倍から3倍くらいかかるようになったんですけど?
どういこっちゃ・・・
あとで、ラズパイで環境作ってやって見ようと思う
んで、やってみた。
golang 1.17をRaspberryPi4に入れてやってみたんだが・・・
5秒から7秒弱かかる。
こりゃやばいなぁ・・・なんでこんなに遅いんだろう?
SDカードだから?
HDD付けてそっちに書いてみるか?
いや、でも、SDカードは読み書き100MB/Sくらいはあるはずだ。
たかだが、数百キロのファイルを書き込むのにこんなにかかるわけがない。
もしかして、ファイルアクセスは遅いのか?
なので、データベースは仮想ファイルシステムを使っているのか?
よくわからんす・・・
そこら調べてみるっす
ベンチ調べたらファイルのReadで時間がかかってた。
一度os.ReadFileしてから、bytes.NewReaderでio.Readerにしたら0.226sで終わった。
なんじゃこりゃ・・・
ファイルから1バイトずつ読むと遅いのか・・・
まぁ一度に書き込んだ方が早いわなそりゃ
昔そんなコピーツールがあったっけ・・・
いずれにしろ、テストコード側の問題だったので、ネットワークから渡ってくる文字は全部読んでから処理する方針だし(早くRead終わりたいからね)本体側プログラムいには問題が無いと思われる。
0 件のコメント:
コメントを投稿