2021年9月6日月曜日

JSON2FolderStructure(JSONからフォルダ構造への変換)

色々あったが、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 件のコメント: