161

データベース エンジンがどのように機能するか (つまり、その内部) を学ぶことに興味があります。私は、CS で教えられている基本的なデータ構造 (ツリー、ハッシュ テーブル、リストなど) のほとんどを知っているだけでなく、コンパイラ理論についてもかなりよく理解しています (非常に単純なインタープリターを実装しています)。データベース エンジンの作成について。この件に関するチュートリアルを検索しましたが、何も見つからなかったので、他の誰かが私を正しい方向に向けてくれることを願っています. 主に以下の情報をお願いします。

  • データが内部でどのように保存されているか (つまり、テーブルがどのように表現されているかなど)
  • エンジンが必要なデータを見つける方法 (例: SELECT クエリの実行)
  • 高速かつ効率的な方法でデータを挿入する方法

また、これに関連する可能性のあるその他のトピック。オンディスク データベースである必要はありません。その背後にあるプリンシパルを学びたいだけなので、インメモリ データベースでも問題ありません (簡単であれば)。

助けてくれて本当にありがとうございます。

4

9 に答える 9

66

コードを読むのが得意なら、SQLite を勉強することで、データベース設計について大量に学ぶことができます。小さいので、頭を包み込みやすいです。しかし、それはまた専門的に書かれています。

http://sqlite.org/

于 2009-06-27T05:56:25.083 に答える
27

この質問に対する答えは非常に大きいです。PHD 論文では 100% の回答が得られることを期待してください ;) しかし、問題を 1 つずつ考えることができます。

  • データを内部に保存する方法: データベース オブジェクトを含むデータ ファイルと、フォーカスのあるデータとその周囲のデータを RAM にロードするためのキャッシュ メカニズムが必要です。列区切り記号と行区切り記号の定義に同意し、そのような区切り記号のパターンがデータ自体で使用されないようにすることで、このテーブルをバイナリ ファイルに変換します。たとえば、列を区切るために <*> を選択した場合、このテーブルに配置するデータにこのパターンが含まれていないことを検証する必要があります。行のサイズと内部インデックス番号を指定して検索を高速化し、各列の先頭に「Adam」、1、11.1、 "

  • アイテムをすばやく見つける方法ハッシュとインデックスを使用して、上記と同じ例を使用して、さまざまな基準に基づいて保存およびキャッシュされたデータを指すようにしてください。最初の列の値をソートし、アルファベット順にソートされたアイテムの行 ID を指す別のオブジェクトに格納できます。 、 等々

  • 私がOracleから知っている挿入データを高速化する方法は、RAMとディスクの両方の一時的な場所にデータを挿入し、定期的にハウスキーピングを行うことです.データベースエンジンは常にビジーで構造を最適化していますが、同時にそのようなものの停電の場合にデータを失いたいです。したがって、ソートせずにこの一時的な場所にデータを保持し、元のストレージを追加し、後でシステムが解放されたら、インデックスを再ソートし、完了したら一時領域をクリアしてください

がんばれ、素晴らしいプロジェクト。

于 2009-06-27T06:03:34.760 に答える
14

開始するのに適したトピックに関する書籍があります。 データベース システム:ガルシア モリーナ、ウルマン、ウィドムによる完全な本

于 2009-06-27T05:55:34.727 に答える
12

SQLite については前述しましたが、追加したいことがあります。

私自身、SQLite を勉強することで多くのことを学びました。興味深いのは、ソース コードにアクセスしていないことです (ただし、簡単に調べただけです)。技術資料を読んで、それが生成する内部コマンドを特に見て、多くのことを学びました。内部には独自のスタックベースのインタープリターがあり、Explain を使用するだけで内部的に生成された P コードを読み取ることができます。このように、さまざまな構造が低レベル エンジンにどのように変換されるかがわかります (これは驚くほど単純ですが、これが安定性と効率性の秘密でもあります)。

于 2009-06-27T09:02:06.553 に答える
10

www.sqlite.orgに焦点を当てることをお勧めします

それは最近のもので、小さく (ソースコードは 1MB)、オープンソースです (自分で理解できるように)...

それがどのように実装されているかについての本が書かれています:

http://www.sqlite.org/books.html

デスクトップ コンピューターと携帯電話の両方のさまざまなオペレーティング システムで実行されるため、簡単に実験でき、現在および将来にわたって学習することが役に立ちます。

ここにもまともなコミュニティがあります: https://stackoverflow.com/questions/tagged/sqlite

于 2009-06-27T06:01:01.800 に答える
10

さて、SQL と実装に関する情報が掲載されているサイトを見つけました。すべてのチュートリアルを一覧表示しているページにリンクするのは少し難しいので、1 つずつリンクします。

于 2009-06-30T07:13:34.367 に答える
8

HSQLDBから学ぶことができるかもしれません。学習用の小さくてシンプルなデータベースを提供していると思います。オープンソースなのでコードを見ることができます。

于 2009-06-27T06:02:58.550 に答える
4

MySQL に興味がある場合は、このwiki ページもお勧めします。このページには、MySQL の仕組みに関する情報があります。また、Understanding MySQL Internalsも参照してください。

また、データベース エンジン用の非 SQL インターフェイスを検討することも検討してください。Apache CouchDBをご覧ください。いわゆるドキュメント指向のデータベース システムです。

幸運を!

于 2009-06-27T07:50:17.853 に答える
3

それがあなたの要件に合うかどうかはわかりませんが、SELECT, INSERT , UPDATEperl を使用して simple ( ) をサポートする単純なファイル指向データベースを実装しました。
私がしたことは、各テーブルをディスク上のファイルと明確に定義されたパターンのエントリとして保存し、awk や sed などの組み込みの Linux ツールを使用してデータを操作することでした。効率を向上させるために、頻繁にアクセスされるデータはキャッシュされました。

于 2009-06-27T07:27:49.473 に答える