XMLDBの導入 (Dev docs)

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

XMLDBドキュメンテーション > 導入


Moodle 1.7の主な機能の1つは、MySQLPostgreSQLの両方で正しく動作することを維持しながら、さらにいくつかのRDBMS (MSSQLOracle) で動作できるようにしたものでした。Moodleコアは内部でADOdbを使用しているので、この可能性は最初からありました。そして、現在のプロジェクトの成熟度 (5歳の赤ちゃんです!) では、このすべてを整理する良いタイミングになるでしょう。

当初、私たちのテストと予備作業は、ADOdbがどのように動作しているか、そして、SQL方言がかなり似ているものの、いくつかの違いと特異性がある4つのRDBMSをどのように混ぜることができるかを調べることでした。その結果、現在のデータベースコード(旧 datalib.php )とそれがMoodleの残りの部分で使用されている方法にいくつかの重要な変更を行うことを強いられました。

Moodle がより多くの RDBMS と連携できるようにすることが主な目的である、実行するすべての変更は、次の非機能要件に従って実行する必要があります:

  • DBの作成/アップグレードに1つのレイヤー (新規) を提供する (DDL): これにより、開発者は、各RDBMSが使用する正確な実装に依存しない、一つの中立的な形式で構造を作成することができます。
  • DBの処理に1つのレイヤー (既存) を提供する (DML): これにより、開発者は、使用するRDBMSに依存しない中立的な形式で情報を要求/保存することができます。
  • 旧バージョンからの簡単な移行パス: 現在のインストール/アップグレードシステムは、少なくともMoodle 2.0までは機能し、サードパーティの開発者が新しいシステムに移行することを可能にします。
  • シンプルで、使い勝手がよく、効果的: 今まで、Moodleのアップグレード方法は、本当にクールで、最初からかなりうまくいっていました。しかし、これによって開発者は、各モジュール/プラグインについて、少なくとも2つのインストールスクリプトと2つのアップグレードスクリプトを維持することを余儀なくされています。新しい代替案では、インストールとアップグレードのためのファイルは(モジュール/プラグインごとに)1つだけとなり、間違いの可能性は劇的に減少します。
  • 条件付きコードの使用は最小限にする: データベースライブラリは、潜在的なSQL文の99%を受け入れ、どのRDBMSでも適切に動作するように必要に応じて構築/変換する必要があります。カスタムコード(DBごと)を使用する箇所は最小限でなければなりません。
  • 十分なドキュメント: DMLとDDLレベルで定義されたすべての関数は、開発者がそれぞれの状況に応じて正しい関数を見つけ、使用できるように、きちんと文書化されていなければなりません。

スタック

次のスタックは、Moodle 1.7コードが基礎となるRDBMSとどのように相互作用するかを示しています。これは、私たちが何をしようとしているのか、また、ロードマップ (このページの下) で関連するいくつかの点を説明するのに役立ちます。

MoodleDBStack.png

Moodleのコードは、DBアクションを実行するために2つの 言語 を使用します:

  • XMLDBニュートラルディスクリプションファイル: データベースオブジェクトの作成、変更、削除(DDL: テーブル、フィールド、インデックス、制約の作成/変更/削除...)を行うためのもの。検証された標準的なXMLファイルの集まりで構成されています。これらは、すべてのDBオブジェクトを定義するために使用されます。1.7 の新機能です。
  • Moodle SQLニュートラルステートメント: データベース情報の追加、変更、削除、選択(DML: レコードの挿入/更新/削除/選択)。1.7用に修正します。

上記の表現で使われている ニュートラル というキーワードに注意してください。これは、どちらの 言語 も、使用するRDBMSに依存せず、100%同じになることを意味します。そして、これは特にXMLDBの部分について言えることです。

もちろん、SQLの部分で特殊なクエリ (複雑な結合、正規表現など) があり、例外 が発生する可能性はあります。しかし、我々は常に、ニュートラル (中立的) なステートメントと標準ライブラリを使って、例外を最小化するための代替パスを提供するように努めなければなりません。

上記の各 言語 は、独自のライブラリを使って作業を行います:

  • Moodle DDLライブラリ (ddllib.php): DBオブジェクトを扱うために必要なすべての関数が存在する場所です。このライブラリは 1.7 の新機能で、開発者に高い抽象度を提供します。入力として、よく定義されたオブジェクトとアクションを受け取り、使用するRDBMSのために適切なコマンドを実行します。
  • Moodle DMLライブラリ (dmllib.php): DB の内容を処理するために必要なすべての関数が存在する場所です。このライブラリは1.7で新たに追加されましたが、その内容は基本的に現在 datalib.php に存在する関数です (そこから移動されました)。これらのDML関数はすべて、共通の動作を使用する挿入/更新/削除/選択ステートメントのためのクロスDBサポートを提供します。

また、datalib.php は上記のスキーマの中にまだ存在していることに注意してください。これは、新しい ddllib.phpdmllib.php ライブラリに移動していないすべての関数を含んでいます。 いくつかの共通機能のみがそこに残り、これらの機能は次期 Moodle リリース (1.7以降) で適切なライブラリ (course/lib.php, user/lib.php...) に移動することにより、消滅します (レガシーライブラリとみなされる)。

これらのライブラリ (と小さな 例外 バー) はすべて ADOdb PHP用データベース抽象化ライブラリ を使用して動作します。このライブラリは、ライブラリからのすべてのリクエストを受け取り、 DB (MySQL, PostgreSQL, Oracle あるいは SQL*Server) と通信して結果を受け取り、それを元のライブラリに返します。

プロセス

このセクションでは、新しいXMLDBレイヤーの 設計と実装のプロセス に関する情報の主要な領域を指摘しています:

  • ロードマップ: プロセス全体が定義されているところです。簡単に実行・テストできるように、小さな塊に分割されています。また、このような文書は、簡単な命名法を使いながら、何が完了し、何が保留になっているかを追跡するために使用されるべきです。
  • 問題: ロードマップに組み込む前に決定/解決する必要がある問題の包括的なリストです。

ドキュメンテーション

このセクションは、実装されたXMLDBに関する 主なドキュメントの索引 を指します:

関連項目

XMLDB関連

  • XMLDBの予備リンク - プロジェクトの初期段階で検索・分析した一般情報についてのリンク集です。
  • XMLDBの予備知識 - プロジェクトの初期段階において、必要な変更や解決すべき問題を指摘するメモを集めたものです。

データベース関連

  • DDL関数 - Moodle内で利用可能なすべてのデータ定義言語 (DDL) 関数に関するドキュメントです。
  • DML関数 - Moodle内で利用可能なすべてのデータ操作言語 (DML) 関数に関するドキュメントです。