システムの同期について[日々是ことば拾い]

[Written by たろう]
WikiとWats(あ、このページのシステムね)と複数の端末の同期についてつらつらと書いていきます。
そのための前提知識としてWatsはリンク先を見てもらうとして、Wikiの解説は…どこか参照して…ってことで、Wats、Wiki系を知っているものとして話を進めます。

ちなみにこのページのシステムであるWatsとWiki系は違うシステムです。
Wikiをヒントにして1から作ったので、Wikiと外見は似ていますが、内部はかなり違うと思います。
…「思います」というのは、実はWiki系のソースをまだ一度も見たことがないから(笑)

簡単な例で言うと、リンクを張る処理です。
Wikiは「テキスト内にリンクして欲しい部分は明示して記述する」必要性があります。ほにゃららとかWikiNameで書いたりとか…で、テキスト内の明示されたリンク情報を元にリンク先を決め、リンクを張ります。
#逆にWikiだとWikiNameでなく、で囲んでいないと、リンクの張れる単語でもリンクは張らないのかな?
##そろそろまじめにソース読もうかなぁ…

ところが、Watsは全文を検索してWordと同じ文字列はすべてリンク張るという処理をしているため、「テキスト内にリンク情報というものは存在しない」んです。あ、Wats外部へのリンクは別です。
だから、テキストを編集しなくても、Word数が増えると自動的にリンク箇所が変化します。
#おそらくテキスト数が増えると極端に処理速度が落ちていくという欠点があると思います。

{red:[たろう,02/02/05/23:45:50]ちょいとあちこちのWikiページを見てみたのですが、一部はWatsのように自動リンクするものもありますね。ここで言っているWiki系は「PalmWiki」のような挙動をするWikiってことで…すいません。
}

さて、複数の端末上にWiki(とかWats)が乗っている場合、その端末同士でデータの同期をとるってことを考えてみます。
Wikiは内部構造を知らないのでWatsの話に限定して進めますが、単純にデータを移すのは簡単です。Watsはテキストデータなのでデータのあるディレクトリ同士をrsyncすればOKです。
問題は複数の端末でそれぞれ編集したときの「同期」だと思います。

同期というのは、
Aという端末でaというテキストを編集しa'(bは編集せず)
Bという端末でbというテキストを編集しb'(aは編集せず)
となっている場合、同期を取ったらどちらの端末もa'、b'と両端末で編集した内容がどちらにも反映されていないといけません。
…ところで、
Aという端末でaというテキストを編集しa'
Bという端末もaというテキストを編集しa''
の時に同期を取った場合は、ややこしいことになるので、今回はa'、a''どちらかより最近に編集した方に反映されることにします。

Watsではこの同期処理が難しいデータフォーマットになっています。
Watsは各テキストを区別するためにIDのようなもので管理していますが、そのIDは編集時間を元にしています。そのため、テキストを編集した場合、編集前のテキストと編集後のテキストのIDは厳密に言うと違うIDになり、編集前テキストは削除されることで、テキストの編集内容が反映しているように見えるわけです。
したがって、先ほどの例で言うとaとa'が違うものと判断されるので、反映されずに両方のデータがそれぞれの端末に残ってしまいます。別に更新履歴だと思えばまあ問題はないのですが、表示の際どちらも同じように表示されるので、うっとうしいでしょ(笑)
まあ、この辺はそのうち何とかしようとは思っていますが、データフォーマット自体変える可能性もあるので、かなり先のお話ですね。

ちなみにその同期をとる端末がPalmだった場合、先ほど書いたようにWatsとWiki系は内部が異なるため、PalmWikiとの同期はかなり難しいです…PalmWatsを作る方が早いのかなぁ(笑)
tags:
[2002-02-06 13:28:44]


Comment


(このNoteは書き込みから約半年以上経過したためコメントFormを非表示しています)

Zenback