5

私は独自の SQL に相当するもの (DDL+DML) を設計および実装することを考えています...

  1. 純粋なリレーショナル代数言語、および
  2. 洗練された Lisp/Scheme ライクな構文を持つ

MySQL などの RDBMS を想定すると、言語設計作業をどこから開始する必要があるでしょうか? InnoDB などのストレージ エンジン層の上に?

すべての RDBMS 機能が一般的にストレージ エンジンの上にあることを知りませんか? 私の現在の直感的な理解では、RDBMS (MySQL など) を作成するために必要な作業の大部分は、ストレージ エンジン内 (具体的には InnoDB) で既に行われており、必要なのはラッパー言語を作成することだけです。それ。しかし、それが本当なら、そもそもなぜ MySQL が存在するのだろうということも知っています!

4

4 に答える 4

9

実際にLispで書くなら、それほど時間はかからないはずです。Lisp で簡単なデータベース エンジンを約 1 日の午後で作成しました。これがどのように見えるかの例です:

(select movies (<= 1990 year 2000) (member director '(terry-gilliam tim-burton)))

ここで、'select' はマクロです。それに続く述語をスキャンして、フィールド名であるシンボルを探し、それらをデータベース内のフィールドにバインドします。次に、これらのフィールドを関数に渡されたレコードの値にバインドする関数を記述し、その関数を使用してテーブルをフィルター処理します。マクロは次のように展開されます。

(flet ((filter (item)
        (let ((year (movie-year item))
              (director (movie-director item)))
         (and (<= 1990 year 2000)
              (member director '(terry-gilliam tim-burton))))))
 (loop for item in movies
       if (filter item) collect item))

このように (Lisp のような構文を使用するのではなく、実際には Lisp で) 行うことの優れた点は、無料でコンパイルできることです。私のシステムでは、上記のコードはデータベース エンジンによって解釈されず、実際にはプログラムのコンパイルされた部分です (C ではそれができませんが、できるようになりましたか?)。その結果、データベース コード自体 ('select' とテーブル定義のコード) の長さは数行しかありませんが、高速です。データベースは完全にメモリ常駐ですが、問題ではありません...外部データベースに対応するようにマクロを変更し、インデックスを使用するように記述することもできます。私が取り組んでいたプロジェクトにはそれで十分だったので、インデックスや凝ったものは追加しませんでした。

それについての私のお気に入りの部分は、SQL のすべての簡潔さを保ちながら、すべてが Lisp であるため、コードはその周りのコードと変わらないということです。変数を引用することを心配することなく、変数を検索語に導入できます。

于 2009-06-01T07:21:53.907 に答える
5

これを回避する最善の方法は、言語と SQL の間のトランスレータを作成することだと思います。主な理由は、rdbms から SQL ダイアレクトを介して提供される機能よりも多くの機能を取得できないためです。

MySQL の存在は、ストレージエンジンによって行われる作業の難しさとは何の関係もありません。そのエンジン。

ほとんどの rdbm はストレージ エンジンをユーザー/管理者に公開しないため、その点で MySQL はややユニークであり、トランスレータを作成する方が合理的です。そのため、(いくつかの構文規則を変更することによって) 複数の rdbms を使用できます。あなたのアプリを介して。

さらに、既存のデータベース テクノロジで純粋なリレーショナル言語を生成することはおそらくできないでしょう。詳細については、 The Third Manifestoを確認してください。

そうは言っても、私は最初に既存のすべてのSQLラッパーを実際に調べます.おそらくいくつかはあなたの好みに合うでしょう.

于 2009-06-01T05:54:32.803 に答える
1

Practical Common Lisp では、このは Music データベースへのシンプルな RDBS スタイルのインターフェイスを目指しています。役立つかもしれません。

于 2009-06-01T11:25:06.037 に答える
1

多くの rdbms 製品は、伝統的に isam パッケージで構築されてきました。mysql は明らかな例です。それらはすべて、テーブルとインデックスの指定、行の反復などのレベルで動作します。読み取り、書き込み、ロックなどを処理するための基本的な機能を備えています。

さらに、ほとんどの isam 製品は、競争上の理由から、SQL 層を上に追加する必要がありました。SQL レイヤーが利用できる可能性のある例については、それらをグーグルで検索し始めることができます。

于 2009-06-01T06:37:22.590 に答える