XMLDBイントロダクション

提供:MoodleDocs
移動先:案内検索


作成中です - Mitsuhiro Yoshida (トーク)

Moodle 1.7における新しい主要な機能は MySQL および PostgreSQL ですべてが正常に動作するよう管理されてきたのに対して、 さらにいつくかの RDBMS (MSSQL および Oracle) でも動作するようになったことです。Moodleコアは内部的にADOdbを使用していたため、この機能は当初より存在していました。現在のプロジェクトの成熟度 (5歳です!) を考えて、すべてを整理する良い機会だと思います。

I当初、私たちのすべてのテストおよび事前作業は内部的には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と相互作用するのか表示します。これは私たちが試そうとしていることに対する理解を少しだけ手助けします。また、ロードマップ (以下のページ) の一部を説明します。

MoodleDBStack.png

Moodleコードはデータベース操作を実行するため2つの「言語」を使用します:

  • XMLDB中間説明ファイル: データベースオブジェクトを作成、修正および削除するため (DDL: テーブル、フィールド、インデックス、制約等の作成/変更/ドロップ)。これは有効な標準XMLファイルで構成されます。また、すべてのデータベースオブジェクトの定義に使用されます。Moodle 1.7の新機能です。
  • Moodle SQL中間説明ファイル: データベース情報を追加、修正削除および選択するため (DML: レコードの追加/更新/削除/選択)。Moodle 1.7で更新されます。

上で使用されているキーワード「中間」に留意してください。基本的なデータベース使用の独立性に関して両「言語」は100%同じ意味です。そして、特にXMLDPの部分に関して明確に同じ意味です。

明らかに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レイヤーの「設計および実装の手順」に関する情報の主要部分に焦点を当てます。

  • ロードマップ: 全体の手順が定義されています。手順は小さな部分に分けられているため、簡単に実行およびテストできます。また、このようなドキュメントでは簡単な用語を使用しているため、何を完了して、何を完了していないのか追跡するためにも使用できます。
  • 問題: ロードマップに取り込む前に決断または解決すべき問題の総合一覧です。

ドキュメンテーション The documentation

このセクションでは実装済みXMLDBに関する「主ドキュメンテーションインデックス」に焦点を当てます:

  • Documentation: Where you'll find quick links to different parts of the XMLDB documentation.
  • ドキュメンテーション: XMLDBドキュメンテーションの異なる部分へのクイックリンク集です。Where you'll find quick links to different parts of the XMLDB documentation.

関連情報

XMLDB関連

  • XMLDB preliminary links - A collection of links about general info, searched and analysed at the initial stages of the project
  • XMLDB preliminary notes - A collection of notes collected in the early stages of this project, pointing both to some changes required and some problems to solve.

データベース関連

  • DDL functions - Documentation for all the Data Definition Language (DDL) functions available inside Moodle.
  • DML functions - Documentation for all the Data Manipulation Language (DML) functions available inside Moodle.