web-dev-qa-db-ja.com

自分のデータベースシステムを作成する

データベースをより効率的に使用するには、データベースのしくみを学ぶ必要があります。私のやり方は、実践することです。

自分のデータベースシステムを作りたい。クエリを使用してファイルを解析する疑似データベースの作成については言及していません。これは、単にクエリ言語を備えたファイルシステムインターフェイスです。データベースエンジンの実際の構造について話しています。そして、私が念頭に置いているのは、リレーショナルでもドキュメント指向でもない(存在する場合でも、「ノード指向」です)ので、リソースをできるだけ抽象的かつ高レベルにする必要があります。

それで、それをどのように作成しますか?どのリソース/チュートリアル/本を読んで理解できますか?

言語は少しでも関係ありません。理想的には、コードは概念を説明するための疑似コードであり、特定の言語に結び付けられているわけではありませんが、何でもそうです。私はグーグルで問題について何も見つけることができませんでした(私はこの主題について読み書きができないので、おそらく私は正しい検索を入力していないだけです)。

そのようなリソースが利用できない場合、クライアントを作成する方法についての何かは、少なくとも正しい方向への一歩になると思います。

65
Xananax

(それが存在する場合でも、「ノード指向」です)

ここから始める。データベースのような複雑なアプリケーションを扱う場合(単純なデータベースでも複雑なアプリケーションです)、ドメインの歴史と適切な用語に精通し、少なくともアーキテクチャについて非常に高いレベルの知識を持っている必要があります。 データベース に関するWikipediaの記事から始めることができます。数日かけて、関連する概念とさまざまなデータベースタイプに関するすべての記事を読みました。

そして、私が念頭に置いているのは、リレーショナルでもドキュメント指向でもないので

次に、RelationalまたはNoSQlを選択します。 NoSQLを選択する場合は、1つのタイプのNoSQLを選択する必要があります。これは非常に重要です。さまざまなデータベースファミリすべてについて説明しているアーキテクチャドキュメントはありません。どちらを選ぶかは重要ではなく、1つだけ選んでそれを使い続けます。

言語は少しでも関係ありません。

はい、(残念ながら)データベースファミリを選択した後、そのファミリのオープンソースデータベースからコードを探索する必要があるためです。何を探すかについて、いくつかの一般的なガイドラインがあります。

  • 比較的小さなコードベース、
  • 建築ドキュメントまたは少なくとも開発ブログ、
  • 選択するデータベースは、ファミリーで一般的に考えられているものに近いものである必要があります。高度に専門化されているかどうかを知ることは困難です。

適合するいくつかの例:

ソースを入手してコンパイルし、いじってください。パッチや派手なものを提出する必要はありません。コードを調べ、あちこちに小さな変更を加えて、何が起こるかを確認してください。それは漸進的なプロセスであり、それをいじるほど、コードが何をするかを理解することがより簡単になります。選択した最初のプロジェクトが非常に理解しにくいと思われる場合は、次のプロジェクトに進んでください。

別の優れたオプションは、@ N.Bのように、MySQL用のエンジンの構築に集中することです。 以前の回答 で示唆しています。

コードベースで何か便利なことができるようになった場合は、プロジェクトのコミュニティに参加してください。これが、関係する概念に関する詳細なリソースを見つける最も簡単な方法です。

そして最後に、データベースの作業を開始します。最初は、探索してきたコードの非常に縮小されたクローンを作成するだけで済みます。オリジナルである必要はありません。かなりの数の素晴らしいプロジェクトがクローンやフォークとして開始されました。

どのリソース/チュートリアル/本を読んで理解できますか?

かなりの本があります:

その他数百の他、Googleで簡単に追跡できる無数の学術論文。最初に何をしたいかを定義し、次に本を検索する必要があります。他のデータベース作成者のコミュニティに参加することも、書籍のリストを絞り込むのに役立ち、おそらく上記よりもはるかに優れた提案を得ることができます。

幸運を!完了したら、リポジトリへのリンクを含むコメントを期待しています。そして、あなたがまだ終わっていない場合は、私が2001年に書き始めたコンパイラをまだ完成していないことを思い出させるコメントを残してください。

63
yannis

あなたはただそれをして、あまり考えすぎないようにすべきです。学習プロセスと熱意を楽しむことは贈り物です。

それが良いアイデアかどうかを他の人に尋ねることは確かに 良い戦略 ではありません。すべてのカエルの話を聞いていたとしても、ショッピングカートを駐車場からデポまで押しながら、今日でもIkeaで働いています。

Ayendeがそうした 興味深い投稿 のように自分を正当化する必要はありません。問題は:

ただし、実用的な開発者として、CouchDB、MongoDB、Tokyo、Redisなどの成熟した代替手段がある飽和した市場で、このプロジェクトがどのような新しいサービスを提供しているのか疑問に思っています。これらの製品の多くはクロスプラットフォームであり、実績のあるC速度で実行され、シャーディング機能とフォールトトレランスが大幅に強化された非常に大きなWebサイトで使用されています。

その過程であなたの喜びを味わうなら、目的を心配しないでください、あなたはすでに勝ちました。

27
user2567

「(それが存在する場合でも、「ノード指向」です)」。 -これがあなたがあまり見つけられない理由かもしれません!

バージョン0.1に飛び込んで、入手先を確認してください。あなたは、あなたが何を「すべきか」を尋ねることから、あなたが望むものを作り出そうとすることから、さらに学ぶかもしれません。数日待ってから、どこにあるかを確認してください。

約18年前、私はbtreeインデックスを使用した基本的なデータベースシステム(楽しみのために、図を作成)を作成し、非常に多くのことを学びました。

6
Jaydee

MySQLはプラグイン可能なストレージエンジンの構造を持っています。MySQLで動作するようにチェックアウトするのは エンジンの作成方法 のアイデアかもしれません。

4
Mjh

素晴らしいプロジェクトのようですね。どうやらあなたの目標は、運用ソフトウェアを作成することではなく、データベースとデータベースシステムを作成するプロセスについて学ぶことです。

私はあなたが多くの研究をする必要があるとは本当に思いません。目的は、ノードベースのデータベースシステムを作成するために何が行われるかを体験することです。

これが私が始める方法です:

  1. あなたの好きな言語またはあなたが改善したい言語を選んでください。
  2. ノードオブジェクト(または言語に最も近いもの)を作成します。それらをリンクする方法を理解します。
  3. 最初に実装するSQLステートメントの短いリストを作成します。
  4. データの保存方法を決定します。明らかな解決策の1つは、すべてのノードをシリアル化し、プログラムの開始時にそれらをロードし、プログラムの終了時にそれらを保存することです。

基本が機能するようになったら、何が難しいか、または問題があるかについて、より多くの洞察が得られます。次に、それについていくつかの調査を行い、いくつかの改善点を見つけ、それらを統合できます。

4
B Seven

「すべてがどのように機能するかを理解するために」独自のデータベースを作成することは、そのための唯一の正当な理由です(データベースが正しく理解するのは非常に難しく、正しいことを証明するのが難しいためです)。あなたはクレイジーですが、いい意味で!

それがどのように行われるかを確認するために、SQLiteを確認することをお勧めします。 SQLiteソース は約1.3MB圧縮されており、完全にACID準拠のトランザクションデータベースです。それは パブリックドメイン でもあり、メインの作者はナイスガイです。 (最も注意が必要なのは、情報を本当にディスクにコミットする方法だと思います。OSとハードウェアに嘘をつくのをやめて実際にトランザクションを書き込むように説得します[〜#〜]今[〜#〜]は意外と難しく、DBを作成する必要がないのがとてもうれしい理由です。)

3
Donal Fellows

本を買う:

http://www.springer.com/computer/database+management+%26+information+retrieval/book/978-1-84628-394-9

インデックスは、今日のデータベースの最も重要な側面です。二分木のように存在する代替案を研究してください。

デカルト積 についても読んでください。これは、結合がどのように複雑になるかを計算する方法です。

3
jgauffin

データベースの仕組みを学ぶ必要がある

リレーショナル代数を学ぶ。

小さなDBエンジンを見つけて、ソースを学んでください。

それらをより効率的に使用するために

いいえ。データベースを効率的に使用する方法を学ぶ必要があります。あなたはあなたの車がどのように機能するかを理解していればあなたはより良い運転手かもしれませんが、あなたが本当に運転に集中すればあなたははるかに良い運転手になるでしょう。

従来のルートをとる:コースを受講し、本を読んで、ピアレビューをして、質問してください インデックスlukeを使用

3
Incognito