見出し画像

EBt の分散DBについて

はじめに

EBt では、ちょっと特殊な DB 構造をとっています。具体的には、データをフルセット持っている DB の存在を仮定していません。つまり、データの完全性を保証しない DB です。でもまぁ、一人で1台のPCで使っている場合は、完全制覇当然のように担保されます。分散したときに完全性が満たされなくなるということです。

完全性を捨てたけど

データにアクセスできないとかそういうわけではありません。EBt の DB の基本発想は全てのデータはどこかのPCにあるので、必要になったときに問い合わせるというものです。でも、それだと古いデータと新しいデータが混じると困るよね?って疑問が当然出てきます。それについては、ほぼ全てのレコードに更新日付の情報を持たせることで、古いデータが後から届いてもデータが腐ることはありません。まぁ、同時にに箇所で守成すると後から修正した方が勝ってしまいますけどね。
あと、データについては、Excel で言うところの行ではなくセルの単位で更新管理をしているので、部分的な修正があっても問題なし。あと、行内のセルの数も可変なので、例えばリンクを増やしたり減らしたりしても別に問題などありません。
当然、こんな機能を持つ DB なんて転がっていないんで、全部自分で作ってます。DB のデバッグはとてもしんどかった。

データはどっかにあるので

基本的になければ問い合わせるというのが基本スタンスです。ちなみに、ネットワークから隔離されているとき(ノートPC持ち運んでいるときとか)は、問い合わせ先がないので古いデータを対象として動作することになります。もちろん、このタイミングで DB を修正することもあるでしょう。不安?でも大丈夫。セル単位で更新管理をしているし、このデータが必要になったときに参照リクエストがとんでくるから問題ないのです。

ちなみに、ネットワークに繋がっているときは、アクセスしたDBの情報を他のPCにも転送します。これは、できるだけデータを拡散させるための工夫みたいなものです。データを拡散させればさせるほど、どっかにデータがある確率が上がりますので。

でもまぁ、常に誰かが動いていた方が助かるので

サーバーも用意しました。サーバーは、DBの中継機能のみを持つ EBt だと思えば良いです。中身もそんな感じですし。そうしておけば、サーバーにデータがどんどん溜まっていきます。
で、ここで一つ大きな利点なのですが、サーバーの存在は任意です。今までの話の流れから容易に想像つくとは思いますが。だから、サーバーをメンテナンスのために止めてもシステムとしては全く問題なく動作します。

一応、サーバーがあると、ネットワークのトポロジはサーバーを中心としたスター型になりますが、サーバーがいなくなったら、自動的に全結合型のネットワークに切り替わります。
通信効率的には、サーバーがあると必ず間にサーバーを挟むのでちょっと通信のロスがありますが、そのかわり PC が増えても何とかなるという利点もあります。

というわけで、PCの数が増えたらサーバーを導入するという考え方でも問題ありません。

とはいえちょっとした制限事項もあります

いま、サーバーを複数起動するとちょっとデータ通信がハウリングを起こしてしまうと言う面倒くさい問題が残っています。まぁ、色々と原因になるところを潰しているところなのですが、ちょっと時間がかかりそうです。というわけで、当面はサーバーの複数台の稼働はやらない形でお願いしたいところです。

サーバーは Win と Linux で動きます

GUI なくてもいいんで、Linux でも動くようにしました。ま、そのために .net で書いたというのもありますし。ただ、Linux 版のリリース方法についてはちょっと悩んでいます。今のところ安定稼働しているのでリリース方法を決めるだけなんですが、まぁ、.net のランタイムを自分で入れられる人なら問題ないかな?あと、json ファイルもちょっと修正しないといけないところがあるからややこしいけど大丈夫かな?とか、不安はいっぱい。まぁ、Linux でサーバー動かすつもりの人なら、無難にこなしてくれそうですけど。
あ、Ctrl-C で止めないでください。今はそれで止められても終了処理が流れません…

そろそろリリース予定です

とりあえず現時点で問題なく動いているので、リリースしても大丈夫かな?って思っています。
というわけで、多分7月中には使えるようになると思います。
しばらくお待ちくださいませ。

この記事が気に入ったらサポートをしてみませんか?