保守性を高めるための長時間プロセスを分散して行う

開始時から盤上に置かれている角行は、成らない限り将棋盤の81マスのうち41マスしか移動できない。これは角行が斜めにしか動けないという特性によるものである。角行は角行である限り、隣のマスには決して移動できない。
筋違い角」という手がある。相手から取った角行を盤上に置く際に、残りの40マスのみを移動可能にするような場所に置く手である。互いに筋が違う角行同士は成らない限り絶対にお互いをとれない。
システムにおいて、保守性が高まる処理を「その処理が重い」ため毎日は行わないことがある。例えば、DBのREINDEX処理や完全バックアップ、ファイルシステムのチェック、OSの機能としてのシステムバックアップなどがそれに当たる。やるべき頻度は、処理時間と重要性によって決定される。月に一回程度でいいものや、週に一回程度行いたいもの。場合によっては年に一回程度でいいものもあるかもしれない。注意すべきなのは、dailyな処理とweeklyな処理とMonthlyな処理を処理の重さを無視して設定すると、重い処理が同日に重なってしまうことがあるということだ。
たとえばweeklyな処理が1時間かかり、Monthlyな処理も1時間かかるとする。この2つが重なると当然だが2時間かかる。マージンをどの程度見ておくのかにもよるが、2時間は長すぎるだろう。ではどうすればいいのか。一番いい方法はMonthlyな処理をweekly(7日)の倍数である28日か35日おきに行うこととし、weeklyな処理と開始する曜日をずらしておくことだ。こうすれば2つの処理は決して同じ日に行われることがない。毎週月曜日と4週おきの火曜日は出会わない。
注意すべきなのは、上記はあくまで「保守性を高める処理」のみに適用すべきであって、weeklyやmonthlyな締め処理等に適用すべきではないということだ。それらはあらかじめ、「かち合ったとしても処理がすべて時間内におわる」ように設計しておくべきだ。

とかいうことをcrontabをいじりながらおもった。