「XMLDBイントロダクション」の版間の差分
Mitsuhiro Yoshida (トーク | 投稿記録) |
Mitsuhiro Yoshida (トーク | 投稿記録) (→スタック) |
||
(同じ利用者による、間の45版が非表示) | |||
1行目: | 1行目: | ||
__NOTOC__ | __NOTOC__ | ||
Moodle 1.7における新しい主要な機能は[[MySQL]]および[[PostgreSQL]]ですべてが正常に動作するよう管理されてきたのに対して、 さらにいつくかの[[wikipedia:RDBMS|RDBMS]] [[wikipedia:MSSQL|MSSQL]]および[[wikipedia:Oracle database|Oracle]]) でも動作するようになったことです。Moodleコアは内部的に[http://adodb.sourceforge.net/ ADOdb]を使用していたため、この機能は当初より存在していました。現在のプロジェクトの成熟度 (5歳です!) を考えた場合、すべてを整理する良い機会だと思います。 | |||
当初、私たちのすべてのテストおよび事前作業は内部的には[http://adodb.sourceforge.net/ ADOdb]がどのように動作するのか、SQLに方言を持つ4種類のRDBMSをどのように統合できるか、そして残りのMoodle内でどのように使用されるか調査するためのものでした。すべてのSQLは極めて類似していますが、私たちの現在のデータベースコード (以前は「datalib.php」) を変更せざるを得ない異なる部分および独自性がありました。 | |||
実施されるすべての変更の第一の目的はMoodleがさらなるRDBMSでも動作可能にすることにあります。また、その変更は以下の非機能的要求を満たす必要があります: | |||
* '''1DB作成/アップグレードあたり1レイヤを提供する''' ([[wikipedia:Data_Definition_Language|DDL]]): これにより開発者は各RDBMSで使用される厳密な実装から独立した中立的な形で自分の構造を作成できます。 | |||
* '''DBハンドリングに1レイヤ (既存) を提供する''' ([[wikipedia:Data_Manipulation_Language|DML]]): これにより開発者は中立的および独立した形で使用されるRDBMSの情報をリクエスト/保存できます。 | |||
* '''DBハンドリングに1レイヤ (既存) を提供する''' ([[wikipedia:Data_Manipulation_Language|DML]]): | |||
* '''前のバージョンからの簡単な移行手順''': 現在のインストレーション/アップグレードシステムは少なくともサードパーティの開発者が新しいシステムに移行可能なMoodle 2.0までは動作します。 | * '''前のバージョンからの簡単な移行手順''': 現在のインストレーション/アップグレードシステムは少なくともサードパーティの開発者が新しいシステムに移行可能なMoodle 2.0までは動作します。 | ||
* '''単純、便利、効果的''': | * '''単純、便利、効果的''': Moodleのアップグレード方法は最初から極めて洗練され素晴らしく動作していました。しかし、これは開発者にモジュールおよびプラグインに関して2つのインストールおよびアップグレードスクリプトのメンテナンスを強制するものでした。新しい代替手段ではインストールおよびアップグレードに1つずつファイルを持つことを起因とする (モジュール/プラグインに関しても) ミスの発生する可能性を劇的に減らせました。 | ||
* '''条件付きコードの使用は最小限にすべき''': データベースライブラリは潜在的なSQL文を99%受け入れるため、RDBMSで適切に動作するよう必要に応じてSQL文を構築および変換してください。データベースごとのカスタムコードを使用する場所は最小限にしてください。 | * '''条件付きコードの使用は最小限にすべき''': データベースライブラリは潜在的なSQL文を99%受け入れるため、RDBMSで適切に動作するよう必要に応じてSQL文を構築および変換してください。データベースごとのカスタムコードを使用する場所は最小限にしてください。 | ||
* '''十分なドキュメント''': | * '''十分なドキュメント''': すべての定義済み関数はDMLおよびDDLレベルで十分にドキュメントを作成してください。ドキュメントにより開発者が様々な場面で正しい関数を探して使えるようにします。 | ||
== スタック == | |||
次のスタックはMoodle 1.7のコードが実装されているRDBMSとどのように相互作用するのか示します。これは私たちが試そうとしていることに対する理解を少しだけ手助けします。また、ロードマップ (以下のページ) の一部を説明します。 | |||
Moodleコードはデータベース操作を実行するために2つの「言語」を使用します: | |||
* '''XMLDB中間説明ファイル''': データベースオブジェクトを作成、修正および削除するため使用されます (DDL: テーブル、フィールド、インデックス、制約等の作成/変更/ドロップ)。これは有効な標準XMLファイルで構成されます。また、すべてのデータベースオブジェクトの定義に使用されます。Moodle 1.7の新機能です。 | |||
* '''Moodle SQL中間説明ファイル''': データベース情報を追加、修正削除および選択するため使用されます (DML: レコードの追加/更新/削除/選択)。Moodle 1.7で更新されます。 | |||
上で使用されているキーワード「中間」に留意してください。基本的なデータベース使用の独立性に関して両「言語」は100%同じ意味です。そして、特にXMLDBの部分に関して明確に同じ意味です。 | |||
明らかにSQLの部分において私たちは何らかの「例外」を強制するための特別なクエリ (複雑なJOIN、正規表現等) を見つけることができます。確かに特別クエリは存在できますが (実際に存在しますが)、私たちは常に中間説明および標準ライブラリを使用して特別クエリを最小化するための代替パスを提供すべきです。 | |||
上の各「言語」は動作するため独自ライブラリを使用します: | |||
* '''Moodle DDLライブラリ''' ([[DDL functions|ddllib.php]]): DBオブジェクトの処理に必要な関数すべてを含みます。このライブラリはMoodle 1.7の新しい機能であり、開発者に高いレベルの抽象化が提供されます。ライブラリは入力として正しく定義されたオブジェクトおよび操作を受け入れます。また、RDBMSで使用される適切なコマンドを実行します。 | |||
* '''Moodle DMLライブラリ''' ([[DML functions|dmllib.php]]):DBコンテンツの処理に必要な関数すべてを含みます。現在、コンテンツは基本的に'''datalib.php''に存在する関数ですが、このライブラリはMoodle 1.7の新しい機能です ('''datalib.php'''から移動)。これらすべてのDML関数はデータベース間でのinsert/update/delete/selectの一般的な構文を使用した命令文を提供します。 | |||
'''datalib.php'''は上のスキーマに存在したままであることに留意してください。これには新しい'''ddllib.php'''および'''dmllib.php'''ライブラリに移行されていない関数すべてを含みます。そこにはいくつかの一般的な関数のみ残されます。そして、次の'''Moodle'''リリース (1.7以降) でこれらの関数すべては適切なライブラリ (course/lib.php, user/lib.php....) に移行された後に消滅します。 | |||
これら両ライブラリ (および小さな'''例外'''バー) は'''PHPのADOdbデータベース抽出ライブラリ'''を使用してすべての操作を実行します。'''PHPのADOdbデータベース抽出ライブラリ'''はすべてのリクエストを受け付けてデータベース ('''MySQL''', '''PostgreSQL''', '''Oracle''' または '''SQL*Server''') との連携および結果を検索した後、オリジナルのライブラリに戻します。 | |||
== 手順 == | |||
このセクションでは新しいXMLDBレイヤの「設計および実装の手順」に関する情報の主要部分に焦点を当てます。 | |||
* [[XMLDBロードマップ|ロードマップ]]: 全体の手順が定義されています。手順は小さな部分に分けられているため、簡単に実行およびテストできます。また、このようなドキュメントでは簡単な用語を使用しているため、何を完了して、何を完了していないか追跡するためにも使用できます。 | |||
* [[XMLDB問題|問題]]: [[XMLDBロードマップ|ロードマップ]]に取り込む前に決断または解決すべき問題の総合一覧です。 | |||
== ドキュメンテーション == | |||
このセクションでは実装済みXMLDBに関する「主ドキュメンテーションインデックス」に焦点を当てます: | |||
* [[ | * [[XMLDBドキュメンテーション|ドキュメンテーション]]: XMLDBドキュメンテーションの異なる部分へのクイックリンク集です。 | ||
==関連情報== | ==関連情報== | ||
65行目: | 57行目: | ||
=== XMLDB関連=== | === XMLDB関連=== | ||
* [[ | * [[XMLDB準備リンク|XMLDB準備リンク]] - プロジェクトの初期段階における一般情報、検索および分析に関するリンク集です。 | ||
* [[ | * [[XMLDB準備ノート|XMLDB準備ノート]] - プロジェクトの初期段階における必要な修正および問題解決に関するノート集です。 | ||
=== データベース関連 === | === データベース関連 === | ||
* [[ | * [[DDL関数|DDL関数]] - Moodle内で利用可能なすべてのデータ定義言語 (Data Definition Language - DDL) のドキュメンテーションです。 | ||
* [[ | * [[DML関数|DML関数]] - Moodle内で利用可能なすべてのデータ操作言語 (Data Manipulation Language - DML) のドキュメンテーションです。 | ||
[[Category:XMLDB]] | [[Category:XMLDB]] | ||
[[en:Development:XMLDB_introduction]] | [[en:Development:XMLDB_introduction]] |
2020年8月17日 (月) 11:37時点における版
Moodle 1.7における新しい主要な機能はMySQLおよびPostgreSQLですべてが正常に動作するよう管理されてきたのに対して、 さらにいつくかのRDBMS MSSQLおよびOracle) でも動作するようになったことです。Moodleコアは内部的にADOdbを使用していたため、この機能は当初より存在していました。現在のプロジェクトの成熟度 (5歳です!) を考えた場合、すべてを整理する良い機会だと思います。
当初、私たちのすべてのテストおよび事前作業は内部的にはADOdbがどのように動作するのか、SQLに方言を持つ4種類のRDBMSをどのように統合できるか、そして残りのMoodle内でどのように使用されるか調査するためのものでした。すべてのSQLは極めて類似していますが、私たちの現在のデータベースコード (以前は「datalib.php」) を変更せざるを得ない異なる部分および独自性がありました。
実施されるすべての変更の第一の目的はMoodleがさらなるRDBMSでも動作可能にすることにあります。また、その変更は以下の非機能的要求を満たす必要があります:
- 1DB作成/アップグレードあたり1レイヤを提供する (DDL): これにより開発者は各RDBMSで使用される厳密な実装から独立した中立的な形で自分の構造を作成できます。
- DBハンドリングに1レイヤ (既存) を提供する (DML): これにより開発者は中立的および独立した形で使用されるRDBMSの情報をリクエスト/保存できます。
- 前のバージョンからの簡単な移行手順: 現在のインストレーション/アップグレードシステムは少なくともサードパーティの開発者が新しいシステムに移行可能なMoodle 2.0までは動作します。
- 単純、便利、効果的: Moodleのアップグレード方法は最初から極めて洗練され素晴らしく動作していました。しかし、これは開発者にモジュールおよびプラグインに関して2つのインストールおよびアップグレードスクリプトのメンテナンスを強制するものでした。新しい代替手段ではインストールおよびアップグレードに1つずつファイルを持つことを起因とする (モジュール/プラグインに関しても) ミスの発生する可能性を劇的に減らせました。
- 条件付きコードの使用は最小限にすべき: データベースライブラリは潜在的なSQL文を99%受け入れるため、RDBMSで適切に動作するよう必要に応じてSQL文を構築および変換してください。データベースごとのカスタムコードを使用する場所は最小限にしてください。
- 十分なドキュメント: すべての定義済み関数はDMLおよびDDLレベルで十分にドキュメントを作成してください。ドキュメントにより開発者が様々な場面で正しい関数を探して使えるようにします。
スタック
次のスタックはMoodle 1.7のコードが実装されているRDBMSとどのように相互作用するのか示します。これは私たちが試そうとしていることに対する理解を少しだけ手助けします。また、ロードマップ (以下のページ) の一部を説明します。
Moodleコードはデータベース操作を実行するために2つの「言語」を使用します:
- XMLDB中間説明ファイル: データベースオブジェクトを作成、修正および削除するため使用されます (DDL: テーブル、フィールド、インデックス、制約等の作成/変更/ドロップ)。これは有効な標準XMLファイルで構成されます。また、すべてのデータベースオブジェクトの定義に使用されます。Moodle 1.7の新機能です。
- Moodle SQL中間説明ファイル: データベース情報を追加、修正削除および選択するため使用されます (DML: レコードの追加/更新/削除/選択)。Moodle 1.7で更新されます。
上で使用されているキーワード「中間」に留意してください。基本的なデータベース使用の独立性に関して両「言語」は100%同じ意味です。そして、特にXMLDBの部分に関して明確に同じ意味です。
明らかにSQLの部分において私たちは何らかの「例外」を強制するための特別なクエリ (複雑なJOIN、正規表現等) を見つけることができます。確かに特別クエリは存在できますが (実際に存在しますが)、私たちは常に中間説明および標準ライブラリを使用して特別クエリを最小化するための代替パスを提供すべきです。
上の各「言語」は動作するため独自ライブラリを使用します:
- Moodle DDLライブラリ (ddllib.php): DBオブジェクトの処理に必要な関数すべてを含みます。このライブラリはMoodle 1.7の新しい機能であり、開発者に高いレベルの抽象化が提供されます。ライブラリは入力として正しく定義されたオブジェクトおよび操作を受け入れます。また、RDBMSで使用される適切なコマンドを実行します。
- Moodle DMLライブラリ (dmllib.php):DBコンテンツの処理に必要な関数すべてを含みます。現在、コンテンツは基本的にdatalib.phpに存在する関数ですが、このライブラリはMoodle 1.7の新しい機能です ('datalib.phpから移動)。これらすべてのDML関数はデータベース間でのinsert/update/delete/selectの一般的な構文を使用した命令文を提供します。
datalib.phpは上のスキーマに存在したままであることに留意してください。これには新しいddllib.phpおよびdmllib.phpライブラリに移行されていない関数すべてを含みます。そこにはいくつかの一般的な関数のみ残されます。そして、次のMoodleリリース (1.7以降) でこれらの関数すべては適切なライブラリ (course/lib.php, user/lib.php....) に移行された後に消滅します。
これら両ライブラリ (および小さな例外バー) はPHPのADOdbデータベース抽出ライブラリを使用してすべての操作を実行します。PHPのADOdbデータベース抽出ライブラリはすべてのリクエストを受け付けてデータベース (MySQL, PostgreSQL, Oracle または SQL*Server) との連携および結果を検索した後、オリジナルのライブラリに戻します。
手順
このセクションでは新しいXMLDBレイヤの「設計および実装の手順」に関する情報の主要部分に焦点を当てます。
- ロードマップ: 全体の手順が定義されています。手順は小さな部分に分けられているため、簡単に実行およびテストできます。また、このようなドキュメントでは簡単な用語を使用しているため、何を完了して、何を完了していないか追跡するためにも使用できます。
- 問題: ロードマップに取り込む前に決断または解決すべき問題の総合一覧です。
ドキュメンテーション
このセクションでは実装済みXMLDBに関する「主ドキュメンテーションインデックス」に焦点を当てます:
- ドキュメンテーション: XMLDBドキュメンテーションの異なる部分へのクイックリンク集です。
関連情報
XMLDB関連
- XMLDB準備リンク - プロジェクトの初期段階における一般情報、検索および分析に関するリンク集です。
- XMLDB準備ノート - プロジェクトの初期段階における必要な修正および問題解決に関するノート集です。