情報処理装置、その同期制御プログラム、その同期制御方法および同期制御システム
【課題】データのレプリケーションに関し、データが衝突した場合の処理負荷を軽減する。
【解決手段】無線または有線(ネットワーク6)により接続される接続先装置(情報処理端末4−1、4−2、4−3)が保存するデータと同期を行う。通信手段(通信部8)は接続先装置からデータを取得する。データは識別情報によって識別され、記憶手段(メモリ10)に格納される。そして、処理手段(プロセッサ12)は、接続先装置から取得したデータの識別情報が記憶手段にあるデータの識別情報と一致すれば、いずれか一方の識別情報をユニークな識別情報に変更し、これら識別情報とともに各データを記憶手段に格納する。
【解決手段】無線または有線(ネットワーク6)により接続される接続先装置(情報処理端末4−1、4−2、4−3)が保存するデータと同期を行う。通信手段(通信部8)は接続先装置からデータを取得する。データは識別情報によって識別され、記憶手段(メモリ10)に格納される。そして、処理手段(プロセッサ12)は、接続先装置から取得したデータの識別情報が記憶手段にあるデータの識別情報と一致すれば、いずれか一方の識別情報をユニークな識別情報に変更し、これら識別情報とともに各データを記憶手段に格納する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、動的Web(World Wide Web)ページの分散実行など、接続を契機に接続先装置との間で保存データを同期化する情報処理装置、その同期制御プログラム、その同期制御方法および同期制御システムに関する。
【背景技術】
【0002】
パーソナルコンピュータ(PC)、スマートフォン、タブレット端末、携帯電話端末などの情報処理装置が普及している。これらの情報処理装置と接続先装置との間でデータ複写をする同期制御システムでは接続を契機に同期化を実行し、各装置で個別に保有しているデータ複写(レプリケーション)を実行する。携帯端末などの小型の情報処理装置のデータ複写では、処理時間やフィールドの軽減よりもデータの整合性や出力結果を優先させている。
【0003】
このような同期化処理に関し、特許文献1には、データを複写した装置の識別子を有し、接続先装置が自装置以外の他装置に関する最新のデータを保持している場合には、そのデータで自装置側のデータを複写するピアツーピアの処理が記載されている。
【0004】
データの整合性に関し、特許文献2には、時刻情報をID(IDentification)に用いてデータの整合性を確保することが記載されている。このデータ間の整合性確保に関し、特許文献3では、データの競合を解決する際に指定する識別子を有することにより、複数データベース間の整合性を確保することが記載されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2005−293560号公報
【特許文献2】特開2005−077366号公報
【特許文献3】特開2002−157158号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
ところで、家族間や友人間(情報の共有者・利用者)で情報を共有し、その保有データを複写する場合がある。斯かるシチュエーションでは、保存データの並び順序や重複データの存在よりも、各保存データの処理負荷の軽減が重要である。つまり、データが内容的に一致し、データ間の衝突があっても、データの更新日時が異なれば、各データを保存することが有用である。内容的に一致していても、そのデータを消去してしまうと、データの推移を残留データからは確認や判断をすることができない。また、複数の利用者がデータ更新を行う場合では、一の利用者がデータを取得してから更新するまでの間に行われたデータ更新が消去されることになる。データ間の衝突を回避するためにデータの内容の一致、不一致を判断すれば、その処理負荷が大きくなるという課題がある。
【0007】
そこで、本発明の目的は、斯かる課題に鑑み、データのレプリケーションに関し、データが衝突した場合の処理負荷を軽減することにある。
【課題を解決するための手段】
【0008】
上記目的を達成するため、本開示の情報処理装置、その同期制御プログラム、その同期制御方法および同期制御システムは、無線または有線により接続される接続先装置が保存するデータと同期を行う。通信手段は接続先装置からデータを取得する。データは識別情報によって識別され、記憶手段に格納される。そして、処理手段は、接続先装置から取得したデータの識別情報が記憶手段にあるデータの識別情報と一致すれば、いずれか一方の識別情報をユニークな識別情報に変更し、これら識別情報とともに各データを記憶手段に格納する。
【発明の効果】
【0009】
本開示の情報処理装置、その同期制御プログラム、その同期制御方法または同期制御システムによれば、次のいずれかの効果が得られる。
【0010】
(1) 同期した際に、接続先装置のデータと保存データの識別情報が一致すれば、いずれか一方の識別情報をユニークな識別情報に変更するので、該識別情報とともに各データを複写して保存できる。
【0011】
(2) 一致した識別情報をユニークな識別情報に変更して各データを保存すれば、データの識別フィールドが不要であるので、データ量を削減できる。
【0012】
(3) 識別情報が衝突したデータ識別のための処理や処理時間が不要であり、データの処理時間を短縮できる。
【0013】
(4) 情報処理装置が携帯装置のようにストレージ容量が小さい場合や、プロセッサ能力が低い場合であっても、効率よくデータ複写をすることができる。
【0014】
そして、本発明の他の目的、特徴及び利点は、添付図面及び各実施の形態を参照することにより、一層明確になるであろう。
【図面の簡単な説明】
【0015】
【図1】第1の実施の形態に係る同期制御システムの一例を示す図である。
【図2】同期制御の処理手順の一例を示すフローチャートである。
【図3】第2の実施の形態に係る同期制御システムの一例を示す図である。
【図4】Webページ利用時のシステム構成を示す図である。
【図5】動的Webページの構成を示す図である。
【図6】動的Webページの構成とレプリケーションを示す図である。
【図7】ホスト間のレプリケーション1を示す図である。
【図8】ホスト間のレプリケーション2を示す図である。
【図9】ホスト装置の構成例を示す図である。
【図10】同期制御のソフトウェアおよび機能の構成を示す図である。
【図11】情報処理端末のハードウェアの一例を示す図である。
【図12】レプリケーションの処理手順を示すフローチャートである。
【図13】レプリケーションの開始を示す図である。
【図14】レプリケーションのテーブル取得を示す図である。
【図15】レプリケーションのレコード送信を示す図である。
【図16】レプリケーションのレコード受信を示す図である。
【図17】レプリケーションの終了を示す図である。
【図18】レコードの構成と同期による変化例1を示す図である。
【図19】レコードの構成と同期による変化例2を示す図である。
【図20】レコードの構成と同期による変化例2の続き部分を示す図である。
【図21】レコードの構成と同期による変化例2の続き部分を示す図である。
【図22】同期管理テーブルを用いない場合のレコードの構成と同期による変化例を示す図である。
【図23】ホスト1・2間のレプリケーションによる同期前後および出力を示す図である。
【図24】従来のレプリケーションを示す図である。
【図25】データの記憶容量を示す図である。
【図26】ホストのデータベースおよび同期管理テーブルの構成例を示す図である。
【図27】アプリケーションのテーブルの構成例を示す図である。
【図28】テーブル1および同期管理テーブルの構成例を示す図である。
【図29】テーブル1のレコードにおけるコラムの構成例を示す図である。
【図30】レプリケータ・サービスの処理手順を示すフローチャートである。
【図31】レプリケータ・サービスの例外処理の処理手順を示すフローチャートである。
【図32】全レプリケーション(S202:図30)のサブルーチンの処理手順を示すフローチャートである。
【図33】IFレプリケーション(S223:図32)のサブルーチンの処理手順を示すフローチャートである。
【図34】ネットワーク検出サービスの処理手順を示すフローチャートである。
【図35】ネットワーク検出サービスの例外処理の処理手順を示すフローチャートである。
【図36】レプリケータ・ホスト検出サービスの処理手順を示すフローチャートである。
【図37】情報処理端末・PC間で実行されるレプリケーションのシーケンスを示す図である。
【図38】同期対象の決定処理の処理手順を示すフローチャートである。
【図39】同期対象決定の動作例を示す図である。
【図40】図37中のloop1の処理手順を示すフローチャートである。
【図41】図37中のloop2の処理手順を示すフローチャートである。
【図42】データベース更新とデータ衝突の回避処理の処理手順を示すフローチャートである。
【図43】ホスト1の具体的なレプリケーションの処理手順を示すフローチャートおよびデータベースのテーブル変化を示す図である。
【図44】ホスト1の具体的なレプリケーションの処理手順を示すフローチャートおよびデータベースのテーブル変化を示す図である。
【図45】ホスト1の具体的なレプリケーションの処理手順を示すフローチャートおよびデータベースのテーブル変化を示す図である。
【図46】ホスト1の具体的なレプリケーションの処理手順を示すフローチャートおよびデータベースのテーブル変化を示す図である。
【図47】ネットワーク・インタフェースのリスト、ネットワーク・インタフェースの構成を示す図である。
【図48】LANの接続状態を示す一時記憶niのデータ構造を示す図である。
【図49】一時記憶sv(図33)の構成例、ネットワーク・インタフェースの構成を示す図である。
【図50】LAN接続を表す一時記憶svのデータ構造を示す図である。
【図51】一時記憶dif(図34)の構成例およびネットワーク構成の変化を示す図である。
【図52】一時記憶nibak(図34)、ni、dif(図34)の各内容を示す図である。
【図53】一時記憶dscvr(図36)のデータ構造およびLAN接続の構成を示す図である。
【図54】一時記憶cur(図38)の構成および複写動作を示す図である。
【図55】一時記憶itbl(図38)の構成および内容を示す図である。
【図56】一時記憶imp(図38)の構成および複写動作を示す図である。
【図57】一時記憶dbl(図40)の構成、データベースの構成、一時記憶dblのデータ構造を示す図である。
【図58】一次記憶tbl(図40)およびホストの構成例を示す図である。
【図59】一次記憶tblの初期化および内容を示す図である。
【図60】一次記憶rcl(図40)の構成およびレコードの構成を示す図である。
【図61】一次記憶tblおよび一時記憶rclの内容を示す図である。
【図62】一時記憶idbl(図41)の構成、ホストのデータベースの構成、一時記憶idblの内容を示す図である。
【図63】一時記憶itbl2(図41)の構成およびホストのデータベースの構成を示す図である。
【図64】一時記憶itbl2の初期化および内容を示す図である。および内容を示す図である。
【図65】一時記憶ircl(図41)の構成およびレコード構成を示す図である。
【図66】一時記憶itbl2および一時記憶irclの内容を示す図である。
【図67】インタフェース別登録ホストの構成例、そのレコードの構成例および内容を示す図である。
【図68】UUID・内部コード変換方式の構成を示す図である。
【図69】複数の情報処理端末間のメッセージデータの送受信に用いた同期制御システムを示す図である。
【発明を実施するための形態】
【0016】
〔第1の実施の形態〕
【0017】
図1は第1の実施の形態に係る同期制御システムを示している。図1に示す構成は一例であり、係る構成に本開示の情報処理装置、その同期制御プログラム、その同期制御方法または同期制御システムが限定されるものではない。
【0018】
図1に示す同期制御システム2は、本開示の情報処理装置、その同期制御プログラム、その同期制御方法または同期制御システムの一例であり、情報処理端末4−1と、接続先装置として情報処理端末4−2を備えている。これら情報処理端末4−1、4−2はネットワーク6により接続されている。
【0019】
情報処理端末4−1、4−2は本開示の情報処理装置の一例であり、ネットワーク6により接続され、同期処理により各自の保持データを複写する。ネットワーク6は、情報処理端末4−1、4−2間を接続するネットワークであり、インターネット(Internet)でもよいし、イントラネット(Intranet)やLAN(Local Area Network )でもよい。通信媒体は無線でもよいし有線でもよい。
【0020】
この情報処理端末4−1は、通信部8、メモリ10およびプロセッサ12を備えている。通信部8は通信手段の一例であり、接続により情報処理端末4−2からデータを取得する。メモリ10は、データを格納する記憶手段の一例であり、例えば、データの更新時刻を識別情報に用いて複数のデータを保存する。
【0021】
プロセッサ12はデータを処理する処理手段の一例であり、少なくともデータ複写機能、データ衝突回避機能を備えている。データ複写機能は、情報処理端末4−2との接続を契機に、同期処理を媒介としてメモリ10に保存中のデータを複写する機能である。つまり、既述のデータのレプリケーション機能である。データ衝突回避機能は、このレプリケーションに際し、データ間の衝突を回避する。情報処理端末4−2がメモリ10に無いデータを保持している場合には、該データでメモリ10にあるデータを更新する。データの識別情報に更新時刻を用いた場合には、同一の更新時刻からなる識別情報を持つデータが更新されれば、該更新時刻を変更することによりユニークな識別情報として情報処理端末4−2との間でデータの整合性を確立する。この結果、データ間の衝突が回避される。
【0022】
情報処理端末4−1に対する接続先装置である情報処理端末4−2は本開示の情報処理装置の一例であり、既述の情報処理端末4−1と有線または無線により接続される単一または複数の通信先のひとつである。この情報処理端末4−2の構成は情報処理端末4−1と同一でもよく異なってもよい。
【0023】
図2は情報処理端末4で実行する同期制御の処理手順の一例を示している。
【0024】
この処理手順は、本開示の同期制御プログラムの一例である。この処理手順では、接続先装置(情報処理端末4−2)との通信を確立させ(S11)、データの更新処理に移行する。通信の確立はデータの更新処理の契機であり、通信は無線または有線により情報処理端末4−2と接続により実行される。
【0025】
通信の確立の後、接続先装置(情報処理端末4−2)から提供されるデータと保存中のデータの識別情報の比較を行う(S12)。この識別情報の比較では、提供されるデータと保存中のデータの識別情報が一致しているか否かを判定する(S13)。つまり、情報処理端末4−1は取得したデータの識別情報とメモリ10にあるデータの識別情報とが一致しているか否かを判定する。
【0026】
識別情報が一致していれば(S13のYES)、データ間で識別情報が衝突している。このため、衝突回避処理として識別情報の変更を行ない(S14)、識別情報の衝突回避をする。つまり、この衝突回避処理では、識別情報が一致すれば、何れか一方の識別情報を変更し、ユニークな識別情報に更新する。例えば、識別情報にデータ更新時刻を用いている場合には、この更新時刻をインクリメントまたはディクリメントすることにより、ユニークな識別情報に変更する。具体的には識別情報を構成する更新時刻に更新時間単位として例えば、1〔秒〕を追加して変更すれば、識別情報がユニークな識別情報に更新されることになる。
【0027】
この衝突回避処理の実行の後、データの複写(レプリケーション)を実行する(S15)。ユニークな識別情報とともに各データをメモリ10に格納し、この処理を終了する。
【0028】
S13において、識別情報が一致していなければ(S13のNO)、データ間の衝突がないので、識別情報の衝突回避処理は不要であるから、識別情報の変更(S14)を行うことなく、データの複写(S15)を実行する。
【0029】
斯かる構成によれば、データのレプリケーションに際し、識別情報が一致したデータが存在していれば、いずれか一方のデータの識別情報をユニークな識別情報に変更し、これら識別情報とともに各データをメモリ10に格納することができる。
【0030】
〔第1の実施の形態の効果〕
【0031】
(1) データ複写(レプリケーション)の際に、データの識別情報に衝突(一致)がある場合、接続先装置から提供されるデータまたは自機側の情報処理端末4−1の保存データのいずれか一方の識別情報を変更するので、識別情報の衝突を回避できる。
【0032】
(2) 変更した識別情報により各データを複写して保存できる。
【0033】
(3) 識別情報を変更するので、データの識別フィールドをプラスする必要がなく、データ量を削減でき、データ複写の処理の簡略化とともに、処理時間を短縮できる。
【0034】
(4) 情報処理端末4−1が携帯型機器のようにストレージ容量が小さく、かつ、プロセッサ能力の小さな機器でも効率よくデータ複写をすることができる。
【0035】
〔第2の実施の形態〕
【0036】
図3は第2の実施の形態に係る同期制御システムを示している。図3に示す構成は一例であり、本開示の情報処理装置、その同期制御プログラム、同期制御方法および同期制御システムに限定されるものではない。
【0037】
図3に示す同期制御システム2は、屋内システムであり、家屋14の内部(屋内)に設置されている。ルータ16はスイッチ18を介してインターネット20に接続されている。このルータ16はインターネット20と接続するための中継装置の一例である。このルータ16には屋内に配置された有線LAN(Local Area Network )22が接続されている。この有線LAN22は既述のネットワーク6(図1)の一例である。この有線LAN22にはWi−Fi(Wireless Fidelity )アクセスポイント(AP)24、デスクトップPC(パーソナルコンピュータ)26およびテレビ受像機28が接続されている。Wi−FiAP24は無線でルータ16にオンライン接続するための中継装置の一例である。
【0038】
Wi−FiAP24には無線により接続される無線LAN(Local Area Network )30が構成されている。この無線LAN30はたとえば、Wi−Fiネットワークである。この無線LAN30は既述のネットワーク6(図1)の一例である。この無線LAN30には無線接続される機器の一例として複数の情報処理端末4−1、4−2、4−3が設けられている。この実施の形態では、情報処理端末4−1はノートPC、情報処理端末4−2はスマートフォン、情報処理端末4−3はタブレット端末である。図中破線はオンライン状態を示している。
【0039】
情報処理端末4−1、4−2、4−3は携帯機器であり、携行する利用者により、無線LAN30とオンラインまたはオフラインとなる。つまり、無線LAN30のサービスエリア内の屋内使用時にオンラインとなり、サービスエリア外の屋外使用時にオフラインとなる。
【0040】
この実施の形態では、無線LAN30を備えているので、各情報処理端末4−1、4−2、4−3は屋内使用時にオンラインとなっている。これに対し、オフライン利用を前提とした構成であってもよい。その場合、各情報処理端末4−1、4−2、4−3が個別にインターネット20に接続し、インターネット20とのオンラインでWebページの利用ができる。この場合も、各情報処理端末4−1、4−2、4−3間で同期、データの共用を実現できる。
【0041】
図4はWebページ利用時の一般的なシステム構成を示している。このシステム構成は本開示の構成と比較のために例示したものである。
【0042】
屋内使用で情報処理端末間のデータやサービスの同期または共用する利用形態がある。これに対し、この実施の形態では、クラウドサービスなど、インターネット側でのサービスを利用していない。つまり、屋内システムの閉じられたサービスとして、動的Webページの同期、共用を実現している。動的Webページは、静的なファイル、プログラムおよびデータベースで構成される。静的なファイルにはたとえば、HTML(Hyper Text Markup Language)ファイルや、CSS(Cascading Style Sheets)ファイルが用いられる。プログラムにはJava(登録商標)や、Perl(Practical Extraction and Report Language:テキスト処理言語)などのプログラム言語が用いられる。
【0043】
Webサーバ39はインターネット20上に開設され、インターネット20上のクライアントに対してWebページなどのサービスを提供する。このWebサーバ39には複数のクライアント装置(クライアント1)42−1、クライアント装置(クライアント2)42−2、クライアント装置(クライアント3)42−3・・・が接続される。クライアント装置42−1、42−2、42−3・・・は情報処理装置の一例であり、通信や情報処理の機能を備えている。各クライアント装置42−1、42−2、42−3・・・はインターネット20を通じてWebサーバ39に対してアクセスし、Webサーバ39に開設されている動的Webページ44(図5)を利用する。
【0044】
動的Webページ44はたとえば、図5に示すように、Webサーバシステム46で構成されている。図5は動的Webページ44およびWebサーバシステム46の一例を示している。
【0045】
Webサーバシステム46は、Webサーバ39、プログラム実行環境48、データベースエンジン50および動的Webページ44で構成される。プログラム実行環境48はプログラムを実行可能な処理環境を提供する。データベースエンジン50はデータベース管理システムやデータベースソフトに用いられ、データベース運用の中核プログラムであり、システムの管理・運用や、検索・更新・訂正などの処理を実行する。
【0046】
この動的Webページ44には、静的なファイル52、プログラムファイル54およびデータベース56が設置される。これら静的なファイル52、プログラムファイル54およびデータベース56のレプリケーションでは、静的なファイル52やプログラムファイル54が比較的容易であり、データベース56は難しい。複数のマスターが存在するシステムではレプリケーションは可能であるが、その自動化は極めて難しい。
【0047】
図6は動的Webページの構成と、そのレプリケーションを示している。図6において、Webサーバシステム46の構成は既述のとおりであるので、同一符号を付し、その説明を割愛する。
【0048】
これに対し、クライアント装置(クライアント1)42−1ではWebサーバ58および静的なファイル60を備えている。また、クライアント装置(クライアント2)42−2では、Webサーバ58および静的なファイル60に加え、プログラム実行環境62やプログラムファイル64を備えている。
【0049】
この場合、クライアント1では静的なファイル52と静的なファイル60のレプリケーションのみのレプリケーションが可能である。これに対し、プログラム実行環境62が搭載されたクライアント2では、静的なファイル52と静的なファイル60のレプリケーションに加え、プログラムファイル54とプログラムファイル64のレプリケーションが可能である。クライアント2のようにプログラム実行環境62を搭載すれば、クライアント1においてもプログラムファイルのレプリケーションが可能となる。つまり、図3に示す同期制御システム2において、スマートフォン34、ノートPC36、タブレット端末38などの複数の情報処理端末でそれぞれのデータベースを更新する場合には、データベース管理上は複数のマスター更新が行える構成となる。
【0050】
このため、複数の情報処理端末4−1、4−2、4−3がデータベース56の更新作業を独立して行うと、各データベース56のレプリケーション時に、レコードの衝突が生じる。各情報処理端末4−1、4−2、4−3が異なるレコードを更新した場合には、レコードが衝突する問題はないが、同じレコードを更新した場合には、いずれのレコードの更新を有効とするか、または、更新処理そのものをエラーとすべきかの問題が生じる。このレコード更新について、レプリケーション例1(図7)およびレプリケーション例2(図8)を参照する。
【0051】
図7に示すレプリケーション例1は、複数のマスターがあるデータベースのレプリケーションを示している。ホスト装置(ホスト1)40−1、ホスト装置(ホスト2)40−2は、既述の情報処理端末4−1、4−2、4−3の何れでもよく、ネットワーク6(図1)で接続されて同期処理を行う関係にある。
【0052】
ホスト1およびホスト2にはそれぞれが複数のマスターがあるデータベース66−1、66−2が備えられている。各データベース66−1、66−2のレコードが個別に独立して更新されている。更新されたレコードが異なっていれば、レコードのレプリケーションを行っても、互いにレコードが複写され、レプリケーションに成功する。つまり、各レコードが複写されて各データベース66−1、66−2に保存されることになる。
【0053】
これに対し、図8に示すレプリケーション例2では、各データベース66−1、66−2のレコードが個別に独立して更新されているが、更新されたレコードが同一である場合を示している。レコードが同一である場合、各レコードの更新を独自に行っても、レプリケーションを行うと、ホスト1、2間で一方のレコードに修正され、双方のレコードを保存することができない。つまり、レコードのレプリケーションが失敗となる。
【0054】
このようなレプリケーションの失敗を回避するため、図9に示すホスト装置40では、レコードの衝突を回避するレプリケータ機能を備えている。このホスト装置40はたとえば、情報処理端末4−1、4−2、4−3、デスクトップPC26(図3)で構成される。
【0055】
このホスト装置40は、図9に示すように、データベース66、データベースエンジン68、レプリケータ70および同期管理テーブル72を備える。データベースエンジン68は、プログラムによるデータ管理、処理などを決定するシステムである。レプリケータ70はデータベースエンジン68の複数のマスターのレプリケータ機能(図10のB)を構成する。このレプリケータ70のレプリケータ機能はレコードの衝突を回避し、レコードのレプリケーションを実行する。
【0056】
データベース66にはレコード73を格納するテーブル74が設けられ、このテーブル74とともにmidフィールド76が設けられている。midはレプリケーションマスタ識別子である。midフィールド76は、midを記録するエリアである。同期管理テーブル72には既述のmidおよび最終同期日時を記録するテーブル77が設けられ、このテーブル77にはmidを格納するフィールド78、最終同期日時を格納するフィールド80が設定されている。
【0057】
このホスト装置40のソフトウェアおよび機能について、図10を参照する。図10のAに示すホスト装置40のソフトウェアの構成では、OS(Operating System)79をベースとして実行するデータベースエンジン68、レプリケータ70、Webサーバ58およびWebブラウザ82を備えている。Webサーバ58は、Webページの検索・取得などの処理を行うプログラムである。Webブラウザ82はWebページを閲覧するためのソフトウェアである。
【0058】
レプリケータ70には、図10のBに示すように、レプリケータ機能として、ネットワーク接続検出機能84、デバイス検出機能86、タイマー機能88、同期実行処理機能90、同期応答処理機能92、同期管理機能93および同期処理用データベース95を備えている。ネットワーク接続検出機能84はネットワークとの接続を検出する。デバイス検出機能86は接続されたデバイスを検出し、そのデバイスを認識する。タイマー機能88はレコードの更新日時など、時間を計時する。同期実行処理機能90は接続先装置94のデバイスと同期処理を実行する。同期応答処理機能92は、同期処理を実行している接続先装置94のデバイスに対し、応答処理を実行する。同期管理機能93は同期処理の実行や応答を管理する。また、同期処理用データベース95は同期処理に用いる各種データをデータベースによって保存する。
【0059】
このレプリケータ70がレプリケーションを開始する契機は次の通りである。
【0060】
(1) 自デバイスが起動したときにネットワーク接続が確立した場合
【0061】
(2) 自デバイスがスリープから復帰したときにネットワーク接続が確立した場合
【0062】
(3) 新しくネットワーク接続が確立した場合
【0063】
(4) ネットワーク接続している間に、新しいデバイスを発見した場合
【0064】
(5) ネットワーク接続している間に、一定時間が経過した場合
【0065】
このような契機の何れかにより、レプリケータ70がレプリケーションを開始し、実行する。
【0066】
このようなレプリケーション機能などの各種の情報処理を実行するホスト装置40を構成する情報処理端末4には図11に示すハードウェアを備えている。
【0067】
図11に示すハードウェア構成では、プロセッサ96、通信部98、記憶部100およびRAM(Random-Access Memory)102を備えるコンピュータを構成している。プロセッサ96は記憶部100のプログラム記憶部104にある既述のOS79やレプリケータ70などのプログラムを実行する。通信部98は、ネットワーク6(図1、図3)を介して他の情報処理端末つまり、他のホスト装置と通信を行う。
【0068】
記憶部100には既述のプログラム記憶部104およびデータ記憶部106が備えられている。プログラム記憶部104には、OS79や本開示の同期制御プログラムなどが格納され、同期制御プログラムとして具体的にはデータベースエンジン68、レプリケータ70が格納されている。また、データ記憶部106には既述のデータベース66や同期管理テーブル72などのレコードデータが格納され、保存されている。この保存データはレプリケーションによって更新可能である。RAM102はワークエリアを構成する。
【0069】
<レプリケーションの処理手順>
【0070】
このレプリケータ70のレプリケーションの処理手順は以下のとおりである。
【0071】
(1) 通信可能な複数のデバイスがある場合には、デバイスの選択を行う。最終同期日時が古いデバイスまたは、優先度が高いデバイスが選択される。
【0072】
(2) 接続を開始した後、接続先装置から同期管理テーブルの全体を取得する。
【0073】
(3) 接続先装置の同期管理テーブルに記録された自デバイスの最終更新日時を判断する。この処理では、最終更新日時が閾値よりも古いか否かを判断する。最終更新日時が閾値よりも古い場合には、最終更新日時が閾値よりも古いために生じている自デバイスのデータベースの差分を接続先装置に送信する。
【0074】
(4) 接続先装置の同期管理テーブルと自デバイスの同期管理テーブルを比較し、閾値よりも古い場合には、相手デバイスと自デバイスのデータベースの差分を接続先装置に要求する。これにより差分のレコードを取得する。
【0075】
(5) このようなレプリケーションの後、相手デバイスとの接続を終了する。
【0076】
図12はレコードのレプリケーションの処理手順を示している。この処理手順は、本開示の同期制御プログラムまたは同期制御方法の一例である。
【0077】
この処理手順では、レコードのレプリケーションを行う接続先装置(対象)の選択を行う(S101)。選択された対象との接続を行ない(S102)、その対象から同期管理テーブルを取得する(S103)。
【0078】
取得した同期管理テーブルを参照し、情報(データ)の新旧を対比する(S104)。このS104では、対象側レコードと自装置側レコードを比較し、対象側レコードに対して自装置側レコードが古いか否かを判断する。対象側レコードに対して自装置側レコードが古い場合には(S104のYES)、対象側レコードと自装置側レコードの差分を求め、この差分を接続中の対象に送信する(S105)。
【0079】
この送信の後、または対象側レコードに対して自装置側レコードが古くない場合には(S104のNO)、ステップS106に移行する。S106では、取得した同期管理テーブルと自装置側の同期管理テーブルとを比較し、自装置側の同期管理テーブルが取得した同期管理テーブルより古いか否かを判断する。
【0080】
自装置側の同期管理テーブルが取得した同期管理テーブルより古い場合には(S106のYES)、新しいレコードを保持している対象から差分のレコードを受信する(S107)。
【0081】
この受信の後、または自装置側の同期管理テーブルが取得した同期管理テーブルより古くない場合には(S106のNO)ステップS108に移行する。S108では、データの送信または受信をした対象の接続を切断する。つまり、上記対象とのレプリケーションが終了し、接続中の対象が残っているか否かを判断する(S109)。レプリケーションをしていない対象が残っていれば(S109のYES)、S101ないしS109の処理を継続し、対象が残っていなければ(S109のNO)、全てのレプリケーションを終了する。
【0082】
<レプリケーションの具体的な処理>
【0083】
図13、図14、図15、図16および図17は、レプリケーション処理の具体的な処理手順を示している。図13、図14、図15、図16および図17において、図9と同一部分には同一符号を付してある。
【0084】
このレプリケーションには図13に示すように、4つのホスト装置(ホスト1、ホスト2、ホスト3およびホスト4)40−1、40−2、40−3、40−4が用いられている。ホスト装置40−1、40−2、40−3、40−4は既述のノートPC、スマートフォン、タブレット端末などの情報処理端末4−1、4−2、4−3、4−4で構成される。
【0085】
ホスト1のデータベース66−1にあるテーブル74−1には、ホスト1の更新レコード108−1、ホスト1以外の更新レコード110−1が格納されている。また、ホスト2のデータベース66−2にあるテーブル74−2には、ホスト1の更新レコード108−2、ホスト1以外の更新レコード110−2が格納されている。
【0086】
この場合、ホスト1は、レプリケーション直前にホスト4と同期してホスト4からレコードを取得し、ホスト1以外の更新レコード110−1にホスト2よりも新しいレコードを保存しているものとする。
【0087】
また、ホスト2は、レプリケーション直前にホスト3と同期してホスト3からレコードを取得し、ホスト1以外の更新レコード110−2にホスト1よりも新しいレコードを保存しているものとする。また、ホスト1以外の更新レコード110−2には、ホスト1よりも古いレコード(ホスト4のレコード)を保存しているものとする。
【0088】
このようなレコードの新旧関係を前提にレプリケーションの処理手順を説明する。
【0089】
(1) レプリケーション開始に先立ち、ホスト1は図13に示すように、ホスト2との接続を開始する。
【0090】
(2) データ取得では図14に示すように、ホスト1はホスト2の同期管理テーブル72のテーブル77をホスト2から取得する。
【0091】
(3) データ送信では、ホスト1は図15に示すように、ホスト2が保存しているホスト1のデータベース16−1の最終同期日時以降のレコードつまり、ホスト1による更新レコードをホスト2に対して送信する。
【0092】
(4) データ受信では、ホスト1は、ホスト2が保存しているホスト1以外のデータベースの差分を受信する。これにより図16に示すように、ホスト1はホスト2からホスト3のレコードを取得する。
【0093】
この場合、ホスト2がホスト1よりホスト3の最終同期日時が新しい場合には、ホスト1はホスト2からホスト3の差分を取得する。ホスト1がホスト2よりホスト4の最終同期日時が新しい場合には、ホスト1はホスト2からホスト4のレコードを取得しない。
【0094】
(5) レプリケーションの終了は図17に示すように、ホスト1がホスト2との接続を終了させる。
【0095】
このレプリケーションにより、ホスト1は、ホスト1とホスト2から得られるホスト1〜ホスト4の最新レコードを収集することができる。そして、同期時にデータの識別情報である更新日時が衝突した場合(つまり、更新日時が同一である場合)の衝突回避処理を行い、レコードの識別情報である更新日時の衝突を回避している。
【0096】
<レコードの構成と同期による変化例1>
【0097】
図18はレコードの構成と同期による変化例1を示している。同期前のホスト1は、図18のAに示すように、主キーid=1に対し、一例であるデータ(data)は「12340000」であり、副キーmid=1である。midは既述のとおりレプリケーションマスタ識別子である。これに対し、同期前のホスト2は、図18のAに示すように、主キーid=1に対し、dataは「23450000」であり、副キーmid=2である。副キーmidはデバイス毎に異なる値である。
【0098】
これらホスト1、2が同期し、レプリケーションを行う。同期後のホスト1は、図18のBに示すように、主キーid=1に対し、data=「12340000」、ホスト2から主キーid=1、data=「23450000」が複写される。同様に、同期後のホスト2は、図18のBに示すように、主キーid=1に対し、dataは「23450000」、ホスト1から主キーid=1、data=「12340000」が複写されている。このレプリケーションにより、ホスト1、2の各レコードが共通化される。この場合、mid=1と、mid=2により、異なるレコードとして記録される。
【0099】
更新日時の衝突時はIDフィールドの値(例:日時フィールド(date))をインクリメントし、更新日時の衝突を回避して各レコードを保存するので、各レコードの整合性が取られる。
【0100】
なお、主キー(Primary key :プライマリキー)は、リレーショナルデータベースにおいて、レコード(組)の識別子として利用するのに最も好ましいものとして、リレーション(テーブル)毎にただ一つ、設計者により選択され定義された候補キーをいう。つまり、リレーションに格納されたレコードを一意に識別するための属性(列、アトリビュート)またはその集合のうち、そのために通常利用されるべき特定の一つをいう。この主キーにはNULLの存在が許されないが、候補キーには許されるという差がある。
【0101】
<レコード構成と同期による変化例2>
【0102】
図19、図20および図21はレコード構成と2回の同期によるホスト1、2のレコード変化例2を示している。このレコード変化例2は、1回目の同期のループ(loop)1、1回目のloop2、2回目の同期のloop1、2回目の同期のloop2の処理結果であり、各テーブル74−1、74−2のレコード変化を示している。
【0103】
(1) 同期前
【0104】
図19のAは1回目の同期前のホスト1およびホスト2のレコード構成を示している。ホスト1およびホスト2にはid=2011/05/01 10:00:00で一致するdata=100(ホスト1)、data=120(ホスト2)が存在している。つまり、各dataは同期前、識別情報である更新日時が一致し、衝突を生じている。
【0105】
(2) 1回目の同期のloop1の処理後
【0106】
図19のBは1回目の同期のloop1の処理後のレコード構成を示している。ホスト2には、ホスト1から1つのレコードが複写(コピー)されている。既述の衝突回避処理により、ホスト1のidコラムの値が変更(+1)され、つまり、id=2011/05/01 10:00:01に変更され、data=100(ホスト1)が独立したレコードとしてホスト2に記録されている。これにより、ホスト2にあるid=2011/05/01 10:00:00のdata=120との衝突が回避され、各レコードが独立したレコードとして保存されている。ホスト2にあるmid=1はホスト1からの複写レコードであることを表している。
【0107】
(3) 1回目の同期のloop2の処理後
【0108】
図20のAは1回目の同期のloop2の処理後のレコード構成を示している。ホスト1には、ホスト2から2つのレコードが複写されている。ホスト2のid=2011/05/01 09:55:00のdata=90のレコードは同期前、ホスト1には存在しないので、ホスト1にそのまま複写されている。その順序は、ホスト1にあるレコードより更新日時が古いので、もっとも古い時系列位置に保存されている。ホスト1にあるmid=2は、ホスト2からの複写レコードであることを表している。
【0109】
また、ホスト2のid=2011/05/01 10:00:00のdata=120は同期前、ホスト1に存在するレコードと更新日時が一致している。このため、既述の衝突回避処理により、ホスト2のidコラムの値が変更(+1)され、つまり、id=2011/05/01 10:00:01に変更され、data=120(ホスト2)が独立したレコードとしてホスト1に記録されている。これにより、ホスト1にあるid=2011/05/01 10:00:00のdata=100との衝突が回避され、それぞれが独立したレコードとして保存されている。
【0110】
(4) 2回目の同期前
【0111】
図20のBは、2回目の同期前のレコード構成を示している。ホスト1、2では、独自にdataを更新しており、1回目の同期のloop2の処理後からレコードの記録数が増加している。つまり、ホスト1、ホスト2には独自にレコードが複写されたため、id=2011/05/01 10:40:00で一致するdata=170(ホスト1)、data=160(ホスト2)が存在している。つまり、レコード間に衝突を生じている。
【0112】
(5) 2回目の同期のloop1の処理後
【0113】
図21のAは2回目の同期のloop1の処理後のレコード構成を示している。ホスト2には、ホスト1から2つのレコードが複写されている。ホスト1のid=2011/05/01 10:10:00のdata=130のレコードは同期前、ホスト2に存在しないので、ホスト2にそのまま複写されている。レコードの順序は時系列位置に沿っている。
【0114】
また、ホスト1のid=2011/05/01 10:40:00のdata=170は同期前、ホスト2のレコードと更新日時が一致している。既述の衝突回避処理により、ホスト1のidコラムの値が変更(+1)され、つまり、id=2011/05/01 10:40:01に変更され、data=170(ホスト1)が独立したレコードとしてホスト2に記録されている。これにより、ホスト2にあるid=2011/05/01 10:40:00のdata=160との衝突が回避され、それぞれが独立したレコードとして保存されている。
【0115】
(6) 2回目の同期のloop2の処理後
【0116】
図21のBは2回目の同期のloop2の処理後を示している。ホスト1には、ホスト2から2つのレコードが複写されている。ホスト2のid=2011/05/01 10:20:00のdata=150のレコードは同期前、ホスト1に存在しないので、ホスト1にそのまま複写されている。レコードの順序は時系列位置に沿っている。
【0117】
また、ホスト2のid=2011/05/01 10:40:00のdata=160は同期前、ホスト1のレコードと更新日時が一致している。既述の衝突回避処理により、ホスト2のidコラムの値が変更(+1)され、つまり、id=2011/05/01 10:40:01に変更され、data=160(ホスト2)が独立したレコードとしてホスト1に記録されている。これにより、ホスト1にあるid=2011/05/01 10:40:00のdata=170との衝突が回避され、それぞれが独立したレコードとして保存されている。
【0118】
<同期管理テーブルを用いない場合のレコードの構成と同期による変化例>
【0119】
図22は同期管理テーブルを用いない場合のレコードの構成と同期による変化例を示している。
【0120】
(1) 同期前
【0121】
図22のAは同期前のホスト1およびホスト2のレコード構成を示している。ホスト1およびホスト2にはid=2011/05/01 10:00:00で一致するdata=100(ホスト1)、data=120(ホスト2)が存在している。つまり、各dataは同期前、識別情報である更新日時が一致し、衝突を生じている。
【0122】
(2) 同期後
【0123】
図22のBは同期後のレコード構成を示している。ホスト2には、ホスト1から1つのレコードが複写(コピー)されている。既述の衝突回避処理により、ホスト1のidコラムの値が変更(+1)され、つまり、id=2011/05/01 10:00:01に変更され、data=100(ホスト1)が独立したレコードとしてホスト2に記録されている。これにより、ホスト2にあるid=2011/05/01 10:00:00のdata=120との衝突が回避され、各レコードが独立したレコードとして保存されている。
【0124】
ホスト1には、ホスト2から2つのレコードが複写されている。ホスト2のid=2011/05/01 09:55:00のdata=90のレコードは同期前、ホスト1には存在しないので、ホスト1にそのまま複写されている。その順序は、ホスト1にあるレコードより更新日時が古いので、もっとも古い時系列位置に保存されている。
【0125】
また、ホスト2のid=2011/05/01 10:00:00のdata=120は同期前、ホスト1に存在するレコードと更新日時が一致している。このため、既述の衝突回避処理により、ホスト2のidコラムの値が変更(+1)され、つまり、id=2011/05/01 10:00:01に変更され、data=120(ホスト2)が独立したレコードとしてホスト1に記録されている。これにより、ホスト1にあるid=2011/05/01 10:00:00のdata=100との衝突が回避され、それぞれが独立したレコードとして保存されている。
【0126】
このように、ホスト1およびホスト2では、更新時刻の一致によるレコードの衝突が回避され、それぞれが独立したレコードとして保存されている。また、この場合、同期管理テーブル72が存在していないため、レプリケーションマスタ識別子midが省略され、これを格納するフィールドも不要である。
【0127】
<レコードの同期前後および出力>
【0128】
図23はホスト1、2間のレプリケーションによる同期前後および出力を示している。図23では説明を容易にするため数値を簡略化して示している。図23において、図13と同一部分には同一符号を付してある。
【0129】
図23のAおよびBは同期前後のホスト1のテーブル74−1、ホスト2のテーブル74−2を示している。同期前、衝突していたレコードは既述の衝突回避処理によって更新時刻の変更により整合化され、それぞれ共通のレコードが記録されている。
【0130】
このように整合化されたレコードは、たとえば、データ出力タブのSQL文「SELECT date, value, mid FROM table ORDER BY date DESC LIMIT 5;」を用いることにより出力することができる。図23のCはホスト1、ホスト2の各レコードの出力を示している。出力されたレコードは更新日時が異なり、変更された更新日時を識別情報とするレコードはmid=1、mid=2によりいずれのホスト1、ホスト2から複写されたものかを識別することができる。
【0131】
これに対し、従来のレプリケーションでは、図24のAおよびBに示すように、識別子idを必要としている。このようなレコードを出力するには、SQL実行命令が「SELECT date, value, mid FROM table ORDER BY date, mid DESC LIMIT 5;」となる。つまり、従来のレプリケーションでは、date、value、mid列はテーブルの各行を完全に一意に識別できないので、プライマリキーとして列を追加する必要が生じる。つまり、整合性制約がある。また、“ORDER BY”で2以上の列を指定しないと、SQL実行の都度、出力結果の並び順が不定になるおそれがある。レコードの列が増えることや、“ORDER BY”列で2以上の列を指定することで、記憶容量やSQL実行時間が増加するデメリットがある。
【0132】
これに対し、本開示のレプリケーション処理では次のような効果が得られる。
【0133】
(1) dateフィールドの内容をユニークにするため、プライマリーキー列として利用できる。
【0134】
(2) ORDER BYで1つの列の指定で、並び順が安定した出力結果を得られる。
【0135】
(3) 記憶容量とSQL実行時間を削減できる。
【0136】
なお、既述の“ORDER BY”、“SELECT文”および整合性制約は、以下の通りである。
【0137】
“ORDER BY”句は、SELECT文において特定列の値に応じて行の並べ替えを行うことである。SELECT文で作成される表の行の出現順番を指定したい場合にORDER BY句が利用される。このORDERBY句がSELECT文に指定されなかった場合の行の出現順番は不定となる。このORDER BY句では、列ごとに昇順、降順の並べ替えを指定することができる。
【0138】
“SELECT文”は、リレーショナルデータベースのテーブル(表)の行を読み取るためのSQL文である。SELECT文では、複数のテーブルの結合(JOIN)や条件を指定しての行の絞込み(WHERE句)、同一の値を持つ列のグループ化(GROUP BY句)、列の値による並べ替え(ORDER BY句)など、目的に応じたデータの取り出しを行うことができる。
【0139】
「整合性制約」は、データベースが備えねばならない整合性の条件を実現するものであり、特にデータそのものの性質に基づく整合性についてのものである。たとえば、ある関係モデルにおいて、ある属性は一意性を保っていなければならないという条件があるとすれば、それは整合性制約で実現する。これに対して、データベースのトランザクション制御などで並行処理をうまく行なうことによって保たねばならないようなものは、一貫性制約と呼ばれる。一意性制約+や参照制約、検査制約などは整合性制約の一つである。
【0140】
<データの記憶容量>
【0141】
図25は本開示のテーブル74と従来テーブルに要するデータの記憶容量を示している。
【0142】
図25のAはテーブル構成を示している。従来のレプリケーションでは、date、valueおよびmidに加え、識別子idが必要である。これに対し、本開示のレプリケーションでは、テーブル74のレコードにdate、valueおよびmidで構成される。
【0143】
図25のBはデータサイズを示している。従来のレプリケーションでは、“id”は「INT」型であり、そのサイズは4バイトである。“date”は「TIMESTAMP」型であり、そのサイズは4バイトである。“value”は「TEXT」型であり、そのサイズはL+2バイトである。また、“mid”は「INT」型であり、そのサイズは、4バイトである。各サイズを合計すると、全サイズはL+14バイトとなり、たとえば、L=30であれば、L+14=44バイトとなる。
【0144】
これに対し、本開示のレプリケーションに用いられるテーブル74では、識別子idを用いていないので、各サイズを合計すると、全サイズはL+10バイトとなり、たとえば、L=30であれば、L+10=40バイトとなる。
【0145】
このため、本開示のレプリケーションに必要なデータサイズは、従来構成に比較し40/44≒91〔%〕となり、9〔%〕だけ削減される。
【0146】
<更新時刻の変更によるユニークな識別情報>
【0147】
更新時刻で構成されたユニークな識別情報としての時刻IDが衝突する確率は、「ホスト毎の平均更新間隔」と「ホスト数」から導かれる。利用状況からすれば、「ホスト毎の平均更新間隔」が「ホスト数」よりも十分に大きければよい。
【0148】
たとえば、平均更新間隔が10〔分〕でホスト数が“3”であれば(ケース1)、600〔個〕のスロット中の3〔個〕が使われる(=スロット使用率0.5〔%〕)ので、衝突可能性は十分に低い状況と判断できる。ここで、スロットとは、スロット=時刻ID(=レコード)を指定可能な場所である。時刻IDの精度が秒の場合、1分間あたり60〔個〕のスロットがある。つまり、最大60のレコードを生成できる。
【0149】
平均更新間隔が2〔分〕でホスト数が“12”であれば(ケース2)、120〔個〕のスロット中の12〔個〕が使われる(=スロット使用率10%)ので、衝突可能性は認められるものの衝突を回避可能な状況であると判断できる。つまり、データは十分に近いスロットに記録できる。
【0150】
平均更新間隔が30〔秒〕でホスト数が“60”であれば(ケース3)、30〔個〕の空きスロットに対して60〔個〕のスロットが必要となる(=スロット使用率200〔%〕)ので、衝突はほとんど不可避であり、衝突回避が不可能な状況であると判断できる。つまり、すべてのデータをスロットに記録できない。
【0151】
時刻IDの精度(最小単位)では、OS(Operating System)やプログラミング言語で提供されるシステム時刻の精度は1〔秒〕、1〔ミリ秒〕、1〔マイクロ秒〕などがあり、これらから選択すればよい。時刻IDの範囲はプログラム(例えば、Unix(登録商標))の場合は1970年1月1日から2038年1月19日までとなっている。本開示の内容では、時刻IDは、4バイト長で表現される1970年1月1日を起点とする秒数、あるいは8バイト長で表現される1970年1月1日等を起点とするマイクロ秒数で取り扱えばよい。
【0152】
<ホストにおけるデータベース、同期管理テーブルおよびレコードの構成例>
【0153】
図26はホストにおけるデータベース、同期管理テーブルおよびレコードの構成例を示している。既述のデータベースエンジン68(図13)は複数のデータベース66を保持する。アプリケーションは1つ以上のデータベース(アプリ1用データベース)66を利用する。図26のAに示すように、各データベース66は通常1つ以上のテーブルを含んでいる。つまり、アプリ1用データベース66−1にはテーブル(テーブル1)74−11、テーブル(テーブル2)74−12を備えている。同期管理用データベース95は、同期管理テーブル72を備えている。
【0154】
同期管理機能93(図10のB)は、図26のBに示すように、1つのデータベースとして同期管理用データベース95を利用する。この同期管理用データベース95は、1つ以上のテーブルを含み、このテーブルには同期管理テーブル72が含まれる。
【0155】
なお、同期管理テーブル72を用いない場合には図26のAに示す構成のみとなる。
【0156】
図27はレプリケーションのテーブルを示している。既述のテーブル1には、図27のAに示すように、複数のレコード1、レコード2・・・レコード8が格納される。つまり、各レコード1〜Nは、アプリケーションが必要とする数だけ作成される。
【0157】
同期管理テーブル72は、図27のBに示すように、複数のレコード1、レコード2・・・レコード5が格納される。各レコード1〜Nは、各機器が認識した機器の数だけ作成される。つまり、ある機器が5つの機器を認識すれば、5つのレコードが作成される。同期管理テーブル72を用いない場合には図27のAに示す構成のみとなる。
【0158】
図28はテーブル1および同期管理テーブル72の構成例を示している。
【0159】
アプリケーションのテーブルに格納されるレコードは、複数のコラム(列)で構成される。各レコードのテーブルには、idコラムおよびmidコラムが含まれる。さらに、アプリケーションが必要とする1つ以上のコラムを含む。図28のAに示すように、テーブル1では、idコラムを先頭にデータ1、データ2、データ3およびmidコラムが格納されている。
【0160】
同期管理テーブル72のレコードは、図28のBに示すように、2つのコラム(列)で構成される。各レコードには、midコラムと、最終同期日時コラムの2つのコラムが含まれている。
【0161】
<テーブル1のレコードにおけるコラムの構成例>
【0162】
アプリケーションのレコードでは、idコラムはデータの作成日時を保存し、midコラムはデータを作成した機器の識別子を保存する。同期管理テーブル72のレコードでは、midコラムは機器の識別子を保存する。最終同期日時コラムは、その機器とmidで識別される機器との間で最後に同期処理をした日時を保存する。未同期の場合は“0”である。
【0163】
図29はテーブル1および同期管理テーブルのレコードのコラム構成を示している。図29のAに示すテーブル1のレコードのコラム構成では、コラム名、データ型、サイズ、説明および初期値が格納される。コラム名には一例として、id、データ1、データ2、データ3およびmidが格納される。
【0164】
idには、データ型がTIMESTAMP、DATETIME他(日時)であること、サイズが4バイトまたは8バイトである。その説明にはデータの作成日時、初期値は現在の日時であることが格納される。
【0165】
データ1、データ2およびデータ3について、データ型は任意であること、サイズは任意であること、その説明にはアプリケーションを利用すること、初期値は任意であることが格納される。
【0166】
midには、データ型がINT(整数)であること、サイズが4バイトであること、その説明には同期対象となる機器の識別子であること、初期値には指定が必須であることが明示されている。
【0167】
図29のBに示す同期管理テーブル72のレコードには、同様に、コラム名、データ型、サイズ、説明および初期値が格納される。
【0168】
コラム名には、mid、最終同期日時が格納されている。midには、データ型がINT(整数)であること、サイズが4バイトであること、その説明には同期対象となる機器の識別子であること、初期値には指定が必須であることが格納されている。最終同期日時には、データ型がTIMESTAMP、DATETIME他(日時)であること、サイズが4バイトまたは8バイトであること、その説明には最後に同期処理をした日時、初期値には現在の日時が格納されている。なお、同期管理テーブル72を用いない場合には、図29のAのみの構成となる。
【0169】
<起動によるネットワーク接続の確立>
【0170】
図30および図31はレプリケータ・サービスの処理手順を示している。この処理手順は、本開示の同期制御プログラムまたは同期制御方法の一例である。図30および図31において、A、Bはフローチャート間の結合子を示している。
【0171】
この処理手順では、電源オンで初期化を行ない(S201)、全レプリケーションを実行する(S202)。エラー発生を監視し(S203)、エラーが発生すれば(S203のYES)、そのエラーをログに記録する(S204)。このログ記録(S204)またはエラー発生がなければ(S203のNO)、終了か否かを判定する(S205)。終了でなければ(S205のNO)、ウェイト状態とし(S206)、S202に戻る。このウェイト時間は一定時間とし、たとえば、30〔分〕のウェイト状態となる。また、終了であれば(S205のYES)、この処理を終了する。
【0172】
図31はレプリケータ・サービスの処理手順のうち、例外処理の処理手順を示している。図31では、スリープに係る処理を例外処理としている。
【0173】
この例外の処理手順では、スリープか否かを判定し(S211)、スリープであれば(S211のYES)、HALTに移行する。
【0174】
スリープでなければ(S211のNO)、スリープからの復帰か否かを判定する(S212)。スリープからの復帰であれば(S212のYES)、図30に示す処理手順のS202(全レプリケーション)に移行する。
【0175】
スリープからの復帰でなければ(S212のNO)、シャットダウンか否かを判定する(S213)。シャットダウンであれば(S213のYES)、図30に示す処理手順の終了(レプリケータ・サービスの終了)に移行する。また、シャットダウンでなければ(S213のNO)、例外処理の処理手順を終了する。
【0176】
図32は既述の全レプリケーション(S202:図30)のサブルーチンの処理手順を示している。
【0177】
この全レプリケーションを開始すると、一時記憶niにネットワーク・インタフェースのリストを生成させる(S221)。この一時記憶niにデータがあるか否かを判定し(S222)、一時記憶niにデータがあれば(S222のYES)、IFレプリケーションを実行する(S223)。このIFレプリケーションは一時記憶niの先頭要素に対して行う。
【0178】
このIFレプリケーション(S223)の後、一時記憶niの先頭要素を削除し(S224)、S222に戻る。一時記憶niにデータがなければ(S222のNO)、この処理を終了し、既述のS203(図30)に遷移する。
【0179】
図33は既述のIFレプリケーション(S223:図32)のサブルーチンの処理手順を示している。このIFレプリケーションでは、一時記憶niにネットワーク・インタフェースを格納する。
【0180】
このIFレプリケーションを開始すると、一時記憶niにデータがあるか否かを判定し(S231)、一時記憶niにデータがあれば(S231のYES)、一時記憶svに一時記憶niにインタフェースで登録済みホストのリストを生成させる(S232)。
【0181】
一時記憶svにデータがあるか否かを判定し(S233)、一時記憶svにデータがあれば(S233のYES)、一時記憶svの先頭のホストに接続可能か否かを判定する(S234)。接続可能であれば(S234のYES)、レプリケーションを実行し(S235)、一時記憶svの先頭要素を削除し(S236)、S233に戻る。S234において、接続不可であれば(S234のNO)、レプリケーション(S235)を実行することなく、一時記憶svの先頭要素を削除する(S236)。
【0182】
一時記憶niにデータがない場合(S231のNO)、または一時記憶svにデータがない場合(S233のNO)には、IFレプリケーションを終了する。このようにして、登録済みホストのレプリケーションを順に行ない、接続可能な全てのホストについて、レプリケートを行なう。
【0183】
<新しいネットワーク接続の確立>
【0184】
図34および図35はネットワーク検出サービスの処理手順を示している。各処理手順において、C、Dはフローチャート間の結合子を示している。
【0185】
この処理手順では、電源オンで初期化を開始する(S241)。この初期化の後、一時記憶nibakを空にし(S242)、ウェイト状態に移行する(S243)。このウェイト時間は一定時間たとえば、1〔分〕である。このウェイト状態において、一時記憶niにネットワーク・インタフェースのリストを生成し(S244)、一時記憶difに一時記憶niから一時記憶nibakの要素を取り除いたリストを生成させる(S245)。
【0186】
一時記憶difに要素がある否かを判定し(S246)、要素があれば(S246のYES)、IFレプリケーションを実行する(S247)。このIFレプリケーションは一時記憶difの先頭要素について行ない、このS247の後、一時記憶difの先頭要素を削除し(S248)、S246に戻る。IFレプリケーションは、niの先頭要素に代えてdifの先頭要素を行なう他はIFレプリケーション(図32、S223)と同様である。
【0187】
一時記憶difに要素がなければ(S246のNO)、一時記憶nibakを一時記憶niで更新し(S249)、終了か否かを判定する(S250)。終了でなければ(S250のNO)、S243に復帰し、ウェイト状態に遷移する。また、終了であれば(S250のYES)、このネットワーク検出処理を終了する。このようにして、一定時間間隔でnibakにあるインタフェースからの差分のインタフェースについてレプリケートを行なう。
【0188】
図35はネットワーク検出サービスの処理手順のうち、例外処理の処理手順を示している。
【0189】
この例外の処理手順では、スリープか否かを判定し(S251)、スリープであれば(S251のYES)、HALTに移行する。
【0190】
スリープでなければ(S251のNO)、スリープからの復帰か否かを判定する(S252)。スリープからの復帰であれば(S252のYES)、図34に示す処理手順のS243(ウェイト)に移行する。
【0191】
スリープからの復帰でなければ(S252のNO)、シャットダウンか否かを判定する(S253)。シャットダウンであれば(S253のYES)、図34に示す処理手順の終了(ネットワーク検出サービスの終了)に移行する。また、シャットダウンでなければ(S253のNO)、例外処理の処理手順を終了する。
【0192】
<新接続先装置(新デバイス)の発見の処理>
【0193】
図36はレプリケータ・ホスト検出サービスの処理手順を示している。
【0194】
この処理手順では、一時記憶niにネットワーク・インタフェースのリストを生成させる(S261)。一時記憶niにデータがるか否かを判定し(S262)、データがあれば(S262のYES)、一時記憶niの先頭インタフェースにブロードキャスト送信をする(S263)。一時記憶dscvrにブロードキャストの応答ホストのリストを生成させる(S264)。一時記憶dscvrにデータがあるか否かを判定し(S265)、一時記憶dscvrにデータがあれば(S265のYES)、一時記憶dscvrの先頭は登録済みホストか否かを判定する(S266)。dscvrの先頭が登録済みホストでなければ(S266のNO)、インタフェース登録ホストに一時記憶dscvrの先頭を設定し(S267)、レプリケーションを実行する(S268)。このレプリケーションの後、一時記憶dscvrの先頭要素を削除し(S269)、S265に戻る。
【0195】
S265において、一時記憶dscvrにデータがなければ(S265のNO)、一時記憶niの先頭要素を削除し(S270)、S262に戻る。
【0196】
一時記憶niにデータがなければ(S262のNO)、終了か否かを判断し(S271)、終了でなければ(S271のNO)、ウェイト状態に移行し(S272)、S261に戻る。この場合ウェイト時間は一定時間であり、たとえば、5〔分〕である。
【0197】
S271において、終了であれば(S271のYES)、このレプリケータ・ホスト検出サービスの処理手順を終了する。このようにして、各ネットワーク・インタフェース中の登録済みでない応答ホストについて、レプリケートを行なう。
【0198】
<レプリケーションのシーケンス>
【0199】
図37は、PCと情報処理端末とを対峙させ、PCと情報処理端末との間で実行されるレプリケーションのシーケンスを示している。
【0200】
情報処理端末4−1からPC26に同期管理テーブル72が要求され(S281)、PC26から情報処理端末4−1に同期管理テーブル72が送信される(S282)。情報処理端末4−1では同期対象のmidを決定し(S283)、loop1に移行する。
【0201】
loop1では、情報処理端末4−1からPC26に対してデータベース更新要求を行ない(S284)、PC26ではデータベースの更新を行う(S285)。PC26はこのデータベース更新の後、情報処理端末4−1に対し応答が発せられる(S286)。loop1ではこのような処理を繰り返して行い、PC26側のデータベースの更新の後、loop2に移行する。
【0202】
loop2では、情報処理端末4−1からPC26にデータベース取得要求を行ない(S287)、情報処理端末4−1ではデータベースの更新を行う(S288)。PC26から情報処理端末4−1に対し、データベース結果の送信を行なう(S289)。loop2ではこのような処理を繰り返して行う。情報処理端末4−1のデータベースの更新の後、情報処理端末4−1からPC26に終了を通知し(S290)、PC26から情報処理端末4−1にその応答が通知される(S291)。
【0203】
図38は同期対象の決定処理の処理手順を示している。
【0204】
この処理手順では一時記憶curに同期管理テーブルのレコードのリストを格納し(S301)、一時記憶itblに取得した同期管理テーブルを格納する(S302)。一時記憶impに一時記憶itblのレコードのリストを格納する(S303)。一時記憶umidを空にし(S304)、impがあるか否かを判定する(S305)。一時記憶impがなければ(S305のNO)、この処理を終了する。
【0205】
一時記憶impがあれば(S305のYES)、impの先頭のmidが自midであるか否かを判定し(S306)、一時記憶curにimpの先頭のmidがあるか否かを判定する(S307)。一時記憶curにimpの先頭のmidがあれば(S307のYES)、imp側の最終同期日時−一時記憶cur側(日時)≧閾値であるか否かを判定する(S308)。閾値は一定時間たとえば、30〔分〕である。
【0206】
impのmidを一時記憶umidに追加し(S309)、一時記憶impの先頭要素を削除し(S310)、S305に戻る。このようにして、itblのレコードのリストから自midのデータと最終同期からの経過時間が閾値以下のデータを除外して、一時記憶umidに記憶して、同期対象を決定する。
【0207】
図39は同期対象を決定する動作例を示している。
【0208】
この動作例では情報処理端末4−1側(mid=1)の同期管理テーブル72−1と、PC26(mid=2)の同期管理テーブル72−2との推移を示している。
【0209】
この動作例では、mid=1、3、5が無視され、mid=2、4、6が取得対象である。つまり、umid=2、4、6となる。
【0210】
図40は、既述のシーケンス(図37)のloop1の処理手順を示している。
【0211】
この処理手順の開始により、現在時刻−imp側最終同期日時≧閾値であるか否かを判定する(S321)。これは自midについて判断し、閾値は一定時間たとえば、30〔分〕である。現在時刻−imp側最終同期日時≧閾値でなければ(S321のNO)、このloop1の処理を終了する。
【0212】
現在時刻−imp側最終同期日時≧閾値であれば(S321のYES)、一時記憶dblにデータベースのリストを生成し(S322)、一時記憶dblにデータがあるか否かを判定する(S323)。一時記憶dblにデータがなければ(S323のNO)、この処理を終了する。
【0213】
一時記憶dblにデータがあれば(S323のYES)、一時記憶tblに一時記憶dblの先頭データベースのテーブルのリストを展開する(S324)。一時記憶tblにデータがあるか否かを判断し(S325)、データがあれば(S325のYES)、一時記憶rclに一時記憶tblから条件を抽出したレコードのリストを展開する(S326)。抽出条件は、id>imp側最終同期日時ANDmidが自midとし、idがimp側最終同期日時を有する自midのレコードを抽出する。一時記憶rclにデータがあるか否かを判断し(S327)、一時記憶rclにデータがあれば(S327のYES)、データベースの更新要求を行なう(S328)。更新要求の後、または一時記憶rclにデータが無い場合(S327のNO)、一時記憶tblの先頭要素を削除し(S329)、S325に戻る。
【0214】
一時記憶tblにデータがなければ(S325のNO)、一時記憶dblの先頭要素を削除し(S330)、S323に戻る。
【0215】
図41は、既述のシーケンス(図37)のloop2の処理手順を示している。
【0216】
この処理手順の開始により、データベースの取得要求を行ない(S341)、データベースの結果送信を行う(S342)。umidがあるか否かを判断し(S343)、umidがなければ(S343のNO)、この処理を終了する。
【0217】
umidがあれば(S343のYES)、一時記憶idblに取得したデータベースのリストを展開し(S344)、一時記憶idblにデータがあるか否かを判定する(S345)。一時記憶idblにデータがなければ(S345のNO)、この処理を終了する。
【0218】
一時記憶idblにデータがあれば(S345のYES)、一時記憶itbl2に一時記憶idblの先頭データベースのテーブルのリストを展開する(S346)。一時記憶itbl2にデータがあるか否かを判断し(S347)、データがあれば(S347のYES)、一時記憶irclに一時記憶itbl2から条件を抽出したレコードのリストを展開する(S348)。抽出条件は、id>imp側のmid最終同期日時ANDmidがumidのいずれかを含むとする。一時記憶irclにデータがあるか否かを判断し(S349)、一時記憶irclにデータがあれば(S349のYES)、データベースの更新および衝突回避処理(ircl)を行なう(S350)。データベースの更新および衝突回避の処理、または一時記憶irclにデータが無い場合(S349のNO)、一時記憶itbl2の先頭要素を削除し(S351)、S347に戻る。
【0219】
一時記憶itbl2にデータがなければ(S347のNO)、一時記憶idblの先頭要素を削除し(S352)、S345に戻る。
【0220】
このようにしてid>imp側のmid最終同期日時であって、midがumidのいずれかを含むデータの更新を行なう。
【0221】
<データベースの更新およびデータの衝突回避>
【0222】
図42はデータベース更新とデータ衝突の回避処理の処理手順を示している。
【0223】
この処理手順では、開始により、一時記憶irclに引数で受け取ったレコードのリストを展開する(S361)。この場合引数は、データベース名、テーブル名、更新レコードリストである。
【0224】
一時記憶irclがあるか否かを判断する(S362)。一時記憶irclがなければ(S362のNO)、この処理を終了する。一時記憶irclがあれば(S362のYES)、一時記憶ircに一時記憶irclの先頭を展開する(S363)。
【0225】
一時記憶rcにデータベースのデータテーブルからirc−>idを抽出する(S364)。rcにデータがあるか否かを判断し(S365)、rcにデータがあれば(S365のYES)、irc−>id←irc−>id+1の処理を実行し(S366)、irc−>idの値を1大きくし、S364に戻る。rcのデータがなくなるまでS364〜S366の処理を継続的に行う。
【0226】
一時記憶rcにデータがなければ(S365のNO)、データベースのテーブルに一時記憶ircを展開し(S367)、一時記憶irclの先頭要素を削除し(S368)、S362に戻る。irc−>idは一時記憶rcにはない値(データ)に設定されるので、irc−>idがユニークなidに設定される。
【0227】
<ホスト1側の処理手順およびデータベースのレコード変化>
【0228】
図43、図44、図45および図46はホスト1のレプリケーションの処理手順を示している。この処理手順は図42と同様であり、動作ステップを太線で示している。
【0229】
この処理手順では、データベースのテーブルに示すように、処理手順の開始により、一時記憶irclにホスト2のレコードのリストを展開する(S361)。
【0230】
一時記憶irclがあるか否かを判断する(S362)。この場合、一時記憶irclがあるので(S362のYES)、一時記憶ircに一時記憶irclの先頭を展開する(S363)。
【0231】
一時記憶rcにデータベースのデータテーブルからirc−>idを抽出し(S364)、rcにデータがあるか否かを判断する(S365)。この場合、一時記憶rcにデータがないので(S365のNO)、データベースのテーブルに一時記憶ircを展開する(S367)。そして、一時記憶irclの先頭要素を削除し(S368)、図44のS362に遷移する。S362では一時記憶irclがあるか否かを判断する(S362)。
【0232】
この場合、一時記憶irclがあるので(S362のYES)、一時記憶ircに一時記憶irclの先頭を展開する(S363)。
【0233】
一時記憶rcにデータベースのデータテーブルからirc−>idを抽出する(S364)。一時記憶rcにデータがあるか否かを判断する(S365)。この場合、一時記憶rcにデータがあるので(S365のYES)、irc−>id←irc−>id+1の処理を実行し(S366)、図45のS364に遷移する。
【0234】
図45のS364では一時記憶rcにデータベースのデータテーブルからirc−>idを抽出し(S364)、一時記憶rcにデータがあるか否かを判断する(S365)。この場合、一時記憶rcにデータがないので(S365のNO)、データベースのテーブルに一時記憶ircを展開する(S367)。一時記憶irclの先頭要素を削除し(S368)、図46のS362に遷移する。
【0235】
図46のS362では、一時記憶irclがあるか否かを判断する(S362)。この場合、一時記憶irclがないので(S362のNO)、この処理を終了する。
【0236】
<ネットワーク・インタフェースのリスト>
【0237】
図47はネットワーク・インタフェースのリスト、ネットワーク・インタフェースの構成、接続状態を示す一時記憶niのデータ構造を示している。
【0238】
レプリケータ・ホスト検出機能(図36)ではネットワーク・インタフェースのリストが用いられる。このリストはネットワークに対応するポートであり、一時記憶niが用いられる。この一時記憶niは、メインメモリ上に配置され、リスト構造を持っている。この一時記憶niには、ホスト装置が持つネットワーク・インタフェースのうち、接続状態のネットワーク・インタフェースを表す名前、ネットワーク・インタフェース名が保存される。
【0239】
図47のAは一時記憶niの構成例を示している。この一時記憶niには、ネットワーク・インタフェース名1、ネットワーク・インタフェース名2、ネットワーク・インタフェース名3・・・が格納されている。
【0240】
図47のBはホスト装置のネットワーク・インタフェースの一例を示している。
【0241】
ホスト装置(ホスト)40には、無線LAN30により他の機器114が無線により接続されている(ワイヤレスネットワーク接続)。また、ホスト装置40には有線LAN(LAN1)22−1によりインターネット20に接続されている(ローカルエリア接続1)。ホスト装置40の有線LAN(LAN2)22−2は未接続である。つまり、ローカルエリア接続2側は未接続状態にある。
【0242】
図48は、ネットワーク・インタフェースの接続状態を示す一時記憶niのデータ構造を示している。
【0243】
有線LAN22−1および無線LAN30が接続状態であれば、図48のAに示すように、一時記憶niには“ローカルエリア接続1”および“ワイヤレスネットワーク接続”が格納される。
【0244】
また、有線LAN22−1、22−2および無線LAN30が接続状態であれば、図48のBに示すように、一時記憶niには“ローカルエリア接続1”、“ローカルエリア接続2”および“ワイヤレスネットワーク接続”が格納される。
【0245】
また、全てのネットワーク・インタフェースが非接続状態であれば、一時記憶niの内容は空となる。
【0246】
<一時記憶sv:一時記憶niのインタフェースで登録済みホストのリスト>
【0247】
図49は、一時記憶svの構成例、ネットワーク・インタフェースの構成、接続状態を示す一時記憶svのデータ構造を示している。
【0248】
一時記憶sv(図33)は、メインメモリ上に配置され、リスト構造を持っている。この一時記憶svには、ホスト装置40の指定されたネットワーク・インタフェースに接続された記録があるホスト名およびMAC(Media Access Control)アドレスが保存される。MACアドレスは、ネットワーク機器のハードウェアに割り当てられる物理アドレスで、その表現形式は48ビット符号である。
【0249】
図49のAに示す一時記憶svには、“ホスト名1”、“ホスト名2”、“ホスト名3”・・・に対応する“MACアドレス1”、“MACアドレス2”、“MACアドレス3”・・・が格納されている。
【0250】
図49のBは、ホスト装置40と複数のクライアントの接続例を示している。ホスト装置40にクライアント(host01)116−1とクライアント(host02)116−2が無線LAN30により接続されている(ワイヤレスネットワーク接続)。ホスト装置40には既述の有線LAN(有線LAN1)22−1と有線LAN(有線LAN2)22−2とが設けられている。有線LAN(有線LAN1)22−1にはインターネット20およびクライアント(host03)116−3が接続されている(ローカルエリア接続1)。また、有線LAN(有線LAN2)22−2にはクライアント(host04)116−4およびクライアント(host05)116−5が接続されている(ローカルエリア接続2)。
【0251】
図50は、LAN接続を表す一時記憶svのデータ構造を示している。図50のAは“ワイヤレスネットワーク接続”の指定時であり、一時記憶svには“host01”に対して“111111111111”、“host02”に対して“222222222222”が格納されている。
【0252】
図50のBは“ローカルエリア接続1”の指定時であり、一時記憶svには“host03”に対して“333333333333”が格納されている。
【0253】
図50のCは“ローカルエリア接続2”の指定時であり、一時記憶svには“host04”に対して“444444444444”、“host05”に対して“555555555555”が格納されている。
【0254】
<一時記憶dif:一時記憶niの一時記憶nibakの要素を除いたリスト>
【0255】
図51は、一時記憶dif(図34)の構成例およびネットワーク構成の変化を示している。一時記憶difは、メインメモリ上に配置され、リスト構造を持っている。この一時記憶difには、ホスト装置40が持つネットワーク・インタフェースのうち、前回から今回にかけて接続状態に変化したネットワーク・インタフェース名が保存される。
【0256】
図51のAに示す一時記憶difは、複数のネットワーク・インタフェース名として“ネットワーク・インタフェース名1”、“ネットワーク・インタフェース名2”、“ネットワーク・インタフェース名3”・・・を格納している。
【0257】
図51のBは変化前(前回の状態)のネットワーク構成を示している。この変化前の構成では、ホスト装置40の無線LAN30は非接続であり、ワイヤレスネットワーク接続はない。ホスト装置40の有線LAN(有線LAN1)22−1にはインターネット20のみが接続されている。つまり、ローカルエリア接続1にはネットワークが接続されている。有線LAN(有線LAN2)22−2は未接続であり、ローカルエリア接続2はオープン状態である。
【0258】
これに対し、図51のCは変化後(現在の状態)のネットワーク構成を示している。変化後の構成では、他の機器114が無線LAN30により接続されている(ワイヤレスネットワーク接続)。ホスト装置40には既述の有線LAN(有線LAN1)22−1によりインターネット20が接続されている(ローカルエリア接続1)。有線LAN(有線LAN2)22−2は前回同様に未接続であり、ローカルエリア接続2は非接続状態である。
【0259】
図52は現在の一時記憶nibak、ni、difの各内容を示している。
【0260】
図52のAに示す一時記憶nibakは現在、“ローカルエリア接続1”となっている。
【0261】
図52のBに示す一時記憶niは現在、“ローカルエリア接続1”および“ワイヤレスネットワーク接続”となっている。
【0262】
図52のCに示す一時記憶difは現在、“ワイヤレスネットワーク接続”となっている。
【0263】
<一時記憶dscvr(一時記憶niで応答したホストのリスト)>
【0264】
図53は、一時記憶dscvrのデータ構造、接続状態を示している。一時記憶dscvrは、メインメモリ上に配置され、リスト構造を持っている。この一時記憶dscvrには、ホスト装置40の指定されたネットワーク・インタフェースで発見されたホストを表すホスト名とMACアドレスが保存される。
【0265】
図53のAに示す一時記憶dscvrでは、複数のホスト名として“ホスト名1”、“ホスト名2”、“ホスト名3”・・・とともに、“MACアドレス1”、“MACアドレス2”、“MACアドレス3”・・・が格納されている。
【0266】
図53のBはワイヤレスネットワーク接続が未接続から接続への変化例を示している。図51のBに示す状態(ワイヤレスネットワーク接続=未接続)から図53のBに示すように、ホスト装置40の無線LAN30側にクライアント(host01)116−1が接続されている(ワイヤレスネットワーク接続)。
【0267】
図53のCは、この場合の一時記憶dscvrの内容を示している。一時記憶dscvrには、接続状態を表す“host01”とともに“111111111111”が格納されている。
【0268】
<一時記憶cur:同期管理テーブルのレコードのリスト>
【0269】
図54は一時記憶curのデータ構造および複写動作を示している。
【0270】
一時記憶curは、メインメモリ上に配置され、リスト構造を持っている。この一時記憶curのコピー元にあたる同期管理テーブル72はホスト装置40のデータベース上に保存されている。
【0271】
図54のAは一時記憶curのデータ構造を示している。この一時記憶curでは、“mid1”、“mid2”、“mid3”・・・とともに、“最終更新日時1”、“最終更新日時2”、“最終更新日時3”・・・が保存されている。
【0272】
図54のBは、一時記憶curのコピー動作および内容例を示している。同期管理テーブル72にはmidの番号とともに、日時情報が保存されている。したがって、これをコピーした一時記憶curには同様にmidの番号とともに、日時情報が保存される。
【0273】
<一時記憶itbl(取得した同期管理テーブル)>
【0274】
図55は、一時記憶itblの構成例および内容を示している。一時記憶itblは、データベース上に保存されるか、またはメインメモリ上に配置され、リスト構造を持っている。この一時記憶itblは同期対象装置の同期管理テーブル72であり、同期対象装置のデータベース上に保存されている。
【0275】
図55のAに示す一時記憶itblでは“mid1”、“mid2”、“mid3”・・・とともに、“最終更新日時1”、“最終更新日時2”、“最終更新日時3”・・・が保存されている。
【0276】
図55のBに示す一時記憶itblの内容ではmidの番号とともに、具体的な更新日時が保存されている。
【0277】
<一時記憶imp:一時記憶itblのレコードのリスト>
【0278】
図56は一時記憶impの構成および内容を示している。一時記憶impは、メインメモリ上に配置され、リスト構造を持っている。この一時記憶impは作業用の変数(リスト)であり、初期化時に一時記憶itblの内容がコピーされ、先頭要素から順番に利用される。
【0279】
図56のAに示す一時記憶impでは“mid1”、“mid2”、“mid3”・・・とともに、“最終更新日時1”、“最終更新日時2”、“最終更新日時3”・・・が保存されている。
【0280】
図56のBは、一時記憶impのコピー動作および内容例を示している。一時記憶itblにはmidの番号とともに、日時情報が保存されている。したがって、これをコピーした一時記憶impには、同様にmidの番号とともに、日時情報が保存される。
【0281】
<一時記憶dblの構成>
【0282】
図57は一時記憶dblの構成例、データベースの構成、一時記憶dblのデータ構造を示している。
【0283】
一時記憶dblは、通常メインメモリ上に配置される一時記憶で、リスト構造を持つ。この一時記憶dblにはホスト装置40のデータベースに含まれるデータベース名が保存される。
【0284】
図57のAに示す一時記憶dblには、“データベース名1”、“データベース名2”、“データベース名3”・・・が格納されている。
【0285】
図57のBに示すホスト装置40のデータベースは、3個のアプリ用のデータベース118−1、118−2、118−3と同期管理用データベース120を持ち、それぞれ “appl1_db" (アプリ1用データベース)、“appl2_db" (アプリ2用データベース)、“appl3_db" (アプリ3用データベース)、“syncmgr_db" (同期管理用データベース)という名前を有する。
【0286】
これに対応し、図57のCに示す一時記憶dblには“appl1_db" 、“appl2_db" 、“appl3_db" が格納されている。
【0287】
<一次記憶tbl:一次記憶dblの先頭データベースのテーブルのリスト>
【0288】
図58は、一次記憶tblの構成、ホスト装置のデータテーブルの構成例を示している。
【0289】
一次記憶tblは、メインメモリ上に配置され、リスト構造を持っている。この一次記憶tblにはホスト装置のデータベース名で指定されたデータベースに含まれるテーブル名が保存される。
【0290】
図58のAに示す一次記憶tblでは、“テーブル名1”、“テーブル名2”、“テーブル名3”・・・が保存されている。
【0291】
この場合、図58のBに示すホスト同士のデータベースのテーブル構成ではアプリ1用データベース(appl1_db)には2つのテーブル(aaa_tbl)と、テーブル(bbb_tbl)を備えている。アプリ2用データベース(appl2_db)は内部に2つのテーブル(ccc_tbl)と、テーブル(ddd_tbl)を備えている。アプリ3用データベース(appl3_db)は内部に2つのテーブル(eee_tbl)とテーブル(fff_tbl)を備えている。そして、同期管理用データベース(syncmgr_db)はテーブル(syncmgr_tbl)を備えている。
【0292】
図59は、一次記憶tblの初期化およびその内容を示している。図59のAは一次記憶tblの初期化動作と内容の例1であり、一次記憶dblが初期動作でテーブル名“appl1_db”、“appl2_db”“appl3_db”を備えている。これに対し、一時記憶tblでは、先頭のデータベースのテーブル名をコピーし、テーブル名が“aaa_tbl”、“bbb_tbl”になる。
【0293】
図59のBは一次記憶tblの初期化動作と内容の例2であり、一次記憶dblが初期動作でテーブル名“appl2_db”、“appl3_db”を備えている。これに対し、一時記憶tblでは、先頭のデータベースのテーブル名をコピーし、テーブル名が“ccc_tbl”、“ddd_tbl”になる。
【0294】
図59のCは一次記憶tblの初期化動作と内容の例3であり、一次記憶dblが初期動作でテーブル名“appl3_db”を備えている。これに対し、一時記憶tblでは、先頭のデータベースのテーブル名をコピーし、テーブル名が“eee_tbl”、“fff_tbl”になる。
【0295】
<一次記憶rcl:一次記憶tblから条件抽出したレコードのリスト>
【0296】
図60は、一次記憶rclの構成例およびレコードの構成を示している。
【0297】
一次記憶rclは、メインメモリ上に配置され、リスト構造を持っている。この一次記憶rclには、指定されたテーブルに含まれるレコードからの抽出結果が保存される。
【0298】
図60のAに示す一次記憶rclの構成例では、レコード1、レコード2、レコード3・・・が保存されている。
【0299】
図60のBは各レコードの構成例を示している。各レコードは、id、midおよびdataで構成されている。
【0300】
図61は一次記憶tblおよび一時記憶rclの内容を示している。図61のAに示す一次記憶tblでは、時刻情報を含むデータ構造を備えている。
【0301】
図61のBに示す一次記憶rclは時刻情報を含むデータ構造を備えている。これは、2011/05/01 09:00:00は最終同期時刻であり、自mid=mid1の場合に、図61のAに示す一時記憶tblから条件抽出して得られる。
【0302】
<一時記憶idbl(取得したデータベースのリスト)と一時記憶itbl2(一時記憶itbl:取得した一時記憶idblの先頭のテーブルのリスト)の関係を表すリスト>
【0303】
図62は、一時記憶idblの構成、ホストのデータベースの構成および一時記憶idblの内容を示している。一時記憶idblは、メインメモリ上に配置され、リスト構造を持っている。この一時記憶idblにはデータベース名が保存される。
【0304】
図62のAに示す一時記憶idblでは“データベース名1”、“データベース名2”、“データベース名3”・・・が保存されている。
【0305】
図62のBに示す同期対象装置のデータベースの構成例では、同期対象装置に3つアプリ用のデータベースと一つの同期管理用データベースを持っている。“appl1_db" はアプリ1用データベース名、“appl2_db" はアプリ2用データベース名、“appl3_db" はアプリ3用データベース名を表している。また、“syncmgr_db" は同期管理用データベース名を表している。
【0306】
これに対応し、図62のCに示す一時記憶idblでは、“appl1_db”、“appl2_db”、“appl3_db”・・・が保存されている。
【0307】
図63は、一時記憶itbl2の構成およびデータベースのテーブル構成を示している。一時記憶itbl2はメインメモリ上に配置され、リスト構造を持っている。この一時記憶itbl2には同期対象装置のデータベース名で指定されたデータベースに含まれるテーブル名が保存される。
【0308】
図63のAに示す一時記憶itbl2では“データベース名1”、“データベース名2”、“データベース名3”・・・が保存されている。
【0309】
図63のBに示す同期対象装置のデータベースの構成例では、“appl1_db" (アプリ1用データベース)は内部に2つのテーブル“aaa_tbl”、“、bbb_tbl”を持っている。“appl2_db" (アプリ2用データベース)は内部に2つのテーブル“ccc_tbl”、“ddd_tbl”を持っている。“appl3_db" (アプリ3用データベース)は内部に2つのテーブル“eee_tbl”、“fff_tbl”を持っている。
【0310】
図64は一時記憶itbl2の初期化および内容を示している。図64のAに示す一次記憶idblは初期動作でデータベース名“appl1_db”、“appl2_db”“appl3_db”を備えている。これに対し、一時記憶itbl2では、先頭のデータベースのテーブル名をコピーし、テーブル名が“aaa_tbl”、“bbb_tbl”になる。
【0311】
図64のBは一次記憶itbl2の初期化動作と内容の例2であり、一次記憶idblが初期動作でデータベース名“appl2_db”、“appl3_db”を備えている。これに対し、一次記憶itbl2では、先頭のデータベースのテーブル名をコピーし、テーブル名が“ccc_tbl”、“ddd_tbl”になる。
【0312】
図64のCは一次記憶itbl2の初期化動作と内容の例3であり、一次記憶idblが初期動作でデータベース名“appl3_db”を備えている。これに対し、一次記憶itbl2では、先頭のデータベースのテーブル名をコピーし、テーブル名が“eee_tbl”、“fff_tbl”になる。
【0313】
<一時記憶ircl:取得したitbl2から条件抽出したレコード>
【0314】
図65は一時記憶irclの構成、レコード構成を示している。
【0315】
一時記憶irclは、メインメモリ上に配置され、リスト構造を持っている。この一時記憶irclには指定されたテーブルに含まれるレコードからの抽出結果が保存される。
【0316】
図65のAに示す一時記憶irclには、“レコード1”、“レコード2”、“レコード3”・・・が保存されている。
【0317】
図65のBに示すレコード構成では、“id”、“mid”、“data”を備えている。
【0318】
図66は一時記憶itbl2および一時記憶irclの内容を示している。図66のAに示す一時記憶itbl2には日時情報やデータ内容が格納されている。
【0319】
図66のBに示す一時記憶irclには日時情報やデータ内容が格納されている。これは、2011/05/01 09:00:00が最終同期日時であり、同期先mid=mid2の場合に、図66のAに示すitbl2から条件抽出して得られる。
【0320】
<インタフェース別登録ホスト>
【0321】
図67はインタフェース別登録ホストの構成例、レコードの構成例および内容を示している。
【0322】
インタフェース別登録ホストは、通常データベース上に保存されるデータベースでありテーブル・レコード構造を持っている。
【0323】
図67のAはインタフェース別登録ホストの構成を示している。インタフェース別登録ホストには“レコード1”、“レコード2”、“レコード3”・・・を備えている。
【0324】
図67のBはインタフェース別登録ホストのレコードの構成を示している。このインタフェース別登録ホストでは、インタフェース、ホスト名1、MACアドレス1を備えている。
【0325】
図67のCは既述の図49および図50の例を元にしたインタフェース別登録ホストの内容を示している。
【0326】
このインタフェース別登録ホスト・・には、“ワイヤレスネットワーク接続”に対して“host01”および“host02”が存在し、“host01”は“111111111111”、“host02”は“222222222222”である。
【0327】
また、“host03”、“host04”および“host05”が存在し、“host03”は“ローカルエリア接続1”、“host04”および“host05”は“ローカルエリア接続2”を構成している。各“host03”の内容は“333333333333”であり、“host04”の内容は“444444444444”であり、また、“host05”の内容は“555555555555”である。
【0328】
<他の装置の間でmidを一致させるメカニズム>
【0329】
(1) 汎用一意識別子(UUID)方式(内部・外部共通)
【0330】
レプリケーション機能を搭載する機器の初期設定時に汎用一意識別子(UUID)を生成し、これを当該機器のmidとする方法がある。各機器の内部利用、外部への通信ともUUIDを利用する。16バイト(128ビット)の数値で表現され、他の機器と重複しないことが期待できる。
【0331】
汎用一意識別子(Universally Unique Identifier :UUID)とは、DCE(Distributed Computing Environment )の一部としてOSF(Open Software Foundation)が標準化した一意に識別するための識別子である。UUIDは、分散システム上でどこかが統制を取らずとも、一意に特定可能な識別子の作成を目的としている。このUUIDは重複や偶然の一致が起こりえないと確信して用いることができる。なお、UUIDの実装として最も広く使われているのは、グローバル一意識別子(Globally Unique Identifier:GUID:マイクロソフト)である。
【0332】
UUIDは16バイトの数値で表され、「550e8400−e29b−41d4−a716−446655440000」のように表現する。よく利用されるのは乱数に基づくUUID(UUID version 4)で、この形式のUUIDは2122通り(およそ5.3×1036通り)存在する。
【0333】
UUIDはISO/IEC 11578:1996 Information technology−−Open Systems Interconnection−−Remote Procedure Call :RPC)の一部として文書化されている。なお、IETFはUUIDに関してRFC4122を公開している。
【0334】
(2) 汎用一意識別子(UUID)方式(内部コード変換方式)
【0335】
本機能を搭載する機器の初期設定時にUUIDを生成して、装置間で情報交換する際はこのUUIDを利用し、機器の内部では例えば、32ビットで表現する内部コードに変換する。
【0336】
図68はUUID・内部コード変換方式の構成を示している。ホスト装置(ホスト1)40−1およびホスト装置(ホスト2)40−2の内部コードを32ビットとし、これらホスト40−1、40−2間では128ビットの交換用符号としてUUIDを生成し、LANにより内部コードを変換する。
【0337】
<レプリケーションの例>
【0338】
このようなレコードのレプリケーションはたとえば、図69に示す複数の情報処理端末間のメッセージデータの送受信に利用可能である。図69に示す同期制御システム2では一例として利用者P1が持つ情報処理端末4−1、利用者P2が持つ情報処理端末4−2、利用者P3が持つ情報処理端末4−3がネットワーク6によって接続されている。情報処理端末4−1にはレコード112−1があり、情報処理端末4−2にはレコード112−2があり、情報処理端末4−3にはレコード112−3があるとする。これらレコード112−1、112−2、112−3は更新時刻を識別情報とし、この識別情報を構成する更新時刻が一致している場合を想定する。
【0339】
この場合、情報処理端末4−1が情報処理端末4−2、4−3と接続によって同期され、レプリケーションを実行したとする。更新時刻が一致しているレコード112−2、112−3は、衝突回避処理の更新時刻がインクリメントにより変更され、ユニークな識別情報に変更される。この結果、情報処理端末4−1は情報処理端末4−2からレコード112−2、情報処理端末4−3からレコード112−3を取得し、異なる更新時刻からなる識別情報により識別されて保存される。
【0340】
このような構成によれば、各利用者P1、P2、P3が個別にメッセージを送り、応答メッセージを受信することができる。たとえば、利用者P1、P2、P3間でのテキストデータなど、メッセージ送受信に利用可能であり、厳密な日時は必要ではないが、大体の時刻がわかればよいなどの状況でのレコードのレプリケーションに利用できる。
【0341】
〔第2の実施の形態の特徴または効果〕
【0342】
(1) 各機器のレコードの主キーとして更新時刻を設定し、データの複写(レプリケーション)時に、その更新時刻が衝突していた場合は、相手から提供されるデータの更新時刻をインクリメントして自分のデータとして複写し、相手の機器が自分のデータを複写して保持する場合は、相手の機器が提供されたデータの更新時刻をインクリメントして保持することによって、各々のデータベース上のデータを複写し合う。
【0343】
(2) この処理方法を採用すると、データの識別フィールドをプラスする必要がなくなり、結果としてデータの量を少なくでき、また、衝突データの識別のために時間データをずらすという簡単な手法の為、処理時間の短縮を図ることが可能となる。
【0344】
(3) これにより、携帯型機器のようなストレージの小さく、かつ、プロセッサ能力の小さな機器でも効率よくデータの複写をすることが可能となる。
【0345】
(4) データを更新した装置の識別子と、データの競合発生時の解決方法を指定する識別子を有する。接続先装置が自装置以外の他装置に関する最新のデータを保持している場合は、当該データで自装置のデータをアップデートする。更新時刻をレコードIDに用いて、他装置で同一時刻に同一レコードが更新された場合は、アプリケーションに影響を与えない時刻範囲内で更新時刻を変更することによりユニークなIDに変更し、データの整合性を確保している。
【0346】
(5) インターネット接続がないか、インターネットと切断された家庭内ネットワークにおいても、家庭内ネットワークに接続した複数の情報機器同士でデータやサービスを同期したり共用できる。特に、動的Webページの同期・共用という新機能を提供することができる。
【0347】
(6) 既述の“date”、“value”、“mid”列はテーブルの各行を完全に一意に識別できない場合にも、プライマリキーとして列を追加する必要は生じない。つまり、既述の整合性制約は生じない。この整合性制約はデータベースでのデータの整合性に関するものである。つまり、整合性制約は、データベースが備えねばならない整合性の条件を実現するものであり、特にデータそのものの性質に基づく整合性についてのものである。たとえば、ある関係モデルにおいて、ある属性が一意性を保っていなければならないという条件があるとすれば、それは整合性制約で実現される。これに対し、データベースのトランザクション制御などで並行処理を行なうことによって保たねばならないようなものは一貫性制約と呼ばれる。一意性制約、参照制約、検査制約などが整合性制約の一つである。
【0348】
(7) 既述の“ORDER BY”で1つの列の指定で、並び順が安定した出力結果を得られる。つまり、従来のようなORDER BYで2つ以上の列を指定する必要はなく、SQL実行の都度、出力結果の並び順が不定になる不都合は生じない。
【0349】
(8) 記憶容量やSQL実行時間を削減できる。つまり、列が増えること、およびORDER BY列で2つ以上の列を指定する必要はなく、記憶容量を増加することなく、また、SQL実行時間の増加はない。
【0350】
(9) dateフィールドの内容をユニーク化するので、プライマリキー列として利用できる。
【0351】
〔他の実施の形態〕
【0352】
上記実施の形態では、同期が可能な電子機器としてデスクトップPC26、ノートPC36、スマートフォン34、タブレット端末38を例示したが、データ記憶機能を備え、通信接続により同期が可能であれば、これらの機器に限定されない。PDA(Personal Digital Assistant)、テレビ受像機、ゲーム機、カメラであってもよい。
【0353】
以上説明したように、本開示の情報処理装置、その同期制御プログラム、その同期制御方法および同期制御システムの最も好ましい実施の形態等について説明した。本発明は、上記記載に限定されるものではなく、特許請求の範囲に記載され、又は発明を実施するための形態に開示された発明の要旨に基づき、当業者において様々な変形や変更が可能であることは勿論である。斯かる変形や変更が、本発明の範囲に含まれることは言うまでもない。
【符号の説明】
【0354】
2 同期制御システム
4−1、4−2、4−3 情報処理端末
6 ネットワーク
8 通信部
10 メモリ
12 プロセッサ
【技術分野】
【0001】
本発明は、動的Web(World Wide Web)ページの分散実行など、接続を契機に接続先装置との間で保存データを同期化する情報処理装置、その同期制御プログラム、その同期制御方法および同期制御システムに関する。
【背景技術】
【0002】
パーソナルコンピュータ(PC)、スマートフォン、タブレット端末、携帯電話端末などの情報処理装置が普及している。これらの情報処理装置と接続先装置との間でデータ複写をする同期制御システムでは接続を契機に同期化を実行し、各装置で個別に保有しているデータ複写(レプリケーション)を実行する。携帯端末などの小型の情報処理装置のデータ複写では、処理時間やフィールドの軽減よりもデータの整合性や出力結果を優先させている。
【0003】
このような同期化処理に関し、特許文献1には、データを複写した装置の識別子を有し、接続先装置が自装置以外の他装置に関する最新のデータを保持している場合には、そのデータで自装置側のデータを複写するピアツーピアの処理が記載されている。
【0004】
データの整合性に関し、特許文献2には、時刻情報をID(IDentification)に用いてデータの整合性を確保することが記載されている。このデータ間の整合性確保に関し、特許文献3では、データの競合を解決する際に指定する識別子を有することにより、複数データベース間の整合性を確保することが記載されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2005−293560号公報
【特許文献2】特開2005−077366号公報
【特許文献3】特開2002−157158号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
ところで、家族間や友人間(情報の共有者・利用者)で情報を共有し、その保有データを複写する場合がある。斯かるシチュエーションでは、保存データの並び順序や重複データの存在よりも、各保存データの処理負荷の軽減が重要である。つまり、データが内容的に一致し、データ間の衝突があっても、データの更新日時が異なれば、各データを保存することが有用である。内容的に一致していても、そのデータを消去してしまうと、データの推移を残留データからは確認や判断をすることができない。また、複数の利用者がデータ更新を行う場合では、一の利用者がデータを取得してから更新するまでの間に行われたデータ更新が消去されることになる。データ間の衝突を回避するためにデータの内容の一致、不一致を判断すれば、その処理負荷が大きくなるという課題がある。
【0007】
そこで、本発明の目的は、斯かる課題に鑑み、データのレプリケーションに関し、データが衝突した場合の処理負荷を軽減することにある。
【課題を解決するための手段】
【0008】
上記目的を達成するため、本開示の情報処理装置、その同期制御プログラム、その同期制御方法および同期制御システムは、無線または有線により接続される接続先装置が保存するデータと同期を行う。通信手段は接続先装置からデータを取得する。データは識別情報によって識別され、記憶手段に格納される。そして、処理手段は、接続先装置から取得したデータの識別情報が記憶手段にあるデータの識別情報と一致すれば、いずれか一方の識別情報をユニークな識別情報に変更し、これら識別情報とともに各データを記憶手段に格納する。
【発明の効果】
【0009】
本開示の情報処理装置、その同期制御プログラム、その同期制御方法または同期制御システムによれば、次のいずれかの効果が得られる。
【0010】
(1) 同期した際に、接続先装置のデータと保存データの識別情報が一致すれば、いずれか一方の識別情報をユニークな識別情報に変更するので、該識別情報とともに各データを複写して保存できる。
【0011】
(2) 一致した識別情報をユニークな識別情報に変更して各データを保存すれば、データの識別フィールドが不要であるので、データ量を削減できる。
【0012】
(3) 識別情報が衝突したデータ識別のための処理や処理時間が不要であり、データの処理時間を短縮できる。
【0013】
(4) 情報処理装置が携帯装置のようにストレージ容量が小さい場合や、プロセッサ能力が低い場合であっても、効率よくデータ複写をすることができる。
【0014】
そして、本発明の他の目的、特徴及び利点は、添付図面及び各実施の形態を参照することにより、一層明確になるであろう。
【図面の簡単な説明】
【0015】
【図1】第1の実施の形態に係る同期制御システムの一例を示す図である。
【図2】同期制御の処理手順の一例を示すフローチャートである。
【図3】第2の実施の形態に係る同期制御システムの一例を示す図である。
【図4】Webページ利用時のシステム構成を示す図である。
【図5】動的Webページの構成を示す図である。
【図6】動的Webページの構成とレプリケーションを示す図である。
【図7】ホスト間のレプリケーション1を示す図である。
【図8】ホスト間のレプリケーション2を示す図である。
【図9】ホスト装置の構成例を示す図である。
【図10】同期制御のソフトウェアおよび機能の構成を示す図である。
【図11】情報処理端末のハードウェアの一例を示す図である。
【図12】レプリケーションの処理手順を示すフローチャートである。
【図13】レプリケーションの開始を示す図である。
【図14】レプリケーションのテーブル取得を示す図である。
【図15】レプリケーションのレコード送信を示す図である。
【図16】レプリケーションのレコード受信を示す図である。
【図17】レプリケーションの終了を示す図である。
【図18】レコードの構成と同期による変化例1を示す図である。
【図19】レコードの構成と同期による変化例2を示す図である。
【図20】レコードの構成と同期による変化例2の続き部分を示す図である。
【図21】レコードの構成と同期による変化例2の続き部分を示す図である。
【図22】同期管理テーブルを用いない場合のレコードの構成と同期による変化例を示す図である。
【図23】ホスト1・2間のレプリケーションによる同期前後および出力を示す図である。
【図24】従来のレプリケーションを示す図である。
【図25】データの記憶容量を示す図である。
【図26】ホストのデータベースおよび同期管理テーブルの構成例を示す図である。
【図27】アプリケーションのテーブルの構成例を示す図である。
【図28】テーブル1および同期管理テーブルの構成例を示す図である。
【図29】テーブル1のレコードにおけるコラムの構成例を示す図である。
【図30】レプリケータ・サービスの処理手順を示すフローチャートである。
【図31】レプリケータ・サービスの例外処理の処理手順を示すフローチャートである。
【図32】全レプリケーション(S202:図30)のサブルーチンの処理手順を示すフローチャートである。
【図33】IFレプリケーション(S223:図32)のサブルーチンの処理手順を示すフローチャートである。
【図34】ネットワーク検出サービスの処理手順を示すフローチャートである。
【図35】ネットワーク検出サービスの例外処理の処理手順を示すフローチャートである。
【図36】レプリケータ・ホスト検出サービスの処理手順を示すフローチャートである。
【図37】情報処理端末・PC間で実行されるレプリケーションのシーケンスを示す図である。
【図38】同期対象の決定処理の処理手順を示すフローチャートである。
【図39】同期対象決定の動作例を示す図である。
【図40】図37中のloop1の処理手順を示すフローチャートである。
【図41】図37中のloop2の処理手順を示すフローチャートである。
【図42】データベース更新とデータ衝突の回避処理の処理手順を示すフローチャートである。
【図43】ホスト1の具体的なレプリケーションの処理手順を示すフローチャートおよびデータベースのテーブル変化を示す図である。
【図44】ホスト1の具体的なレプリケーションの処理手順を示すフローチャートおよびデータベースのテーブル変化を示す図である。
【図45】ホスト1の具体的なレプリケーションの処理手順を示すフローチャートおよびデータベースのテーブル変化を示す図である。
【図46】ホスト1の具体的なレプリケーションの処理手順を示すフローチャートおよびデータベースのテーブル変化を示す図である。
【図47】ネットワーク・インタフェースのリスト、ネットワーク・インタフェースの構成を示す図である。
【図48】LANの接続状態を示す一時記憶niのデータ構造を示す図である。
【図49】一時記憶sv(図33)の構成例、ネットワーク・インタフェースの構成を示す図である。
【図50】LAN接続を表す一時記憶svのデータ構造を示す図である。
【図51】一時記憶dif(図34)の構成例およびネットワーク構成の変化を示す図である。
【図52】一時記憶nibak(図34)、ni、dif(図34)の各内容を示す図である。
【図53】一時記憶dscvr(図36)のデータ構造およびLAN接続の構成を示す図である。
【図54】一時記憶cur(図38)の構成および複写動作を示す図である。
【図55】一時記憶itbl(図38)の構成および内容を示す図である。
【図56】一時記憶imp(図38)の構成および複写動作を示す図である。
【図57】一時記憶dbl(図40)の構成、データベースの構成、一時記憶dblのデータ構造を示す図である。
【図58】一次記憶tbl(図40)およびホストの構成例を示す図である。
【図59】一次記憶tblの初期化および内容を示す図である。
【図60】一次記憶rcl(図40)の構成およびレコードの構成を示す図である。
【図61】一次記憶tblおよび一時記憶rclの内容を示す図である。
【図62】一時記憶idbl(図41)の構成、ホストのデータベースの構成、一時記憶idblの内容を示す図である。
【図63】一時記憶itbl2(図41)の構成およびホストのデータベースの構成を示す図である。
【図64】一時記憶itbl2の初期化および内容を示す図である。および内容を示す図である。
【図65】一時記憶ircl(図41)の構成およびレコード構成を示す図である。
【図66】一時記憶itbl2および一時記憶irclの内容を示す図である。
【図67】インタフェース別登録ホストの構成例、そのレコードの構成例および内容を示す図である。
【図68】UUID・内部コード変換方式の構成を示す図である。
【図69】複数の情報処理端末間のメッセージデータの送受信に用いた同期制御システムを示す図である。
【発明を実施するための形態】
【0016】
〔第1の実施の形態〕
【0017】
図1は第1の実施の形態に係る同期制御システムを示している。図1に示す構成は一例であり、係る構成に本開示の情報処理装置、その同期制御プログラム、その同期制御方法または同期制御システムが限定されるものではない。
【0018】
図1に示す同期制御システム2は、本開示の情報処理装置、その同期制御プログラム、その同期制御方法または同期制御システムの一例であり、情報処理端末4−1と、接続先装置として情報処理端末4−2を備えている。これら情報処理端末4−1、4−2はネットワーク6により接続されている。
【0019】
情報処理端末4−1、4−2は本開示の情報処理装置の一例であり、ネットワーク6により接続され、同期処理により各自の保持データを複写する。ネットワーク6は、情報処理端末4−1、4−2間を接続するネットワークであり、インターネット(Internet)でもよいし、イントラネット(Intranet)やLAN(Local Area Network )でもよい。通信媒体は無線でもよいし有線でもよい。
【0020】
この情報処理端末4−1は、通信部8、メモリ10およびプロセッサ12を備えている。通信部8は通信手段の一例であり、接続により情報処理端末4−2からデータを取得する。メモリ10は、データを格納する記憶手段の一例であり、例えば、データの更新時刻を識別情報に用いて複数のデータを保存する。
【0021】
プロセッサ12はデータを処理する処理手段の一例であり、少なくともデータ複写機能、データ衝突回避機能を備えている。データ複写機能は、情報処理端末4−2との接続を契機に、同期処理を媒介としてメモリ10に保存中のデータを複写する機能である。つまり、既述のデータのレプリケーション機能である。データ衝突回避機能は、このレプリケーションに際し、データ間の衝突を回避する。情報処理端末4−2がメモリ10に無いデータを保持している場合には、該データでメモリ10にあるデータを更新する。データの識別情報に更新時刻を用いた場合には、同一の更新時刻からなる識別情報を持つデータが更新されれば、該更新時刻を変更することによりユニークな識別情報として情報処理端末4−2との間でデータの整合性を確立する。この結果、データ間の衝突が回避される。
【0022】
情報処理端末4−1に対する接続先装置である情報処理端末4−2は本開示の情報処理装置の一例であり、既述の情報処理端末4−1と有線または無線により接続される単一または複数の通信先のひとつである。この情報処理端末4−2の構成は情報処理端末4−1と同一でもよく異なってもよい。
【0023】
図2は情報処理端末4で実行する同期制御の処理手順の一例を示している。
【0024】
この処理手順は、本開示の同期制御プログラムの一例である。この処理手順では、接続先装置(情報処理端末4−2)との通信を確立させ(S11)、データの更新処理に移行する。通信の確立はデータの更新処理の契機であり、通信は無線または有線により情報処理端末4−2と接続により実行される。
【0025】
通信の確立の後、接続先装置(情報処理端末4−2)から提供されるデータと保存中のデータの識別情報の比較を行う(S12)。この識別情報の比較では、提供されるデータと保存中のデータの識別情報が一致しているか否かを判定する(S13)。つまり、情報処理端末4−1は取得したデータの識別情報とメモリ10にあるデータの識別情報とが一致しているか否かを判定する。
【0026】
識別情報が一致していれば(S13のYES)、データ間で識別情報が衝突している。このため、衝突回避処理として識別情報の変更を行ない(S14)、識別情報の衝突回避をする。つまり、この衝突回避処理では、識別情報が一致すれば、何れか一方の識別情報を変更し、ユニークな識別情報に更新する。例えば、識別情報にデータ更新時刻を用いている場合には、この更新時刻をインクリメントまたはディクリメントすることにより、ユニークな識別情報に変更する。具体的には識別情報を構成する更新時刻に更新時間単位として例えば、1〔秒〕を追加して変更すれば、識別情報がユニークな識別情報に更新されることになる。
【0027】
この衝突回避処理の実行の後、データの複写(レプリケーション)を実行する(S15)。ユニークな識別情報とともに各データをメモリ10に格納し、この処理を終了する。
【0028】
S13において、識別情報が一致していなければ(S13のNO)、データ間の衝突がないので、識別情報の衝突回避処理は不要であるから、識別情報の変更(S14)を行うことなく、データの複写(S15)を実行する。
【0029】
斯かる構成によれば、データのレプリケーションに際し、識別情報が一致したデータが存在していれば、いずれか一方のデータの識別情報をユニークな識別情報に変更し、これら識別情報とともに各データをメモリ10に格納することができる。
【0030】
〔第1の実施の形態の効果〕
【0031】
(1) データ複写(レプリケーション)の際に、データの識別情報に衝突(一致)がある場合、接続先装置から提供されるデータまたは自機側の情報処理端末4−1の保存データのいずれか一方の識別情報を変更するので、識別情報の衝突を回避できる。
【0032】
(2) 変更した識別情報により各データを複写して保存できる。
【0033】
(3) 識別情報を変更するので、データの識別フィールドをプラスする必要がなく、データ量を削減でき、データ複写の処理の簡略化とともに、処理時間を短縮できる。
【0034】
(4) 情報処理端末4−1が携帯型機器のようにストレージ容量が小さく、かつ、プロセッサ能力の小さな機器でも効率よくデータ複写をすることができる。
【0035】
〔第2の実施の形態〕
【0036】
図3は第2の実施の形態に係る同期制御システムを示している。図3に示す構成は一例であり、本開示の情報処理装置、その同期制御プログラム、同期制御方法および同期制御システムに限定されるものではない。
【0037】
図3に示す同期制御システム2は、屋内システムであり、家屋14の内部(屋内)に設置されている。ルータ16はスイッチ18を介してインターネット20に接続されている。このルータ16はインターネット20と接続するための中継装置の一例である。このルータ16には屋内に配置された有線LAN(Local Area Network )22が接続されている。この有線LAN22は既述のネットワーク6(図1)の一例である。この有線LAN22にはWi−Fi(Wireless Fidelity )アクセスポイント(AP)24、デスクトップPC(パーソナルコンピュータ)26およびテレビ受像機28が接続されている。Wi−FiAP24は無線でルータ16にオンライン接続するための中継装置の一例である。
【0038】
Wi−FiAP24には無線により接続される無線LAN(Local Area Network )30が構成されている。この無線LAN30はたとえば、Wi−Fiネットワークである。この無線LAN30は既述のネットワーク6(図1)の一例である。この無線LAN30には無線接続される機器の一例として複数の情報処理端末4−1、4−2、4−3が設けられている。この実施の形態では、情報処理端末4−1はノートPC、情報処理端末4−2はスマートフォン、情報処理端末4−3はタブレット端末である。図中破線はオンライン状態を示している。
【0039】
情報処理端末4−1、4−2、4−3は携帯機器であり、携行する利用者により、無線LAN30とオンラインまたはオフラインとなる。つまり、無線LAN30のサービスエリア内の屋内使用時にオンラインとなり、サービスエリア外の屋外使用時にオフラインとなる。
【0040】
この実施の形態では、無線LAN30を備えているので、各情報処理端末4−1、4−2、4−3は屋内使用時にオンラインとなっている。これに対し、オフライン利用を前提とした構成であってもよい。その場合、各情報処理端末4−1、4−2、4−3が個別にインターネット20に接続し、インターネット20とのオンラインでWebページの利用ができる。この場合も、各情報処理端末4−1、4−2、4−3間で同期、データの共用を実現できる。
【0041】
図4はWebページ利用時の一般的なシステム構成を示している。このシステム構成は本開示の構成と比較のために例示したものである。
【0042】
屋内使用で情報処理端末間のデータやサービスの同期または共用する利用形態がある。これに対し、この実施の形態では、クラウドサービスなど、インターネット側でのサービスを利用していない。つまり、屋内システムの閉じられたサービスとして、動的Webページの同期、共用を実現している。動的Webページは、静的なファイル、プログラムおよびデータベースで構成される。静的なファイルにはたとえば、HTML(Hyper Text Markup Language)ファイルや、CSS(Cascading Style Sheets)ファイルが用いられる。プログラムにはJava(登録商標)や、Perl(Practical Extraction and Report Language:テキスト処理言語)などのプログラム言語が用いられる。
【0043】
Webサーバ39はインターネット20上に開設され、インターネット20上のクライアントに対してWebページなどのサービスを提供する。このWebサーバ39には複数のクライアント装置(クライアント1)42−1、クライアント装置(クライアント2)42−2、クライアント装置(クライアント3)42−3・・・が接続される。クライアント装置42−1、42−2、42−3・・・は情報処理装置の一例であり、通信や情報処理の機能を備えている。各クライアント装置42−1、42−2、42−3・・・はインターネット20を通じてWebサーバ39に対してアクセスし、Webサーバ39に開設されている動的Webページ44(図5)を利用する。
【0044】
動的Webページ44はたとえば、図5に示すように、Webサーバシステム46で構成されている。図5は動的Webページ44およびWebサーバシステム46の一例を示している。
【0045】
Webサーバシステム46は、Webサーバ39、プログラム実行環境48、データベースエンジン50および動的Webページ44で構成される。プログラム実行環境48はプログラムを実行可能な処理環境を提供する。データベースエンジン50はデータベース管理システムやデータベースソフトに用いられ、データベース運用の中核プログラムであり、システムの管理・運用や、検索・更新・訂正などの処理を実行する。
【0046】
この動的Webページ44には、静的なファイル52、プログラムファイル54およびデータベース56が設置される。これら静的なファイル52、プログラムファイル54およびデータベース56のレプリケーションでは、静的なファイル52やプログラムファイル54が比較的容易であり、データベース56は難しい。複数のマスターが存在するシステムではレプリケーションは可能であるが、その自動化は極めて難しい。
【0047】
図6は動的Webページの構成と、そのレプリケーションを示している。図6において、Webサーバシステム46の構成は既述のとおりであるので、同一符号を付し、その説明を割愛する。
【0048】
これに対し、クライアント装置(クライアント1)42−1ではWebサーバ58および静的なファイル60を備えている。また、クライアント装置(クライアント2)42−2では、Webサーバ58および静的なファイル60に加え、プログラム実行環境62やプログラムファイル64を備えている。
【0049】
この場合、クライアント1では静的なファイル52と静的なファイル60のレプリケーションのみのレプリケーションが可能である。これに対し、プログラム実行環境62が搭載されたクライアント2では、静的なファイル52と静的なファイル60のレプリケーションに加え、プログラムファイル54とプログラムファイル64のレプリケーションが可能である。クライアント2のようにプログラム実行環境62を搭載すれば、クライアント1においてもプログラムファイルのレプリケーションが可能となる。つまり、図3に示す同期制御システム2において、スマートフォン34、ノートPC36、タブレット端末38などの複数の情報処理端末でそれぞれのデータベースを更新する場合には、データベース管理上は複数のマスター更新が行える構成となる。
【0050】
このため、複数の情報処理端末4−1、4−2、4−3がデータベース56の更新作業を独立して行うと、各データベース56のレプリケーション時に、レコードの衝突が生じる。各情報処理端末4−1、4−2、4−3が異なるレコードを更新した場合には、レコードが衝突する問題はないが、同じレコードを更新した場合には、いずれのレコードの更新を有効とするか、または、更新処理そのものをエラーとすべきかの問題が生じる。このレコード更新について、レプリケーション例1(図7)およびレプリケーション例2(図8)を参照する。
【0051】
図7に示すレプリケーション例1は、複数のマスターがあるデータベースのレプリケーションを示している。ホスト装置(ホスト1)40−1、ホスト装置(ホスト2)40−2は、既述の情報処理端末4−1、4−2、4−3の何れでもよく、ネットワーク6(図1)で接続されて同期処理を行う関係にある。
【0052】
ホスト1およびホスト2にはそれぞれが複数のマスターがあるデータベース66−1、66−2が備えられている。各データベース66−1、66−2のレコードが個別に独立して更新されている。更新されたレコードが異なっていれば、レコードのレプリケーションを行っても、互いにレコードが複写され、レプリケーションに成功する。つまり、各レコードが複写されて各データベース66−1、66−2に保存されることになる。
【0053】
これに対し、図8に示すレプリケーション例2では、各データベース66−1、66−2のレコードが個別に独立して更新されているが、更新されたレコードが同一である場合を示している。レコードが同一である場合、各レコードの更新を独自に行っても、レプリケーションを行うと、ホスト1、2間で一方のレコードに修正され、双方のレコードを保存することができない。つまり、レコードのレプリケーションが失敗となる。
【0054】
このようなレプリケーションの失敗を回避するため、図9に示すホスト装置40では、レコードの衝突を回避するレプリケータ機能を備えている。このホスト装置40はたとえば、情報処理端末4−1、4−2、4−3、デスクトップPC26(図3)で構成される。
【0055】
このホスト装置40は、図9に示すように、データベース66、データベースエンジン68、レプリケータ70および同期管理テーブル72を備える。データベースエンジン68は、プログラムによるデータ管理、処理などを決定するシステムである。レプリケータ70はデータベースエンジン68の複数のマスターのレプリケータ機能(図10のB)を構成する。このレプリケータ70のレプリケータ機能はレコードの衝突を回避し、レコードのレプリケーションを実行する。
【0056】
データベース66にはレコード73を格納するテーブル74が設けられ、このテーブル74とともにmidフィールド76が設けられている。midはレプリケーションマスタ識別子である。midフィールド76は、midを記録するエリアである。同期管理テーブル72には既述のmidおよび最終同期日時を記録するテーブル77が設けられ、このテーブル77にはmidを格納するフィールド78、最終同期日時を格納するフィールド80が設定されている。
【0057】
このホスト装置40のソフトウェアおよび機能について、図10を参照する。図10のAに示すホスト装置40のソフトウェアの構成では、OS(Operating System)79をベースとして実行するデータベースエンジン68、レプリケータ70、Webサーバ58およびWebブラウザ82を備えている。Webサーバ58は、Webページの検索・取得などの処理を行うプログラムである。Webブラウザ82はWebページを閲覧するためのソフトウェアである。
【0058】
レプリケータ70には、図10のBに示すように、レプリケータ機能として、ネットワーク接続検出機能84、デバイス検出機能86、タイマー機能88、同期実行処理機能90、同期応答処理機能92、同期管理機能93および同期処理用データベース95を備えている。ネットワーク接続検出機能84はネットワークとの接続を検出する。デバイス検出機能86は接続されたデバイスを検出し、そのデバイスを認識する。タイマー機能88はレコードの更新日時など、時間を計時する。同期実行処理機能90は接続先装置94のデバイスと同期処理を実行する。同期応答処理機能92は、同期処理を実行している接続先装置94のデバイスに対し、応答処理を実行する。同期管理機能93は同期処理の実行や応答を管理する。また、同期処理用データベース95は同期処理に用いる各種データをデータベースによって保存する。
【0059】
このレプリケータ70がレプリケーションを開始する契機は次の通りである。
【0060】
(1) 自デバイスが起動したときにネットワーク接続が確立した場合
【0061】
(2) 自デバイスがスリープから復帰したときにネットワーク接続が確立した場合
【0062】
(3) 新しくネットワーク接続が確立した場合
【0063】
(4) ネットワーク接続している間に、新しいデバイスを発見した場合
【0064】
(5) ネットワーク接続している間に、一定時間が経過した場合
【0065】
このような契機の何れかにより、レプリケータ70がレプリケーションを開始し、実行する。
【0066】
このようなレプリケーション機能などの各種の情報処理を実行するホスト装置40を構成する情報処理端末4には図11に示すハードウェアを備えている。
【0067】
図11に示すハードウェア構成では、プロセッサ96、通信部98、記憶部100およびRAM(Random-Access Memory)102を備えるコンピュータを構成している。プロセッサ96は記憶部100のプログラム記憶部104にある既述のOS79やレプリケータ70などのプログラムを実行する。通信部98は、ネットワーク6(図1、図3)を介して他の情報処理端末つまり、他のホスト装置と通信を行う。
【0068】
記憶部100には既述のプログラム記憶部104およびデータ記憶部106が備えられている。プログラム記憶部104には、OS79や本開示の同期制御プログラムなどが格納され、同期制御プログラムとして具体的にはデータベースエンジン68、レプリケータ70が格納されている。また、データ記憶部106には既述のデータベース66や同期管理テーブル72などのレコードデータが格納され、保存されている。この保存データはレプリケーションによって更新可能である。RAM102はワークエリアを構成する。
【0069】
<レプリケーションの処理手順>
【0070】
このレプリケータ70のレプリケーションの処理手順は以下のとおりである。
【0071】
(1) 通信可能な複数のデバイスがある場合には、デバイスの選択を行う。最終同期日時が古いデバイスまたは、優先度が高いデバイスが選択される。
【0072】
(2) 接続を開始した後、接続先装置から同期管理テーブルの全体を取得する。
【0073】
(3) 接続先装置の同期管理テーブルに記録された自デバイスの最終更新日時を判断する。この処理では、最終更新日時が閾値よりも古いか否かを判断する。最終更新日時が閾値よりも古い場合には、最終更新日時が閾値よりも古いために生じている自デバイスのデータベースの差分を接続先装置に送信する。
【0074】
(4) 接続先装置の同期管理テーブルと自デバイスの同期管理テーブルを比較し、閾値よりも古い場合には、相手デバイスと自デバイスのデータベースの差分を接続先装置に要求する。これにより差分のレコードを取得する。
【0075】
(5) このようなレプリケーションの後、相手デバイスとの接続を終了する。
【0076】
図12はレコードのレプリケーションの処理手順を示している。この処理手順は、本開示の同期制御プログラムまたは同期制御方法の一例である。
【0077】
この処理手順では、レコードのレプリケーションを行う接続先装置(対象)の選択を行う(S101)。選択された対象との接続を行ない(S102)、その対象から同期管理テーブルを取得する(S103)。
【0078】
取得した同期管理テーブルを参照し、情報(データ)の新旧を対比する(S104)。このS104では、対象側レコードと自装置側レコードを比較し、対象側レコードに対して自装置側レコードが古いか否かを判断する。対象側レコードに対して自装置側レコードが古い場合には(S104のYES)、対象側レコードと自装置側レコードの差分を求め、この差分を接続中の対象に送信する(S105)。
【0079】
この送信の後、または対象側レコードに対して自装置側レコードが古くない場合には(S104のNO)、ステップS106に移行する。S106では、取得した同期管理テーブルと自装置側の同期管理テーブルとを比較し、自装置側の同期管理テーブルが取得した同期管理テーブルより古いか否かを判断する。
【0080】
自装置側の同期管理テーブルが取得した同期管理テーブルより古い場合には(S106のYES)、新しいレコードを保持している対象から差分のレコードを受信する(S107)。
【0081】
この受信の後、または自装置側の同期管理テーブルが取得した同期管理テーブルより古くない場合には(S106のNO)ステップS108に移行する。S108では、データの送信または受信をした対象の接続を切断する。つまり、上記対象とのレプリケーションが終了し、接続中の対象が残っているか否かを判断する(S109)。レプリケーションをしていない対象が残っていれば(S109のYES)、S101ないしS109の処理を継続し、対象が残っていなければ(S109のNO)、全てのレプリケーションを終了する。
【0082】
<レプリケーションの具体的な処理>
【0083】
図13、図14、図15、図16および図17は、レプリケーション処理の具体的な処理手順を示している。図13、図14、図15、図16および図17において、図9と同一部分には同一符号を付してある。
【0084】
このレプリケーションには図13に示すように、4つのホスト装置(ホスト1、ホスト2、ホスト3およびホスト4)40−1、40−2、40−3、40−4が用いられている。ホスト装置40−1、40−2、40−3、40−4は既述のノートPC、スマートフォン、タブレット端末などの情報処理端末4−1、4−2、4−3、4−4で構成される。
【0085】
ホスト1のデータベース66−1にあるテーブル74−1には、ホスト1の更新レコード108−1、ホスト1以外の更新レコード110−1が格納されている。また、ホスト2のデータベース66−2にあるテーブル74−2には、ホスト1の更新レコード108−2、ホスト1以外の更新レコード110−2が格納されている。
【0086】
この場合、ホスト1は、レプリケーション直前にホスト4と同期してホスト4からレコードを取得し、ホスト1以外の更新レコード110−1にホスト2よりも新しいレコードを保存しているものとする。
【0087】
また、ホスト2は、レプリケーション直前にホスト3と同期してホスト3からレコードを取得し、ホスト1以外の更新レコード110−2にホスト1よりも新しいレコードを保存しているものとする。また、ホスト1以外の更新レコード110−2には、ホスト1よりも古いレコード(ホスト4のレコード)を保存しているものとする。
【0088】
このようなレコードの新旧関係を前提にレプリケーションの処理手順を説明する。
【0089】
(1) レプリケーション開始に先立ち、ホスト1は図13に示すように、ホスト2との接続を開始する。
【0090】
(2) データ取得では図14に示すように、ホスト1はホスト2の同期管理テーブル72のテーブル77をホスト2から取得する。
【0091】
(3) データ送信では、ホスト1は図15に示すように、ホスト2が保存しているホスト1のデータベース16−1の最終同期日時以降のレコードつまり、ホスト1による更新レコードをホスト2に対して送信する。
【0092】
(4) データ受信では、ホスト1は、ホスト2が保存しているホスト1以外のデータベースの差分を受信する。これにより図16に示すように、ホスト1はホスト2からホスト3のレコードを取得する。
【0093】
この場合、ホスト2がホスト1よりホスト3の最終同期日時が新しい場合には、ホスト1はホスト2からホスト3の差分を取得する。ホスト1がホスト2よりホスト4の最終同期日時が新しい場合には、ホスト1はホスト2からホスト4のレコードを取得しない。
【0094】
(5) レプリケーションの終了は図17に示すように、ホスト1がホスト2との接続を終了させる。
【0095】
このレプリケーションにより、ホスト1は、ホスト1とホスト2から得られるホスト1〜ホスト4の最新レコードを収集することができる。そして、同期時にデータの識別情報である更新日時が衝突した場合(つまり、更新日時が同一である場合)の衝突回避処理を行い、レコードの識別情報である更新日時の衝突を回避している。
【0096】
<レコードの構成と同期による変化例1>
【0097】
図18はレコードの構成と同期による変化例1を示している。同期前のホスト1は、図18のAに示すように、主キーid=1に対し、一例であるデータ(data)は「12340000」であり、副キーmid=1である。midは既述のとおりレプリケーションマスタ識別子である。これに対し、同期前のホスト2は、図18のAに示すように、主キーid=1に対し、dataは「23450000」であり、副キーmid=2である。副キーmidはデバイス毎に異なる値である。
【0098】
これらホスト1、2が同期し、レプリケーションを行う。同期後のホスト1は、図18のBに示すように、主キーid=1に対し、data=「12340000」、ホスト2から主キーid=1、data=「23450000」が複写される。同様に、同期後のホスト2は、図18のBに示すように、主キーid=1に対し、dataは「23450000」、ホスト1から主キーid=1、data=「12340000」が複写されている。このレプリケーションにより、ホスト1、2の各レコードが共通化される。この場合、mid=1と、mid=2により、異なるレコードとして記録される。
【0099】
更新日時の衝突時はIDフィールドの値(例:日時フィールド(date))をインクリメントし、更新日時の衝突を回避して各レコードを保存するので、各レコードの整合性が取られる。
【0100】
なお、主キー(Primary key :プライマリキー)は、リレーショナルデータベースにおいて、レコード(組)の識別子として利用するのに最も好ましいものとして、リレーション(テーブル)毎にただ一つ、設計者により選択され定義された候補キーをいう。つまり、リレーションに格納されたレコードを一意に識別するための属性(列、アトリビュート)またはその集合のうち、そのために通常利用されるべき特定の一つをいう。この主キーにはNULLの存在が許されないが、候補キーには許されるという差がある。
【0101】
<レコード構成と同期による変化例2>
【0102】
図19、図20および図21はレコード構成と2回の同期によるホスト1、2のレコード変化例2を示している。このレコード変化例2は、1回目の同期のループ(loop)1、1回目のloop2、2回目の同期のloop1、2回目の同期のloop2の処理結果であり、各テーブル74−1、74−2のレコード変化を示している。
【0103】
(1) 同期前
【0104】
図19のAは1回目の同期前のホスト1およびホスト2のレコード構成を示している。ホスト1およびホスト2にはid=2011/05/01 10:00:00で一致するdata=100(ホスト1)、data=120(ホスト2)が存在している。つまり、各dataは同期前、識別情報である更新日時が一致し、衝突を生じている。
【0105】
(2) 1回目の同期のloop1の処理後
【0106】
図19のBは1回目の同期のloop1の処理後のレコード構成を示している。ホスト2には、ホスト1から1つのレコードが複写(コピー)されている。既述の衝突回避処理により、ホスト1のidコラムの値が変更(+1)され、つまり、id=2011/05/01 10:00:01に変更され、data=100(ホスト1)が独立したレコードとしてホスト2に記録されている。これにより、ホスト2にあるid=2011/05/01 10:00:00のdata=120との衝突が回避され、各レコードが独立したレコードとして保存されている。ホスト2にあるmid=1はホスト1からの複写レコードであることを表している。
【0107】
(3) 1回目の同期のloop2の処理後
【0108】
図20のAは1回目の同期のloop2の処理後のレコード構成を示している。ホスト1には、ホスト2から2つのレコードが複写されている。ホスト2のid=2011/05/01 09:55:00のdata=90のレコードは同期前、ホスト1には存在しないので、ホスト1にそのまま複写されている。その順序は、ホスト1にあるレコードより更新日時が古いので、もっとも古い時系列位置に保存されている。ホスト1にあるmid=2は、ホスト2からの複写レコードであることを表している。
【0109】
また、ホスト2のid=2011/05/01 10:00:00のdata=120は同期前、ホスト1に存在するレコードと更新日時が一致している。このため、既述の衝突回避処理により、ホスト2のidコラムの値が変更(+1)され、つまり、id=2011/05/01 10:00:01に変更され、data=120(ホスト2)が独立したレコードとしてホスト1に記録されている。これにより、ホスト1にあるid=2011/05/01 10:00:00のdata=100との衝突が回避され、それぞれが独立したレコードとして保存されている。
【0110】
(4) 2回目の同期前
【0111】
図20のBは、2回目の同期前のレコード構成を示している。ホスト1、2では、独自にdataを更新しており、1回目の同期のloop2の処理後からレコードの記録数が増加している。つまり、ホスト1、ホスト2には独自にレコードが複写されたため、id=2011/05/01 10:40:00で一致するdata=170(ホスト1)、data=160(ホスト2)が存在している。つまり、レコード間に衝突を生じている。
【0112】
(5) 2回目の同期のloop1の処理後
【0113】
図21のAは2回目の同期のloop1の処理後のレコード構成を示している。ホスト2には、ホスト1から2つのレコードが複写されている。ホスト1のid=2011/05/01 10:10:00のdata=130のレコードは同期前、ホスト2に存在しないので、ホスト2にそのまま複写されている。レコードの順序は時系列位置に沿っている。
【0114】
また、ホスト1のid=2011/05/01 10:40:00のdata=170は同期前、ホスト2のレコードと更新日時が一致している。既述の衝突回避処理により、ホスト1のidコラムの値が変更(+1)され、つまり、id=2011/05/01 10:40:01に変更され、data=170(ホスト1)が独立したレコードとしてホスト2に記録されている。これにより、ホスト2にあるid=2011/05/01 10:40:00のdata=160との衝突が回避され、それぞれが独立したレコードとして保存されている。
【0115】
(6) 2回目の同期のloop2の処理後
【0116】
図21のBは2回目の同期のloop2の処理後を示している。ホスト1には、ホスト2から2つのレコードが複写されている。ホスト2のid=2011/05/01 10:20:00のdata=150のレコードは同期前、ホスト1に存在しないので、ホスト1にそのまま複写されている。レコードの順序は時系列位置に沿っている。
【0117】
また、ホスト2のid=2011/05/01 10:40:00のdata=160は同期前、ホスト1のレコードと更新日時が一致している。既述の衝突回避処理により、ホスト2のidコラムの値が変更(+1)され、つまり、id=2011/05/01 10:40:01に変更され、data=160(ホスト2)が独立したレコードとしてホスト1に記録されている。これにより、ホスト1にあるid=2011/05/01 10:40:00のdata=170との衝突が回避され、それぞれが独立したレコードとして保存されている。
【0118】
<同期管理テーブルを用いない場合のレコードの構成と同期による変化例>
【0119】
図22は同期管理テーブルを用いない場合のレコードの構成と同期による変化例を示している。
【0120】
(1) 同期前
【0121】
図22のAは同期前のホスト1およびホスト2のレコード構成を示している。ホスト1およびホスト2にはid=2011/05/01 10:00:00で一致するdata=100(ホスト1)、data=120(ホスト2)が存在している。つまり、各dataは同期前、識別情報である更新日時が一致し、衝突を生じている。
【0122】
(2) 同期後
【0123】
図22のBは同期後のレコード構成を示している。ホスト2には、ホスト1から1つのレコードが複写(コピー)されている。既述の衝突回避処理により、ホスト1のidコラムの値が変更(+1)され、つまり、id=2011/05/01 10:00:01に変更され、data=100(ホスト1)が独立したレコードとしてホスト2に記録されている。これにより、ホスト2にあるid=2011/05/01 10:00:00のdata=120との衝突が回避され、各レコードが独立したレコードとして保存されている。
【0124】
ホスト1には、ホスト2から2つのレコードが複写されている。ホスト2のid=2011/05/01 09:55:00のdata=90のレコードは同期前、ホスト1には存在しないので、ホスト1にそのまま複写されている。その順序は、ホスト1にあるレコードより更新日時が古いので、もっとも古い時系列位置に保存されている。
【0125】
また、ホスト2のid=2011/05/01 10:00:00のdata=120は同期前、ホスト1に存在するレコードと更新日時が一致している。このため、既述の衝突回避処理により、ホスト2のidコラムの値が変更(+1)され、つまり、id=2011/05/01 10:00:01に変更され、data=120(ホスト2)が独立したレコードとしてホスト1に記録されている。これにより、ホスト1にあるid=2011/05/01 10:00:00のdata=100との衝突が回避され、それぞれが独立したレコードとして保存されている。
【0126】
このように、ホスト1およびホスト2では、更新時刻の一致によるレコードの衝突が回避され、それぞれが独立したレコードとして保存されている。また、この場合、同期管理テーブル72が存在していないため、レプリケーションマスタ識別子midが省略され、これを格納するフィールドも不要である。
【0127】
<レコードの同期前後および出力>
【0128】
図23はホスト1、2間のレプリケーションによる同期前後および出力を示している。図23では説明を容易にするため数値を簡略化して示している。図23において、図13と同一部分には同一符号を付してある。
【0129】
図23のAおよびBは同期前後のホスト1のテーブル74−1、ホスト2のテーブル74−2を示している。同期前、衝突していたレコードは既述の衝突回避処理によって更新時刻の変更により整合化され、それぞれ共通のレコードが記録されている。
【0130】
このように整合化されたレコードは、たとえば、データ出力タブのSQL文「SELECT date, value, mid FROM table ORDER BY date DESC LIMIT 5;」を用いることにより出力することができる。図23のCはホスト1、ホスト2の各レコードの出力を示している。出力されたレコードは更新日時が異なり、変更された更新日時を識別情報とするレコードはmid=1、mid=2によりいずれのホスト1、ホスト2から複写されたものかを識別することができる。
【0131】
これに対し、従来のレプリケーションでは、図24のAおよびBに示すように、識別子idを必要としている。このようなレコードを出力するには、SQL実行命令が「SELECT date, value, mid FROM table ORDER BY date, mid DESC LIMIT 5;」となる。つまり、従来のレプリケーションでは、date、value、mid列はテーブルの各行を完全に一意に識別できないので、プライマリキーとして列を追加する必要が生じる。つまり、整合性制約がある。また、“ORDER BY”で2以上の列を指定しないと、SQL実行の都度、出力結果の並び順が不定になるおそれがある。レコードの列が増えることや、“ORDER BY”列で2以上の列を指定することで、記憶容量やSQL実行時間が増加するデメリットがある。
【0132】
これに対し、本開示のレプリケーション処理では次のような効果が得られる。
【0133】
(1) dateフィールドの内容をユニークにするため、プライマリーキー列として利用できる。
【0134】
(2) ORDER BYで1つの列の指定で、並び順が安定した出力結果を得られる。
【0135】
(3) 記憶容量とSQL実行時間を削減できる。
【0136】
なお、既述の“ORDER BY”、“SELECT文”および整合性制約は、以下の通りである。
【0137】
“ORDER BY”句は、SELECT文において特定列の値に応じて行の並べ替えを行うことである。SELECT文で作成される表の行の出現順番を指定したい場合にORDER BY句が利用される。このORDERBY句がSELECT文に指定されなかった場合の行の出現順番は不定となる。このORDER BY句では、列ごとに昇順、降順の並べ替えを指定することができる。
【0138】
“SELECT文”は、リレーショナルデータベースのテーブル(表)の行を読み取るためのSQL文である。SELECT文では、複数のテーブルの結合(JOIN)や条件を指定しての行の絞込み(WHERE句)、同一の値を持つ列のグループ化(GROUP BY句)、列の値による並べ替え(ORDER BY句)など、目的に応じたデータの取り出しを行うことができる。
【0139】
「整合性制約」は、データベースが備えねばならない整合性の条件を実現するものであり、特にデータそのものの性質に基づく整合性についてのものである。たとえば、ある関係モデルにおいて、ある属性は一意性を保っていなければならないという条件があるとすれば、それは整合性制約で実現する。これに対して、データベースのトランザクション制御などで並行処理をうまく行なうことによって保たねばならないようなものは、一貫性制約と呼ばれる。一意性制約+や参照制約、検査制約などは整合性制約の一つである。
【0140】
<データの記憶容量>
【0141】
図25は本開示のテーブル74と従来テーブルに要するデータの記憶容量を示している。
【0142】
図25のAはテーブル構成を示している。従来のレプリケーションでは、date、valueおよびmidに加え、識別子idが必要である。これに対し、本開示のレプリケーションでは、テーブル74のレコードにdate、valueおよびmidで構成される。
【0143】
図25のBはデータサイズを示している。従来のレプリケーションでは、“id”は「INT」型であり、そのサイズは4バイトである。“date”は「TIMESTAMP」型であり、そのサイズは4バイトである。“value”は「TEXT」型であり、そのサイズはL+2バイトである。また、“mid”は「INT」型であり、そのサイズは、4バイトである。各サイズを合計すると、全サイズはL+14バイトとなり、たとえば、L=30であれば、L+14=44バイトとなる。
【0144】
これに対し、本開示のレプリケーションに用いられるテーブル74では、識別子idを用いていないので、各サイズを合計すると、全サイズはL+10バイトとなり、たとえば、L=30であれば、L+10=40バイトとなる。
【0145】
このため、本開示のレプリケーションに必要なデータサイズは、従来構成に比較し40/44≒91〔%〕となり、9〔%〕だけ削減される。
【0146】
<更新時刻の変更によるユニークな識別情報>
【0147】
更新時刻で構成されたユニークな識別情報としての時刻IDが衝突する確率は、「ホスト毎の平均更新間隔」と「ホスト数」から導かれる。利用状況からすれば、「ホスト毎の平均更新間隔」が「ホスト数」よりも十分に大きければよい。
【0148】
たとえば、平均更新間隔が10〔分〕でホスト数が“3”であれば(ケース1)、600〔個〕のスロット中の3〔個〕が使われる(=スロット使用率0.5〔%〕)ので、衝突可能性は十分に低い状況と判断できる。ここで、スロットとは、スロット=時刻ID(=レコード)を指定可能な場所である。時刻IDの精度が秒の場合、1分間あたり60〔個〕のスロットがある。つまり、最大60のレコードを生成できる。
【0149】
平均更新間隔が2〔分〕でホスト数が“12”であれば(ケース2)、120〔個〕のスロット中の12〔個〕が使われる(=スロット使用率10%)ので、衝突可能性は認められるものの衝突を回避可能な状況であると判断できる。つまり、データは十分に近いスロットに記録できる。
【0150】
平均更新間隔が30〔秒〕でホスト数が“60”であれば(ケース3)、30〔個〕の空きスロットに対して60〔個〕のスロットが必要となる(=スロット使用率200〔%〕)ので、衝突はほとんど不可避であり、衝突回避が不可能な状況であると判断できる。つまり、すべてのデータをスロットに記録できない。
【0151】
時刻IDの精度(最小単位)では、OS(Operating System)やプログラミング言語で提供されるシステム時刻の精度は1〔秒〕、1〔ミリ秒〕、1〔マイクロ秒〕などがあり、これらから選択すればよい。時刻IDの範囲はプログラム(例えば、Unix(登録商標))の場合は1970年1月1日から2038年1月19日までとなっている。本開示の内容では、時刻IDは、4バイト長で表現される1970年1月1日を起点とする秒数、あるいは8バイト長で表現される1970年1月1日等を起点とするマイクロ秒数で取り扱えばよい。
【0152】
<ホストにおけるデータベース、同期管理テーブルおよびレコードの構成例>
【0153】
図26はホストにおけるデータベース、同期管理テーブルおよびレコードの構成例を示している。既述のデータベースエンジン68(図13)は複数のデータベース66を保持する。アプリケーションは1つ以上のデータベース(アプリ1用データベース)66を利用する。図26のAに示すように、各データベース66は通常1つ以上のテーブルを含んでいる。つまり、アプリ1用データベース66−1にはテーブル(テーブル1)74−11、テーブル(テーブル2)74−12を備えている。同期管理用データベース95は、同期管理テーブル72を備えている。
【0154】
同期管理機能93(図10のB)は、図26のBに示すように、1つのデータベースとして同期管理用データベース95を利用する。この同期管理用データベース95は、1つ以上のテーブルを含み、このテーブルには同期管理テーブル72が含まれる。
【0155】
なお、同期管理テーブル72を用いない場合には図26のAに示す構成のみとなる。
【0156】
図27はレプリケーションのテーブルを示している。既述のテーブル1には、図27のAに示すように、複数のレコード1、レコード2・・・レコード8が格納される。つまり、各レコード1〜Nは、アプリケーションが必要とする数だけ作成される。
【0157】
同期管理テーブル72は、図27のBに示すように、複数のレコード1、レコード2・・・レコード5が格納される。各レコード1〜Nは、各機器が認識した機器の数だけ作成される。つまり、ある機器が5つの機器を認識すれば、5つのレコードが作成される。同期管理テーブル72を用いない場合には図27のAに示す構成のみとなる。
【0158】
図28はテーブル1および同期管理テーブル72の構成例を示している。
【0159】
アプリケーションのテーブルに格納されるレコードは、複数のコラム(列)で構成される。各レコードのテーブルには、idコラムおよびmidコラムが含まれる。さらに、アプリケーションが必要とする1つ以上のコラムを含む。図28のAに示すように、テーブル1では、idコラムを先頭にデータ1、データ2、データ3およびmidコラムが格納されている。
【0160】
同期管理テーブル72のレコードは、図28のBに示すように、2つのコラム(列)で構成される。各レコードには、midコラムと、最終同期日時コラムの2つのコラムが含まれている。
【0161】
<テーブル1のレコードにおけるコラムの構成例>
【0162】
アプリケーションのレコードでは、idコラムはデータの作成日時を保存し、midコラムはデータを作成した機器の識別子を保存する。同期管理テーブル72のレコードでは、midコラムは機器の識別子を保存する。最終同期日時コラムは、その機器とmidで識別される機器との間で最後に同期処理をした日時を保存する。未同期の場合は“0”である。
【0163】
図29はテーブル1および同期管理テーブルのレコードのコラム構成を示している。図29のAに示すテーブル1のレコードのコラム構成では、コラム名、データ型、サイズ、説明および初期値が格納される。コラム名には一例として、id、データ1、データ2、データ3およびmidが格納される。
【0164】
idには、データ型がTIMESTAMP、DATETIME他(日時)であること、サイズが4バイトまたは8バイトである。その説明にはデータの作成日時、初期値は現在の日時であることが格納される。
【0165】
データ1、データ2およびデータ3について、データ型は任意であること、サイズは任意であること、その説明にはアプリケーションを利用すること、初期値は任意であることが格納される。
【0166】
midには、データ型がINT(整数)であること、サイズが4バイトであること、その説明には同期対象となる機器の識別子であること、初期値には指定が必須であることが明示されている。
【0167】
図29のBに示す同期管理テーブル72のレコードには、同様に、コラム名、データ型、サイズ、説明および初期値が格納される。
【0168】
コラム名には、mid、最終同期日時が格納されている。midには、データ型がINT(整数)であること、サイズが4バイトであること、その説明には同期対象となる機器の識別子であること、初期値には指定が必須であることが格納されている。最終同期日時には、データ型がTIMESTAMP、DATETIME他(日時)であること、サイズが4バイトまたは8バイトであること、その説明には最後に同期処理をした日時、初期値には現在の日時が格納されている。なお、同期管理テーブル72を用いない場合には、図29のAのみの構成となる。
【0169】
<起動によるネットワーク接続の確立>
【0170】
図30および図31はレプリケータ・サービスの処理手順を示している。この処理手順は、本開示の同期制御プログラムまたは同期制御方法の一例である。図30および図31において、A、Bはフローチャート間の結合子を示している。
【0171】
この処理手順では、電源オンで初期化を行ない(S201)、全レプリケーションを実行する(S202)。エラー発生を監視し(S203)、エラーが発生すれば(S203のYES)、そのエラーをログに記録する(S204)。このログ記録(S204)またはエラー発生がなければ(S203のNO)、終了か否かを判定する(S205)。終了でなければ(S205のNO)、ウェイト状態とし(S206)、S202に戻る。このウェイト時間は一定時間とし、たとえば、30〔分〕のウェイト状態となる。また、終了であれば(S205のYES)、この処理を終了する。
【0172】
図31はレプリケータ・サービスの処理手順のうち、例外処理の処理手順を示している。図31では、スリープに係る処理を例外処理としている。
【0173】
この例外の処理手順では、スリープか否かを判定し(S211)、スリープであれば(S211のYES)、HALTに移行する。
【0174】
スリープでなければ(S211のNO)、スリープからの復帰か否かを判定する(S212)。スリープからの復帰であれば(S212のYES)、図30に示す処理手順のS202(全レプリケーション)に移行する。
【0175】
スリープからの復帰でなければ(S212のNO)、シャットダウンか否かを判定する(S213)。シャットダウンであれば(S213のYES)、図30に示す処理手順の終了(レプリケータ・サービスの終了)に移行する。また、シャットダウンでなければ(S213のNO)、例外処理の処理手順を終了する。
【0176】
図32は既述の全レプリケーション(S202:図30)のサブルーチンの処理手順を示している。
【0177】
この全レプリケーションを開始すると、一時記憶niにネットワーク・インタフェースのリストを生成させる(S221)。この一時記憶niにデータがあるか否かを判定し(S222)、一時記憶niにデータがあれば(S222のYES)、IFレプリケーションを実行する(S223)。このIFレプリケーションは一時記憶niの先頭要素に対して行う。
【0178】
このIFレプリケーション(S223)の後、一時記憶niの先頭要素を削除し(S224)、S222に戻る。一時記憶niにデータがなければ(S222のNO)、この処理を終了し、既述のS203(図30)に遷移する。
【0179】
図33は既述のIFレプリケーション(S223:図32)のサブルーチンの処理手順を示している。このIFレプリケーションでは、一時記憶niにネットワーク・インタフェースを格納する。
【0180】
このIFレプリケーションを開始すると、一時記憶niにデータがあるか否かを判定し(S231)、一時記憶niにデータがあれば(S231のYES)、一時記憶svに一時記憶niにインタフェースで登録済みホストのリストを生成させる(S232)。
【0181】
一時記憶svにデータがあるか否かを判定し(S233)、一時記憶svにデータがあれば(S233のYES)、一時記憶svの先頭のホストに接続可能か否かを判定する(S234)。接続可能であれば(S234のYES)、レプリケーションを実行し(S235)、一時記憶svの先頭要素を削除し(S236)、S233に戻る。S234において、接続不可であれば(S234のNO)、レプリケーション(S235)を実行することなく、一時記憶svの先頭要素を削除する(S236)。
【0182】
一時記憶niにデータがない場合(S231のNO)、または一時記憶svにデータがない場合(S233のNO)には、IFレプリケーションを終了する。このようにして、登録済みホストのレプリケーションを順に行ない、接続可能な全てのホストについて、レプリケートを行なう。
【0183】
<新しいネットワーク接続の確立>
【0184】
図34および図35はネットワーク検出サービスの処理手順を示している。各処理手順において、C、Dはフローチャート間の結合子を示している。
【0185】
この処理手順では、電源オンで初期化を開始する(S241)。この初期化の後、一時記憶nibakを空にし(S242)、ウェイト状態に移行する(S243)。このウェイト時間は一定時間たとえば、1〔分〕である。このウェイト状態において、一時記憶niにネットワーク・インタフェースのリストを生成し(S244)、一時記憶difに一時記憶niから一時記憶nibakの要素を取り除いたリストを生成させる(S245)。
【0186】
一時記憶difに要素がある否かを判定し(S246)、要素があれば(S246のYES)、IFレプリケーションを実行する(S247)。このIFレプリケーションは一時記憶difの先頭要素について行ない、このS247の後、一時記憶difの先頭要素を削除し(S248)、S246に戻る。IFレプリケーションは、niの先頭要素に代えてdifの先頭要素を行なう他はIFレプリケーション(図32、S223)と同様である。
【0187】
一時記憶difに要素がなければ(S246のNO)、一時記憶nibakを一時記憶niで更新し(S249)、終了か否かを判定する(S250)。終了でなければ(S250のNO)、S243に復帰し、ウェイト状態に遷移する。また、終了であれば(S250のYES)、このネットワーク検出処理を終了する。このようにして、一定時間間隔でnibakにあるインタフェースからの差分のインタフェースについてレプリケートを行なう。
【0188】
図35はネットワーク検出サービスの処理手順のうち、例外処理の処理手順を示している。
【0189】
この例外の処理手順では、スリープか否かを判定し(S251)、スリープであれば(S251のYES)、HALTに移行する。
【0190】
スリープでなければ(S251のNO)、スリープからの復帰か否かを判定する(S252)。スリープからの復帰であれば(S252のYES)、図34に示す処理手順のS243(ウェイト)に移行する。
【0191】
スリープからの復帰でなければ(S252のNO)、シャットダウンか否かを判定する(S253)。シャットダウンであれば(S253のYES)、図34に示す処理手順の終了(ネットワーク検出サービスの終了)に移行する。また、シャットダウンでなければ(S253のNO)、例外処理の処理手順を終了する。
【0192】
<新接続先装置(新デバイス)の発見の処理>
【0193】
図36はレプリケータ・ホスト検出サービスの処理手順を示している。
【0194】
この処理手順では、一時記憶niにネットワーク・インタフェースのリストを生成させる(S261)。一時記憶niにデータがるか否かを判定し(S262)、データがあれば(S262のYES)、一時記憶niの先頭インタフェースにブロードキャスト送信をする(S263)。一時記憶dscvrにブロードキャストの応答ホストのリストを生成させる(S264)。一時記憶dscvrにデータがあるか否かを判定し(S265)、一時記憶dscvrにデータがあれば(S265のYES)、一時記憶dscvrの先頭は登録済みホストか否かを判定する(S266)。dscvrの先頭が登録済みホストでなければ(S266のNO)、インタフェース登録ホストに一時記憶dscvrの先頭を設定し(S267)、レプリケーションを実行する(S268)。このレプリケーションの後、一時記憶dscvrの先頭要素を削除し(S269)、S265に戻る。
【0195】
S265において、一時記憶dscvrにデータがなければ(S265のNO)、一時記憶niの先頭要素を削除し(S270)、S262に戻る。
【0196】
一時記憶niにデータがなければ(S262のNO)、終了か否かを判断し(S271)、終了でなければ(S271のNO)、ウェイト状態に移行し(S272)、S261に戻る。この場合ウェイト時間は一定時間であり、たとえば、5〔分〕である。
【0197】
S271において、終了であれば(S271のYES)、このレプリケータ・ホスト検出サービスの処理手順を終了する。このようにして、各ネットワーク・インタフェース中の登録済みでない応答ホストについて、レプリケートを行なう。
【0198】
<レプリケーションのシーケンス>
【0199】
図37は、PCと情報処理端末とを対峙させ、PCと情報処理端末との間で実行されるレプリケーションのシーケンスを示している。
【0200】
情報処理端末4−1からPC26に同期管理テーブル72が要求され(S281)、PC26から情報処理端末4−1に同期管理テーブル72が送信される(S282)。情報処理端末4−1では同期対象のmidを決定し(S283)、loop1に移行する。
【0201】
loop1では、情報処理端末4−1からPC26に対してデータベース更新要求を行ない(S284)、PC26ではデータベースの更新を行う(S285)。PC26はこのデータベース更新の後、情報処理端末4−1に対し応答が発せられる(S286)。loop1ではこのような処理を繰り返して行い、PC26側のデータベースの更新の後、loop2に移行する。
【0202】
loop2では、情報処理端末4−1からPC26にデータベース取得要求を行ない(S287)、情報処理端末4−1ではデータベースの更新を行う(S288)。PC26から情報処理端末4−1に対し、データベース結果の送信を行なう(S289)。loop2ではこのような処理を繰り返して行う。情報処理端末4−1のデータベースの更新の後、情報処理端末4−1からPC26に終了を通知し(S290)、PC26から情報処理端末4−1にその応答が通知される(S291)。
【0203】
図38は同期対象の決定処理の処理手順を示している。
【0204】
この処理手順では一時記憶curに同期管理テーブルのレコードのリストを格納し(S301)、一時記憶itblに取得した同期管理テーブルを格納する(S302)。一時記憶impに一時記憶itblのレコードのリストを格納する(S303)。一時記憶umidを空にし(S304)、impがあるか否かを判定する(S305)。一時記憶impがなければ(S305のNO)、この処理を終了する。
【0205】
一時記憶impがあれば(S305のYES)、impの先頭のmidが自midであるか否かを判定し(S306)、一時記憶curにimpの先頭のmidがあるか否かを判定する(S307)。一時記憶curにimpの先頭のmidがあれば(S307のYES)、imp側の最終同期日時−一時記憶cur側(日時)≧閾値であるか否かを判定する(S308)。閾値は一定時間たとえば、30〔分〕である。
【0206】
impのmidを一時記憶umidに追加し(S309)、一時記憶impの先頭要素を削除し(S310)、S305に戻る。このようにして、itblのレコードのリストから自midのデータと最終同期からの経過時間が閾値以下のデータを除外して、一時記憶umidに記憶して、同期対象を決定する。
【0207】
図39は同期対象を決定する動作例を示している。
【0208】
この動作例では情報処理端末4−1側(mid=1)の同期管理テーブル72−1と、PC26(mid=2)の同期管理テーブル72−2との推移を示している。
【0209】
この動作例では、mid=1、3、5が無視され、mid=2、4、6が取得対象である。つまり、umid=2、4、6となる。
【0210】
図40は、既述のシーケンス(図37)のloop1の処理手順を示している。
【0211】
この処理手順の開始により、現在時刻−imp側最終同期日時≧閾値であるか否かを判定する(S321)。これは自midについて判断し、閾値は一定時間たとえば、30〔分〕である。現在時刻−imp側最終同期日時≧閾値でなければ(S321のNO)、このloop1の処理を終了する。
【0212】
現在時刻−imp側最終同期日時≧閾値であれば(S321のYES)、一時記憶dblにデータベースのリストを生成し(S322)、一時記憶dblにデータがあるか否かを判定する(S323)。一時記憶dblにデータがなければ(S323のNO)、この処理を終了する。
【0213】
一時記憶dblにデータがあれば(S323のYES)、一時記憶tblに一時記憶dblの先頭データベースのテーブルのリストを展開する(S324)。一時記憶tblにデータがあるか否かを判断し(S325)、データがあれば(S325のYES)、一時記憶rclに一時記憶tblから条件を抽出したレコードのリストを展開する(S326)。抽出条件は、id>imp側最終同期日時ANDmidが自midとし、idがimp側最終同期日時を有する自midのレコードを抽出する。一時記憶rclにデータがあるか否かを判断し(S327)、一時記憶rclにデータがあれば(S327のYES)、データベースの更新要求を行なう(S328)。更新要求の後、または一時記憶rclにデータが無い場合(S327のNO)、一時記憶tblの先頭要素を削除し(S329)、S325に戻る。
【0214】
一時記憶tblにデータがなければ(S325のNO)、一時記憶dblの先頭要素を削除し(S330)、S323に戻る。
【0215】
図41は、既述のシーケンス(図37)のloop2の処理手順を示している。
【0216】
この処理手順の開始により、データベースの取得要求を行ない(S341)、データベースの結果送信を行う(S342)。umidがあるか否かを判断し(S343)、umidがなければ(S343のNO)、この処理を終了する。
【0217】
umidがあれば(S343のYES)、一時記憶idblに取得したデータベースのリストを展開し(S344)、一時記憶idblにデータがあるか否かを判定する(S345)。一時記憶idblにデータがなければ(S345のNO)、この処理を終了する。
【0218】
一時記憶idblにデータがあれば(S345のYES)、一時記憶itbl2に一時記憶idblの先頭データベースのテーブルのリストを展開する(S346)。一時記憶itbl2にデータがあるか否かを判断し(S347)、データがあれば(S347のYES)、一時記憶irclに一時記憶itbl2から条件を抽出したレコードのリストを展開する(S348)。抽出条件は、id>imp側のmid最終同期日時ANDmidがumidのいずれかを含むとする。一時記憶irclにデータがあるか否かを判断し(S349)、一時記憶irclにデータがあれば(S349のYES)、データベースの更新および衝突回避処理(ircl)を行なう(S350)。データベースの更新および衝突回避の処理、または一時記憶irclにデータが無い場合(S349のNO)、一時記憶itbl2の先頭要素を削除し(S351)、S347に戻る。
【0219】
一時記憶itbl2にデータがなければ(S347のNO)、一時記憶idblの先頭要素を削除し(S352)、S345に戻る。
【0220】
このようにしてid>imp側のmid最終同期日時であって、midがumidのいずれかを含むデータの更新を行なう。
【0221】
<データベースの更新およびデータの衝突回避>
【0222】
図42はデータベース更新とデータ衝突の回避処理の処理手順を示している。
【0223】
この処理手順では、開始により、一時記憶irclに引数で受け取ったレコードのリストを展開する(S361)。この場合引数は、データベース名、テーブル名、更新レコードリストである。
【0224】
一時記憶irclがあるか否かを判断する(S362)。一時記憶irclがなければ(S362のNO)、この処理を終了する。一時記憶irclがあれば(S362のYES)、一時記憶ircに一時記憶irclの先頭を展開する(S363)。
【0225】
一時記憶rcにデータベースのデータテーブルからirc−>idを抽出する(S364)。rcにデータがあるか否かを判断し(S365)、rcにデータがあれば(S365のYES)、irc−>id←irc−>id+1の処理を実行し(S366)、irc−>idの値を1大きくし、S364に戻る。rcのデータがなくなるまでS364〜S366の処理を継続的に行う。
【0226】
一時記憶rcにデータがなければ(S365のNO)、データベースのテーブルに一時記憶ircを展開し(S367)、一時記憶irclの先頭要素を削除し(S368)、S362に戻る。irc−>idは一時記憶rcにはない値(データ)に設定されるので、irc−>idがユニークなidに設定される。
【0227】
<ホスト1側の処理手順およびデータベースのレコード変化>
【0228】
図43、図44、図45および図46はホスト1のレプリケーションの処理手順を示している。この処理手順は図42と同様であり、動作ステップを太線で示している。
【0229】
この処理手順では、データベースのテーブルに示すように、処理手順の開始により、一時記憶irclにホスト2のレコードのリストを展開する(S361)。
【0230】
一時記憶irclがあるか否かを判断する(S362)。この場合、一時記憶irclがあるので(S362のYES)、一時記憶ircに一時記憶irclの先頭を展開する(S363)。
【0231】
一時記憶rcにデータベースのデータテーブルからirc−>idを抽出し(S364)、rcにデータがあるか否かを判断する(S365)。この場合、一時記憶rcにデータがないので(S365のNO)、データベースのテーブルに一時記憶ircを展開する(S367)。そして、一時記憶irclの先頭要素を削除し(S368)、図44のS362に遷移する。S362では一時記憶irclがあるか否かを判断する(S362)。
【0232】
この場合、一時記憶irclがあるので(S362のYES)、一時記憶ircに一時記憶irclの先頭を展開する(S363)。
【0233】
一時記憶rcにデータベースのデータテーブルからirc−>idを抽出する(S364)。一時記憶rcにデータがあるか否かを判断する(S365)。この場合、一時記憶rcにデータがあるので(S365のYES)、irc−>id←irc−>id+1の処理を実行し(S366)、図45のS364に遷移する。
【0234】
図45のS364では一時記憶rcにデータベースのデータテーブルからirc−>idを抽出し(S364)、一時記憶rcにデータがあるか否かを判断する(S365)。この場合、一時記憶rcにデータがないので(S365のNO)、データベースのテーブルに一時記憶ircを展開する(S367)。一時記憶irclの先頭要素を削除し(S368)、図46のS362に遷移する。
【0235】
図46のS362では、一時記憶irclがあるか否かを判断する(S362)。この場合、一時記憶irclがないので(S362のNO)、この処理を終了する。
【0236】
<ネットワーク・インタフェースのリスト>
【0237】
図47はネットワーク・インタフェースのリスト、ネットワーク・インタフェースの構成、接続状態を示す一時記憶niのデータ構造を示している。
【0238】
レプリケータ・ホスト検出機能(図36)ではネットワーク・インタフェースのリストが用いられる。このリストはネットワークに対応するポートであり、一時記憶niが用いられる。この一時記憶niは、メインメモリ上に配置され、リスト構造を持っている。この一時記憶niには、ホスト装置が持つネットワーク・インタフェースのうち、接続状態のネットワーク・インタフェースを表す名前、ネットワーク・インタフェース名が保存される。
【0239】
図47のAは一時記憶niの構成例を示している。この一時記憶niには、ネットワーク・インタフェース名1、ネットワーク・インタフェース名2、ネットワーク・インタフェース名3・・・が格納されている。
【0240】
図47のBはホスト装置のネットワーク・インタフェースの一例を示している。
【0241】
ホスト装置(ホスト)40には、無線LAN30により他の機器114が無線により接続されている(ワイヤレスネットワーク接続)。また、ホスト装置40には有線LAN(LAN1)22−1によりインターネット20に接続されている(ローカルエリア接続1)。ホスト装置40の有線LAN(LAN2)22−2は未接続である。つまり、ローカルエリア接続2側は未接続状態にある。
【0242】
図48は、ネットワーク・インタフェースの接続状態を示す一時記憶niのデータ構造を示している。
【0243】
有線LAN22−1および無線LAN30が接続状態であれば、図48のAに示すように、一時記憶niには“ローカルエリア接続1”および“ワイヤレスネットワーク接続”が格納される。
【0244】
また、有線LAN22−1、22−2および無線LAN30が接続状態であれば、図48のBに示すように、一時記憶niには“ローカルエリア接続1”、“ローカルエリア接続2”および“ワイヤレスネットワーク接続”が格納される。
【0245】
また、全てのネットワーク・インタフェースが非接続状態であれば、一時記憶niの内容は空となる。
【0246】
<一時記憶sv:一時記憶niのインタフェースで登録済みホストのリスト>
【0247】
図49は、一時記憶svの構成例、ネットワーク・インタフェースの構成、接続状態を示す一時記憶svのデータ構造を示している。
【0248】
一時記憶sv(図33)は、メインメモリ上に配置され、リスト構造を持っている。この一時記憶svには、ホスト装置40の指定されたネットワーク・インタフェースに接続された記録があるホスト名およびMAC(Media Access Control)アドレスが保存される。MACアドレスは、ネットワーク機器のハードウェアに割り当てられる物理アドレスで、その表現形式は48ビット符号である。
【0249】
図49のAに示す一時記憶svには、“ホスト名1”、“ホスト名2”、“ホスト名3”・・・に対応する“MACアドレス1”、“MACアドレス2”、“MACアドレス3”・・・が格納されている。
【0250】
図49のBは、ホスト装置40と複数のクライアントの接続例を示している。ホスト装置40にクライアント(host01)116−1とクライアント(host02)116−2が無線LAN30により接続されている(ワイヤレスネットワーク接続)。ホスト装置40には既述の有線LAN(有線LAN1)22−1と有線LAN(有線LAN2)22−2とが設けられている。有線LAN(有線LAN1)22−1にはインターネット20およびクライアント(host03)116−3が接続されている(ローカルエリア接続1)。また、有線LAN(有線LAN2)22−2にはクライアント(host04)116−4およびクライアント(host05)116−5が接続されている(ローカルエリア接続2)。
【0251】
図50は、LAN接続を表す一時記憶svのデータ構造を示している。図50のAは“ワイヤレスネットワーク接続”の指定時であり、一時記憶svには“host01”に対して“111111111111”、“host02”に対して“222222222222”が格納されている。
【0252】
図50のBは“ローカルエリア接続1”の指定時であり、一時記憶svには“host03”に対して“333333333333”が格納されている。
【0253】
図50のCは“ローカルエリア接続2”の指定時であり、一時記憶svには“host04”に対して“444444444444”、“host05”に対して“555555555555”が格納されている。
【0254】
<一時記憶dif:一時記憶niの一時記憶nibakの要素を除いたリスト>
【0255】
図51は、一時記憶dif(図34)の構成例およびネットワーク構成の変化を示している。一時記憶difは、メインメモリ上に配置され、リスト構造を持っている。この一時記憶difには、ホスト装置40が持つネットワーク・インタフェースのうち、前回から今回にかけて接続状態に変化したネットワーク・インタフェース名が保存される。
【0256】
図51のAに示す一時記憶difは、複数のネットワーク・インタフェース名として“ネットワーク・インタフェース名1”、“ネットワーク・インタフェース名2”、“ネットワーク・インタフェース名3”・・・を格納している。
【0257】
図51のBは変化前(前回の状態)のネットワーク構成を示している。この変化前の構成では、ホスト装置40の無線LAN30は非接続であり、ワイヤレスネットワーク接続はない。ホスト装置40の有線LAN(有線LAN1)22−1にはインターネット20のみが接続されている。つまり、ローカルエリア接続1にはネットワークが接続されている。有線LAN(有線LAN2)22−2は未接続であり、ローカルエリア接続2はオープン状態である。
【0258】
これに対し、図51のCは変化後(現在の状態)のネットワーク構成を示している。変化後の構成では、他の機器114が無線LAN30により接続されている(ワイヤレスネットワーク接続)。ホスト装置40には既述の有線LAN(有線LAN1)22−1によりインターネット20が接続されている(ローカルエリア接続1)。有線LAN(有線LAN2)22−2は前回同様に未接続であり、ローカルエリア接続2は非接続状態である。
【0259】
図52は現在の一時記憶nibak、ni、difの各内容を示している。
【0260】
図52のAに示す一時記憶nibakは現在、“ローカルエリア接続1”となっている。
【0261】
図52のBに示す一時記憶niは現在、“ローカルエリア接続1”および“ワイヤレスネットワーク接続”となっている。
【0262】
図52のCに示す一時記憶difは現在、“ワイヤレスネットワーク接続”となっている。
【0263】
<一時記憶dscvr(一時記憶niで応答したホストのリスト)>
【0264】
図53は、一時記憶dscvrのデータ構造、接続状態を示している。一時記憶dscvrは、メインメモリ上に配置され、リスト構造を持っている。この一時記憶dscvrには、ホスト装置40の指定されたネットワーク・インタフェースで発見されたホストを表すホスト名とMACアドレスが保存される。
【0265】
図53のAに示す一時記憶dscvrでは、複数のホスト名として“ホスト名1”、“ホスト名2”、“ホスト名3”・・・とともに、“MACアドレス1”、“MACアドレス2”、“MACアドレス3”・・・が格納されている。
【0266】
図53のBはワイヤレスネットワーク接続が未接続から接続への変化例を示している。図51のBに示す状態(ワイヤレスネットワーク接続=未接続)から図53のBに示すように、ホスト装置40の無線LAN30側にクライアント(host01)116−1が接続されている(ワイヤレスネットワーク接続)。
【0267】
図53のCは、この場合の一時記憶dscvrの内容を示している。一時記憶dscvrには、接続状態を表す“host01”とともに“111111111111”が格納されている。
【0268】
<一時記憶cur:同期管理テーブルのレコードのリスト>
【0269】
図54は一時記憶curのデータ構造および複写動作を示している。
【0270】
一時記憶curは、メインメモリ上に配置され、リスト構造を持っている。この一時記憶curのコピー元にあたる同期管理テーブル72はホスト装置40のデータベース上に保存されている。
【0271】
図54のAは一時記憶curのデータ構造を示している。この一時記憶curでは、“mid1”、“mid2”、“mid3”・・・とともに、“最終更新日時1”、“最終更新日時2”、“最終更新日時3”・・・が保存されている。
【0272】
図54のBは、一時記憶curのコピー動作および内容例を示している。同期管理テーブル72にはmidの番号とともに、日時情報が保存されている。したがって、これをコピーした一時記憶curには同様にmidの番号とともに、日時情報が保存される。
【0273】
<一時記憶itbl(取得した同期管理テーブル)>
【0274】
図55は、一時記憶itblの構成例および内容を示している。一時記憶itblは、データベース上に保存されるか、またはメインメモリ上に配置され、リスト構造を持っている。この一時記憶itblは同期対象装置の同期管理テーブル72であり、同期対象装置のデータベース上に保存されている。
【0275】
図55のAに示す一時記憶itblでは“mid1”、“mid2”、“mid3”・・・とともに、“最終更新日時1”、“最終更新日時2”、“最終更新日時3”・・・が保存されている。
【0276】
図55のBに示す一時記憶itblの内容ではmidの番号とともに、具体的な更新日時が保存されている。
【0277】
<一時記憶imp:一時記憶itblのレコードのリスト>
【0278】
図56は一時記憶impの構成および内容を示している。一時記憶impは、メインメモリ上に配置され、リスト構造を持っている。この一時記憶impは作業用の変数(リスト)であり、初期化時に一時記憶itblの内容がコピーされ、先頭要素から順番に利用される。
【0279】
図56のAに示す一時記憶impでは“mid1”、“mid2”、“mid3”・・・とともに、“最終更新日時1”、“最終更新日時2”、“最終更新日時3”・・・が保存されている。
【0280】
図56のBは、一時記憶impのコピー動作および内容例を示している。一時記憶itblにはmidの番号とともに、日時情報が保存されている。したがって、これをコピーした一時記憶impには、同様にmidの番号とともに、日時情報が保存される。
【0281】
<一時記憶dblの構成>
【0282】
図57は一時記憶dblの構成例、データベースの構成、一時記憶dblのデータ構造を示している。
【0283】
一時記憶dblは、通常メインメモリ上に配置される一時記憶で、リスト構造を持つ。この一時記憶dblにはホスト装置40のデータベースに含まれるデータベース名が保存される。
【0284】
図57のAに示す一時記憶dblには、“データベース名1”、“データベース名2”、“データベース名3”・・・が格納されている。
【0285】
図57のBに示すホスト装置40のデータベースは、3個のアプリ用のデータベース118−1、118−2、118−3と同期管理用データベース120を持ち、それぞれ “appl1_db" (アプリ1用データベース)、“appl2_db" (アプリ2用データベース)、“appl3_db" (アプリ3用データベース)、“syncmgr_db" (同期管理用データベース)という名前を有する。
【0286】
これに対応し、図57のCに示す一時記憶dblには“appl1_db" 、“appl2_db" 、“appl3_db" が格納されている。
【0287】
<一次記憶tbl:一次記憶dblの先頭データベースのテーブルのリスト>
【0288】
図58は、一次記憶tblの構成、ホスト装置のデータテーブルの構成例を示している。
【0289】
一次記憶tblは、メインメモリ上に配置され、リスト構造を持っている。この一次記憶tblにはホスト装置のデータベース名で指定されたデータベースに含まれるテーブル名が保存される。
【0290】
図58のAに示す一次記憶tblでは、“テーブル名1”、“テーブル名2”、“テーブル名3”・・・が保存されている。
【0291】
この場合、図58のBに示すホスト同士のデータベースのテーブル構成ではアプリ1用データベース(appl1_db)には2つのテーブル(aaa_tbl)と、テーブル(bbb_tbl)を備えている。アプリ2用データベース(appl2_db)は内部に2つのテーブル(ccc_tbl)と、テーブル(ddd_tbl)を備えている。アプリ3用データベース(appl3_db)は内部に2つのテーブル(eee_tbl)とテーブル(fff_tbl)を備えている。そして、同期管理用データベース(syncmgr_db)はテーブル(syncmgr_tbl)を備えている。
【0292】
図59は、一次記憶tblの初期化およびその内容を示している。図59のAは一次記憶tblの初期化動作と内容の例1であり、一次記憶dblが初期動作でテーブル名“appl1_db”、“appl2_db”“appl3_db”を備えている。これに対し、一時記憶tblでは、先頭のデータベースのテーブル名をコピーし、テーブル名が“aaa_tbl”、“bbb_tbl”になる。
【0293】
図59のBは一次記憶tblの初期化動作と内容の例2であり、一次記憶dblが初期動作でテーブル名“appl2_db”、“appl3_db”を備えている。これに対し、一時記憶tblでは、先頭のデータベースのテーブル名をコピーし、テーブル名が“ccc_tbl”、“ddd_tbl”になる。
【0294】
図59のCは一次記憶tblの初期化動作と内容の例3であり、一次記憶dblが初期動作でテーブル名“appl3_db”を備えている。これに対し、一時記憶tblでは、先頭のデータベースのテーブル名をコピーし、テーブル名が“eee_tbl”、“fff_tbl”になる。
【0295】
<一次記憶rcl:一次記憶tblから条件抽出したレコードのリスト>
【0296】
図60は、一次記憶rclの構成例およびレコードの構成を示している。
【0297】
一次記憶rclは、メインメモリ上に配置され、リスト構造を持っている。この一次記憶rclには、指定されたテーブルに含まれるレコードからの抽出結果が保存される。
【0298】
図60のAに示す一次記憶rclの構成例では、レコード1、レコード2、レコード3・・・が保存されている。
【0299】
図60のBは各レコードの構成例を示している。各レコードは、id、midおよびdataで構成されている。
【0300】
図61は一次記憶tblおよび一時記憶rclの内容を示している。図61のAに示す一次記憶tblでは、時刻情報を含むデータ構造を備えている。
【0301】
図61のBに示す一次記憶rclは時刻情報を含むデータ構造を備えている。これは、2011/05/01 09:00:00は最終同期時刻であり、自mid=mid1の場合に、図61のAに示す一時記憶tblから条件抽出して得られる。
【0302】
<一時記憶idbl(取得したデータベースのリスト)と一時記憶itbl2(一時記憶itbl:取得した一時記憶idblの先頭のテーブルのリスト)の関係を表すリスト>
【0303】
図62は、一時記憶idblの構成、ホストのデータベースの構成および一時記憶idblの内容を示している。一時記憶idblは、メインメモリ上に配置され、リスト構造を持っている。この一時記憶idblにはデータベース名が保存される。
【0304】
図62のAに示す一時記憶idblでは“データベース名1”、“データベース名2”、“データベース名3”・・・が保存されている。
【0305】
図62のBに示す同期対象装置のデータベースの構成例では、同期対象装置に3つアプリ用のデータベースと一つの同期管理用データベースを持っている。“appl1_db" はアプリ1用データベース名、“appl2_db" はアプリ2用データベース名、“appl3_db" はアプリ3用データベース名を表している。また、“syncmgr_db" は同期管理用データベース名を表している。
【0306】
これに対応し、図62のCに示す一時記憶idblでは、“appl1_db”、“appl2_db”、“appl3_db”・・・が保存されている。
【0307】
図63は、一時記憶itbl2の構成およびデータベースのテーブル構成を示している。一時記憶itbl2はメインメモリ上に配置され、リスト構造を持っている。この一時記憶itbl2には同期対象装置のデータベース名で指定されたデータベースに含まれるテーブル名が保存される。
【0308】
図63のAに示す一時記憶itbl2では“データベース名1”、“データベース名2”、“データベース名3”・・・が保存されている。
【0309】
図63のBに示す同期対象装置のデータベースの構成例では、“appl1_db" (アプリ1用データベース)は内部に2つのテーブル“aaa_tbl”、“、bbb_tbl”を持っている。“appl2_db" (アプリ2用データベース)は内部に2つのテーブル“ccc_tbl”、“ddd_tbl”を持っている。“appl3_db" (アプリ3用データベース)は内部に2つのテーブル“eee_tbl”、“fff_tbl”を持っている。
【0310】
図64は一時記憶itbl2の初期化および内容を示している。図64のAに示す一次記憶idblは初期動作でデータベース名“appl1_db”、“appl2_db”“appl3_db”を備えている。これに対し、一時記憶itbl2では、先頭のデータベースのテーブル名をコピーし、テーブル名が“aaa_tbl”、“bbb_tbl”になる。
【0311】
図64のBは一次記憶itbl2の初期化動作と内容の例2であり、一次記憶idblが初期動作でデータベース名“appl2_db”、“appl3_db”を備えている。これに対し、一次記憶itbl2では、先頭のデータベースのテーブル名をコピーし、テーブル名が“ccc_tbl”、“ddd_tbl”になる。
【0312】
図64のCは一次記憶itbl2の初期化動作と内容の例3であり、一次記憶idblが初期動作でデータベース名“appl3_db”を備えている。これに対し、一次記憶itbl2では、先頭のデータベースのテーブル名をコピーし、テーブル名が“eee_tbl”、“fff_tbl”になる。
【0313】
<一時記憶ircl:取得したitbl2から条件抽出したレコード>
【0314】
図65は一時記憶irclの構成、レコード構成を示している。
【0315】
一時記憶irclは、メインメモリ上に配置され、リスト構造を持っている。この一時記憶irclには指定されたテーブルに含まれるレコードからの抽出結果が保存される。
【0316】
図65のAに示す一時記憶irclには、“レコード1”、“レコード2”、“レコード3”・・・が保存されている。
【0317】
図65のBに示すレコード構成では、“id”、“mid”、“data”を備えている。
【0318】
図66は一時記憶itbl2および一時記憶irclの内容を示している。図66のAに示す一時記憶itbl2には日時情報やデータ内容が格納されている。
【0319】
図66のBに示す一時記憶irclには日時情報やデータ内容が格納されている。これは、2011/05/01 09:00:00が最終同期日時であり、同期先mid=mid2の場合に、図66のAに示すitbl2から条件抽出して得られる。
【0320】
<インタフェース別登録ホスト>
【0321】
図67はインタフェース別登録ホストの構成例、レコードの構成例および内容を示している。
【0322】
インタフェース別登録ホストは、通常データベース上に保存されるデータベースでありテーブル・レコード構造を持っている。
【0323】
図67のAはインタフェース別登録ホストの構成を示している。インタフェース別登録ホストには“レコード1”、“レコード2”、“レコード3”・・・を備えている。
【0324】
図67のBはインタフェース別登録ホストのレコードの構成を示している。このインタフェース別登録ホストでは、インタフェース、ホスト名1、MACアドレス1を備えている。
【0325】
図67のCは既述の図49および図50の例を元にしたインタフェース別登録ホストの内容を示している。
【0326】
このインタフェース別登録ホスト・・には、“ワイヤレスネットワーク接続”に対して“host01”および“host02”が存在し、“host01”は“111111111111”、“host02”は“222222222222”である。
【0327】
また、“host03”、“host04”および“host05”が存在し、“host03”は“ローカルエリア接続1”、“host04”および“host05”は“ローカルエリア接続2”を構成している。各“host03”の内容は“333333333333”であり、“host04”の内容は“444444444444”であり、また、“host05”の内容は“555555555555”である。
【0328】
<他の装置の間でmidを一致させるメカニズム>
【0329】
(1) 汎用一意識別子(UUID)方式(内部・外部共通)
【0330】
レプリケーション機能を搭載する機器の初期設定時に汎用一意識別子(UUID)を生成し、これを当該機器のmidとする方法がある。各機器の内部利用、外部への通信ともUUIDを利用する。16バイト(128ビット)の数値で表現され、他の機器と重複しないことが期待できる。
【0331】
汎用一意識別子(Universally Unique Identifier :UUID)とは、DCE(Distributed Computing Environment )の一部としてOSF(Open Software Foundation)が標準化した一意に識別するための識別子である。UUIDは、分散システム上でどこかが統制を取らずとも、一意に特定可能な識別子の作成を目的としている。このUUIDは重複や偶然の一致が起こりえないと確信して用いることができる。なお、UUIDの実装として最も広く使われているのは、グローバル一意識別子(Globally Unique Identifier:GUID:マイクロソフト)である。
【0332】
UUIDは16バイトの数値で表され、「550e8400−e29b−41d4−a716−446655440000」のように表現する。よく利用されるのは乱数に基づくUUID(UUID version 4)で、この形式のUUIDは2122通り(およそ5.3×1036通り)存在する。
【0333】
UUIDはISO/IEC 11578:1996 Information technology−−Open Systems Interconnection−−Remote Procedure Call :RPC)の一部として文書化されている。なお、IETFはUUIDに関してRFC4122を公開している。
【0334】
(2) 汎用一意識別子(UUID)方式(内部コード変換方式)
【0335】
本機能を搭載する機器の初期設定時にUUIDを生成して、装置間で情報交換する際はこのUUIDを利用し、機器の内部では例えば、32ビットで表現する内部コードに変換する。
【0336】
図68はUUID・内部コード変換方式の構成を示している。ホスト装置(ホスト1)40−1およびホスト装置(ホスト2)40−2の内部コードを32ビットとし、これらホスト40−1、40−2間では128ビットの交換用符号としてUUIDを生成し、LANにより内部コードを変換する。
【0337】
<レプリケーションの例>
【0338】
このようなレコードのレプリケーションはたとえば、図69に示す複数の情報処理端末間のメッセージデータの送受信に利用可能である。図69に示す同期制御システム2では一例として利用者P1が持つ情報処理端末4−1、利用者P2が持つ情報処理端末4−2、利用者P3が持つ情報処理端末4−3がネットワーク6によって接続されている。情報処理端末4−1にはレコード112−1があり、情報処理端末4−2にはレコード112−2があり、情報処理端末4−3にはレコード112−3があるとする。これらレコード112−1、112−2、112−3は更新時刻を識別情報とし、この識別情報を構成する更新時刻が一致している場合を想定する。
【0339】
この場合、情報処理端末4−1が情報処理端末4−2、4−3と接続によって同期され、レプリケーションを実行したとする。更新時刻が一致しているレコード112−2、112−3は、衝突回避処理の更新時刻がインクリメントにより変更され、ユニークな識別情報に変更される。この結果、情報処理端末4−1は情報処理端末4−2からレコード112−2、情報処理端末4−3からレコード112−3を取得し、異なる更新時刻からなる識別情報により識別されて保存される。
【0340】
このような構成によれば、各利用者P1、P2、P3が個別にメッセージを送り、応答メッセージを受信することができる。たとえば、利用者P1、P2、P3間でのテキストデータなど、メッセージ送受信に利用可能であり、厳密な日時は必要ではないが、大体の時刻がわかればよいなどの状況でのレコードのレプリケーションに利用できる。
【0341】
〔第2の実施の形態の特徴または効果〕
【0342】
(1) 各機器のレコードの主キーとして更新時刻を設定し、データの複写(レプリケーション)時に、その更新時刻が衝突していた場合は、相手から提供されるデータの更新時刻をインクリメントして自分のデータとして複写し、相手の機器が自分のデータを複写して保持する場合は、相手の機器が提供されたデータの更新時刻をインクリメントして保持することによって、各々のデータベース上のデータを複写し合う。
【0343】
(2) この処理方法を採用すると、データの識別フィールドをプラスする必要がなくなり、結果としてデータの量を少なくでき、また、衝突データの識別のために時間データをずらすという簡単な手法の為、処理時間の短縮を図ることが可能となる。
【0344】
(3) これにより、携帯型機器のようなストレージの小さく、かつ、プロセッサ能力の小さな機器でも効率よくデータの複写をすることが可能となる。
【0345】
(4) データを更新した装置の識別子と、データの競合発生時の解決方法を指定する識別子を有する。接続先装置が自装置以外の他装置に関する最新のデータを保持している場合は、当該データで自装置のデータをアップデートする。更新時刻をレコードIDに用いて、他装置で同一時刻に同一レコードが更新された場合は、アプリケーションに影響を与えない時刻範囲内で更新時刻を変更することによりユニークなIDに変更し、データの整合性を確保している。
【0346】
(5) インターネット接続がないか、インターネットと切断された家庭内ネットワークにおいても、家庭内ネットワークに接続した複数の情報機器同士でデータやサービスを同期したり共用できる。特に、動的Webページの同期・共用という新機能を提供することができる。
【0347】
(6) 既述の“date”、“value”、“mid”列はテーブルの各行を完全に一意に識別できない場合にも、プライマリキーとして列を追加する必要は生じない。つまり、既述の整合性制約は生じない。この整合性制約はデータベースでのデータの整合性に関するものである。つまり、整合性制約は、データベースが備えねばならない整合性の条件を実現するものであり、特にデータそのものの性質に基づく整合性についてのものである。たとえば、ある関係モデルにおいて、ある属性が一意性を保っていなければならないという条件があるとすれば、それは整合性制約で実現される。これに対し、データベースのトランザクション制御などで並行処理を行なうことによって保たねばならないようなものは一貫性制約と呼ばれる。一意性制約、参照制約、検査制約などが整合性制約の一つである。
【0348】
(7) 既述の“ORDER BY”で1つの列の指定で、並び順が安定した出力結果を得られる。つまり、従来のようなORDER BYで2つ以上の列を指定する必要はなく、SQL実行の都度、出力結果の並び順が不定になる不都合は生じない。
【0349】
(8) 記憶容量やSQL実行時間を削減できる。つまり、列が増えること、およびORDER BY列で2つ以上の列を指定する必要はなく、記憶容量を増加することなく、また、SQL実行時間の増加はない。
【0350】
(9) dateフィールドの内容をユニーク化するので、プライマリキー列として利用できる。
【0351】
〔他の実施の形態〕
【0352】
上記実施の形態では、同期が可能な電子機器としてデスクトップPC26、ノートPC36、スマートフォン34、タブレット端末38を例示したが、データ記憶機能を備え、通信接続により同期が可能であれば、これらの機器に限定されない。PDA(Personal Digital Assistant)、テレビ受像機、ゲーム機、カメラであってもよい。
【0353】
以上説明したように、本開示の情報処理装置、その同期制御プログラム、その同期制御方法および同期制御システムの最も好ましい実施の形態等について説明した。本発明は、上記記載に限定されるものではなく、特許請求の範囲に記載され、又は発明を実施するための形態に開示された発明の要旨に基づき、当業者において様々な変形や変更が可能であることは勿論である。斯かる変形や変更が、本発明の範囲に含まれることは言うまでもない。
【符号の説明】
【0354】
2 同期制御システム
4−1、4−2、4−3 情報処理端末
6 ネットワーク
8 通信部
10 メモリ
12 プロセッサ
【特許請求の範囲】
【請求項1】
無線または有線により接続される接続先装置が保存するデータと同期を行う情報処理装置であって、
前記接続先装置からデータを取得する通信手段と、
データを格納する記憶手段と、
前記接続先装置から取得したデータの識別情報と前記記憶手段にあるデータの識別情報とを比較し、各識別情報が一致すれば、いずれか一方の識別情報をユニークな識別情報に変更し、これら識別情報とともに各データを前記記憶手段に格納する処理手段と、
を備えることを特徴とする情報処理装置。
【請求項2】
前記識別情報はデータ更新時刻であり、前記ユニークな識別情報は前記データ更新時刻と異なる時刻情報であることを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記処理手段は、前記接続先装置が前記記憶手段に無いデータを保持している場合には該データを前記記憶手段にある前記データに複写し、同一の更新時刻からなる識別情報を持つデータを複写する場合には該更新時刻を変更することによりユニークな識別情報として前記接続先装置との間で各データを整合させることを特徴とする請求項1または2に記載の情報処理装置。
【請求項4】
前記記憶手段は、前記データを格納するデータテーブルと、前記接続先装置との同期情報を格納する同期管理テーブルとを備えることを特徴とする請求項1、2または3のいずれかに記載の情報処理装置。
【請求項5】
無線または有線により接続される接続先装置が保存するデータと同期を行う情報処理装置に実行させる同期制御プログラムであって、
前記接続先装置から取得したデータの識別情報と記憶手段にあるデータの識別情報とを比較し、
各識別情報が一致すれば、いずれか一方の識別情報をユニークな識別情報に変更し、これら識別情報とともに各データを前記記憶手段に格納し、
処理を前記情報処理装置に実行させる同期制御プログラム。
【請求項6】
接続先装置が保存するデータと同期を行う同期制御方法であって、
前記接続先装置から取得したデータの識別情報と記憶手段にあるデータの識別情報とを比較し、
各識別情報が一致すれば、いずれか一方の識別情報をユニークな識別情報に変更し、これら識別情報とともに各データを前記記憶手段に格納する、
ことを特徴とする同期制御方法。
【請求項7】
無線または有線により接続される接続先装置が保存するデータと同期を行う同期制御システムであって、
前記接続先装置からデータを取得する通信手段と、
データを格納する記憶手段と、
前記接続先装置から取得したデータの識別情報と前記記憶手段にあるデータの識別情報とを比較し、各識別情報が一致すれば、いずれか一方の識別情報をユニークな識別情報に変更し、これら識別情報とともに各データを前記記憶手段に格納する処理手段と、
を備えることを特徴とする同期制御システム。
【請求項1】
無線または有線により接続される接続先装置が保存するデータと同期を行う情報処理装置であって、
前記接続先装置からデータを取得する通信手段と、
データを格納する記憶手段と、
前記接続先装置から取得したデータの識別情報と前記記憶手段にあるデータの識別情報とを比較し、各識別情報が一致すれば、いずれか一方の識別情報をユニークな識別情報に変更し、これら識別情報とともに各データを前記記憶手段に格納する処理手段と、
を備えることを特徴とする情報処理装置。
【請求項2】
前記識別情報はデータ更新時刻であり、前記ユニークな識別情報は前記データ更新時刻と異なる時刻情報であることを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記処理手段は、前記接続先装置が前記記憶手段に無いデータを保持している場合には該データを前記記憶手段にある前記データに複写し、同一の更新時刻からなる識別情報を持つデータを複写する場合には該更新時刻を変更することによりユニークな識別情報として前記接続先装置との間で各データを整合させることを特徴とする請求項1または2に記載の情報処理装置。
【請求項4】
前記記憶手段は、前記データを格納するデータテーブルと、前記接続先装置との同期情報を格納する同期管理テーブルとを備えることを特徴とする請求項1、2または3のいずれかに記載の情報処理装置。
【請求項5】
無線または有線により接続される接続先装置が保存するデータと同期を行う情報処理装置に実行させる同期制御プログラムであって、
前記接続先装置から取得したデータの識別情報と記憶手段にあるデータの識別情報とを比較し、
各識別情報が一致すれば、いずれか一方の識別情報をユニークな識別情報に変更し、これら識別情報とともに各データを前記記憶手段に格納し、
処理を前記情報処理装置に実行させる同期制御プログラム。
【請求項6】
接続先装置が保存するデータと同期を行う同期制御方法であって、
前記接続先装置から取得したデータの識別情報と記憶手段にあるデータの識別情報とを比較し、
各識別情報が一致すれば、いずれか一方の識別情報をユニークな識別情報に変更し、これら識別情報とともに各データを前記記憶手段に格納する、
ことを特徴とする同期制御方法。
【請求項7】
無線または有線により接続される接続先装置が保存するデータと同期を行う同期制御システムであって、
前記接続先装置からデータを取得する通信手段と、
データを格納する記憶手段と、
前記接続先装置から取得したデータの識別情報と前記記憶手段にあるデータの識別情報とを比較し、各識別情報が一致すれば、いずれか一方の識別情報をユニークな識別情報に変更し、これら識別情報とともに各データを前記記憶手段に格納する処理手段と、
を備えることを特徴とする同期制御システム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図34】
【図35】
【図36】
【図37】
【図38】
【図39】
【図40】
【図41】
【図42】
【図43】
【図44】
【図45】
【図46】
【図47】
【図48】
【図49】
【図50】
【図51】
【図52】
【図53】
【図54】
【図55】
【図56】
【図57】
【図58】
【図59】
【図60】
【図61】
【図62】
【図63】
【図64】
【図65】
【図66】
【図67】
【図68】
【図69】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図24】
【図25】
【図26】
【図27】
【図28】
【図29】
【図30】
【図31】
【図32】
【図33】
【図34】
【図35】
【図36】
【図37】
【図38】
【図39】
【図40】
【図41】
【図42】
【図43】
【図44】
【図45】
【図46】
【図47】
【図48】
【図49】
【図50】
【図51】
【図52】
【図53】
【図54】
【図55】
【図56】
【図57】
【図58】
【図59】
【図60】
【図61】
【図62】
【図63】
【図64】
【図65】
【図66】
【図67】
【図68】
【図69】
【公開番号】特開2013−88855(P2013−88855A)
【公開日】平成25年5月13日(2013.5.13)
【国際特許分類】
【出願番号】特願2011−225887(P2011−225887)
【出願日】平成23年10月13日(2011.10.13)
【出願人】(000005223)富士通株式会社 (25,993)
【公開日】平成25年5月13日(2013.5.13)
【国際特許分類】
【出願日】平成23年10月13日(2011.10.13)
【出願人】(000005223)富士通株式会社 (25,993)
[ Back to top ]