~ストーリー 1~

★開発日記★リアルタイムではなく、定期的にポイントのレートを計算するデメリット。

2017/07/04 00:21:00
(2017/07/02 48:21:00)
HTML版 | AMP版 | AMPストーリー版
金曜日、今泉弟と、ポイントシステムに関して、ガッツリ会議しまして。

やはり、一番の課題である、ポイントの価値を計算する際に、リアルタイムで計算するか、それとも一定期間で計算するか。

ここ、非常に重要な判断で、システム設計が、大きく変わってくるんですよ・・・。
なので、あーでもない、こーでもないと、会議。

理想はリアルタイムでの計算なのですが、アクセス数が増えると、会員数が増えると、それなりのサーバを用意しないといけません。

たぶん、これは、相当なコストになるだろうな~と。
そこで、今泉兄が構築している簡易版は、リアルタイムでの処理になるかと思いますが。

今泉弟が構築している正式版は、アクセス数、会員数を考慮して、10分に1回の計算にしよう・・・と、改め、確認しまして。

その方向で、引き続き、構築するであろうことが、決まりました。
しかし、念のため、この週末に、お互いに持ち帰り、シミュレーションする事に。

本当に、これで問題なく、処理が可能なのかどうか。

今泉兄も、じっくりと紙に書いて、計算したんですよ、間違いがないか、どんな事が発生するのか。
で、リアルタイムのメリットですが、何しろ、プログラムがシンプルになります。

変動するポイントという事で、デジストーンという、価値が変動するポイントと。

デジストコインという価値が固定のポイントがありまして。
デジストーンは、デジストコインに交換する事で、価値が確定できます。

デジストコインの価値は、1DSC=1円相当なので、デジストコインの原資の数は、そのまま、デジストコインの数なので、計算は必要ないのですが。

デジストーンの価値は、デジストーンの原資と、デジストーンの総数から決まるので、裏には、デジストーンの原資というものが存在しています。
これだけでも、ちょっと複雑なのですが、それでも、リアルタイムでの処理なら、比較的シンプルなんですよ。

随時、デジストーンの総数と、デジストーンの原資を把握して、原資を、デジストーン総数で割る事で、デジストコインとの交換レートが決まりますので。

後は、このレートを元に、処理するだけなので、シンプルと言えば、シンプルです。
ただ、先ほど、お伝えしたように、アクセス数によっては、処理が重くなりますので。

複数台サーバを用意する必要があり、各サーバが、ポイントの動きを処理して、最終的にそれをまとめるサーバが、合計するだけ。

サーバが多ければ、多いほど、負荷分散ができるので、サーバ代がすごい事になりそうです。
そこで、一定期間のポイントの動きを元に、例えば、10分に1回、レートを計算する方法がありまして。

10分間に付与されたデジストーンと、デジストーンの原資は、仮の状態にしておきます。

そして、10分後に、その10分間のポイントの動きを処理します。
この処理が終わると、仮のデジストーンが、正規のデジストーンになりまして。

やっと、デジストコインに交換できる状態になります。

ただ、問題がありまして・・・。
この10分間のポイントの動きの中には、正規のデジストーンがデジストコインに交換された分も、含まれるんですよ。

これは、計算の中に入れるので、問題ございません。

ただ、10分後に、この10分間のポイントの動きを計算する際に、正規のデジストーンをデジストコイン交換してしまうと、レートがでないので。
その間、正規のデジストーンとデジストコインの交換を、ストップする必要があるんじゃないか・・・という事が、発覚しまして。

あ、今泉兄のシミュレーション上なので、明日、今泉弟に確認したら、違う!って事もありえます。

特に問題ないかもしれないのですが、今のところ、このデメリットが発生しそうでして・・・。
となると、10分に1回、どれくらいの時間になるかわかりませんが、例えば、2分とか、3分とか、デジストーンをデジストコインに交換できない時間が発生してしまいます。

10分に3分として、結構な割合で、この状態に遭遇する事になるかと。

3回に1回程度は、「今は交換できません・・・。」の案内がでるって事ですので。
かといって、計算している間も、正規のデジストーンをデジストコインに交換できるようにすると、こんなことが発生します。

もちろん、レートはまだ出ていませんので、それまでのレートで交換する事になります。

これは、百歩譲って、問題ないんですよ、計算前にデジストコインに交換出来る事と、変わりありませんので。
ただ、計算後のレートにずれが生じます。

極端な例ですが、計算している間に、四分の三のデジストーンがデジストコインに交換されてしまった場合で考えてみましょう。

まずは、計算中は、正規のデジストーンはデジストコインに交換できない場合からです。
正規デジストーンは、10万dstあり、デジストーンの原資が1000円だったとします。

この場合のレートは、1000円÷10万dst=0.01DSC万ですね。

デジストーン100dstで、デジストコイン1DSCに交換可能です。
しかし、計算中は、デジストコインに交換できませんので、そのままキープされ。

10分間に付与された仮のデジストーンと、デジストーン原資の計算が始まります。

仮のデジストーンは1万dst、デジストーンの原資は50円注入されたとします。
デジストーンは、正規の10万dstと、仮の1万dstで、合計11万dst。

デジストーン原資は、正式の1000円と、仮の50円で、1050円。

計算後の交換レートは、1050円÷11万dst=0.009545DSCになります。
計算すると、少数点は切り上げなので、105dst=1DSCになります。

これが、本来の交換レートです。

リアルタイムでも、途中、デジストコインの交換がなければ、最終的には、この状態になります。
ところが、計算中も、デジストコインの交換をOKにした場合。

極端な例という事で、四分の三のデジストーンが、デジストコインに交換されてしまった状態を見てみましょう。

正規デジストーンは2.5万dst、デジストーン原資は250円、残っている状態です。
そして、先ほどと同じく、10分間に付与された仮のデジストーン1万dstと、デジストーン原資50円の計算が始まります。

デジストーンは、正規の残りの2.5万dstと、仮の1万dstで、合計3.5万dst。

デジストーン原資は、正式の残り250円と、仮の50円で、300円。
交換レートは、300円÷2.5万dst=0.008571DSCになりまして。

少数点を切り上げ、117dst=1DSCになるんですよ、117dscないと、1DSCに交換できません。

しかし、この時点では、四分の三のデジストーンが、デジストコインに交換されてしまった事を、考慮できませんので。
この交換は、次回の計算時に反映されるので、その後のレートが117dst=1DSCになるんですよ。

でも、この時点では、四分の三のデジストーンが交換されていない状態。

そうです、初めに計算した、105dst=1DSCの状態なんですよ。
となると、105dst=1DSCのレートで、四分の一のデジストーンや、仮だったデジストーンを、デジストコインに交換できる状態に。

このレートで交換すると、原資が足りなくなります・・・。

場合によっては、結構な損害になる可能性があるんですよ。
という事で、一つの方法は、10分に1回、計算するとしても、仮デジストーンは、翌日にならないと、正規のデジストーンにしない事。

そして、10分に1回計算した内容を保持し、24時間で1回、最後にまとめの計算を行う事。

その際、それまでの正規のデジストーンをデジストコインに交換するのを、ストップする事です。
深夜の3時とか4時など、アクセス数の少ない時間帯に、このレートを計算し、レートを変更する運用ルール。

10分に3分、交換ができない運用よりは、1日1回1時間もかからないと思いますが、1時間程度、交換できない方が、利便性は増すかと思っています。

ただ、随時価値が変動しないので、気にならない反面、レートのページのアクセス数は期待できない・・・という事でして。
もちろん、オーナー制度で、各コーナーのオーナーになった人は、自分のポイントの他、オーナー分のポイントが随時増えるので、その楽しみはあります。

ユーザの方も、いろいろなページを見て、デジストーンが貯まっている楽しさは、体感できます。

ただ、価値が変動するのが、デジストのウリですので・・・。
ま~、1日1回ではなく、1日2回とか、3回とか。

できれば、1時間に1回、10分程度の交換停止で済むなら、それならいいかもな~と。

出来る限り、ポイントの価値が変化するのを、実感できるサイトにしたいと思います。
という事で、もう一度、リアルタイムが可能か検証して。

特に、仮デジストーンと、正規デジストーンに区別する事で、相当、システムが大変になるようなので。

このリアルタイム処理は、もう一度、じっくり検討するとして。
定期的に処理する場合でも、なるべく、細切れにしないで、ある程度まとめて、デジストコインに交換できない時間帯もまとめるようにしてみます。

ポイントの価値が随時変わるようにすると、その分、交換できない時間も、まばらに・・・。

交換できない時間をまとめると、ポイントの価値が随時変動しない・・・、たまにしか変動しない・・・。
これは、トレードオフの関係なので、仕方ないとして・・・。

さらに、リアルタイムだとお金がかかるけど、随時、ポイントの価値が変動。

定期的にしかポイントの価値が変動しなければ、サーバ代を節約。
これもまた、トレードオフという事でして。

考えますよ、このバランスをうまく調整して、最高のサービスにしたいと思います。

いろいろと絡み合い、ただ、このトンネルから抜け出した時、きっと、良いモノが出来るんだと思っています。
よし、頑張りましょう。

前進あるのみ。

まだまだ、スタート地点ですので、この先の困難を覚悟して、一歩また一歩、進みたいと思います。