みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

データベースソフトを作りたい

ニコニコ動画や様々なWEBサービスは、レスポンス向上のためなどの理由により独自のデータベースを作っていると思います。
初めにできればC言語を使ったデータベースソフトに取り掛かろうと思いました。
そこで、本やWEBを探したところ見つからず途方に暮れています。
できれば、初級の本や適切なステップをお教え願えないでしょうか?

投稿日時 - 2011-04-05 12:49:17

QNo.6646005

困ってます

質問者が選んだベストアンサー

ということは、
ストレージ上へのレコードの格納方法
型ごとの格納方法
可変長データの格納方法
索引の作り方
順次検索や索引検索
ソート
リレーションのさせかた
ユニークやNULLの扱い
ネットワークからのSQLの受取り方と結果の返し方
SQLの解析方法
SQLの最適化
トランザクション処理
ロギング
バキュームやダンプ
といったことを、一からC言語で作りたいということなんですね。
(思いつくままに適当に羅列しましたが)

車輪の再発明という言葉がありますが、データベースを使っている
アプリケーションやWebシステムで、RDBエンジンそのものを一から作ることは あまりないですよ。
一般的なリレーショナルデータベースの行と列に収まらないデータを格納する場合でも、
XMLデータベースとかありますので。

勉強の為にということなら、C言語で
固定長レコードのバイナリファイルの読み書き
索引を別ファイル化
順次検索・索引検索
的なところから入って、だんだん大きくしていっては どうでしょう。

投稿日時 - 2011-04-06 16:18:35

お礼

ありがとうございます。
このステップからまずは、やっていこうと思います。

投稿日時 - 2011-04-08 06:29:43

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.7

この手の本や整備されたドキュメントはなかなか難しいので、探すならOSSの方が充実していますね。
すでにC言語、C++言語が柔軟に解釈できるのであれば、
MySQL等のデータベースソフトウェアのソースコードを読む込むというのもステップの1つになるかと思います。
初級となると、図解による構造説明等が(理解を早めるために)必要になると思いますので、いきなりソースコードというのは
良いステップとは限りませんが、勉強にはなると思います。
ご参考までに

投稿日時 - 2011-04-06 23:38:01

お礼

ベストアンサーには、選べませんでしたが、ソースコードを見るというのも一つの手だと思いました。
ありがとうございます。

投稿日時 - 2011-04-08 06:28:38

ANo.6

zwi

最初の質問からすると、ニコニコ動画が独自のデータベースエンジンを使っていると勘違いされているようですが、べつに特別なものは使われていないですよ。
ドワンゴの「ニコニコ動画の仕組み」
http://info.dwango.co.jp/rd/files/niconico_douga_study_20070425/koizuka.swf
はっきり、「MySQL5」と書かれています。

信頼性やレスポンス性、開発工数などなどを加味すると独自のデータベースエンジンは開発コストが割に合いませんのでまず行いません。
※ googleは独自なデータベースエンジンを使ってますが。これはgoogleの規模が半端無く大きいからです。世界企業レベルのシステムは参考にもなりません。

質問者さんにはっきりしてもらいたいのは、データベースエンジン/サーバー/ライブラリなどデータベースの根本システム(DBMS)のアルゴリズムの部分を開発したいのか、データベースを使った応用ソフトを作りたいかです。

投稿日時 - 2011-04-06 16:44:53

ANo.4

zwi

DBのライブラリ・システムは構築する気はなく、DBを使ったソフトを作りたいと言う認識でよろしいか?
であれば、DBサーバを使わないにしても何らかのDBライブラリを使うということで考えたほうが良いでしょう。

SqLite3と言うDBライブラリなら無料で利用できますし、C言語インターフェイスですので利用されたら如何でしょう。PHP5でも採用されています。

「SQLiteで組み込みDB体験(1/3):CodeZine」
http://codezine.jp/article/detail/374
「[SQLite3] SQLiteにC言語でアクセス(基礎編) | idocsq.net」
http://idocsq.net/page/505

投稿日時 - 2011-04-06 15:24:38

ANo.3

PHP+MYSQLでアクセス数がそんなにないのならば、
・mysql_pconnect関数を使い、コネクションを切らないようにする
・パラメータだけ異なるSQLを多数発行するなら、query_cacheではなくサーバーサイドのPrepared Statementを使用する。
と、それなりにレスポンスが向上します。

投稿日時 - 2011-04-05 16:00:37

補足

申し訳ございませんが、独自のデータベースを作りたいと思っていますので、チューニング等で高速化したいとは、考えていません。

投稿日時 - 2011-04-06 15:07:28

ANo.2

zwi

意図がよくわかりませんがリレーショナルデータベースを一から構築したいのであれば、まずリレーショナルデータベースと言うものを経験するところから初めて見てはどうでしょうか?
RubyやPHPなどからはMySqlなどのリレーショナルDBサーバーは比較的簡単に扱えます。Sqliteと言うサーバータイプでないデータベースライブラリもあります。

その上で、リレーショナルデータベースの構造を勉強してみてください。それを元に設計できるだけの力量は必要ですが。
「関係データベース - Wikipedia」
http://ja.wikipedia.org/wiki/%E9%96%A2%E4%BF%82%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9
「データベース基礎中の基礎」
http://thinkit.co.jp/book/2009/09/24/596

投稿日時 - 2011-04-05 13:50:03

補足

MySqlは、利用したことはありませんが、DB2,oracleの経験がありますので、そこは、必要ないと考えています。
できれば、簡単なデータベースソフトを作るところから始めたいと思っています。

投稿日時 - 2011-04-06 15:05:45

ANo.1

独自のデータベースということだと、
データベースエンジンそのものを、フルスクラッチでC言語で作りたいのかと、思ってしまいましたが、

> 様々なWEBサービスは、レスポンス向上のためなどの理由により独自のデータベースを作っていると思います。

ということですと、
既存のデータベースエンジンを利用したアプリケーションをC言語で作りたい、ということなんでしょうね。

データベースの利用は、極端にいうと、テーブル設計+SQL言語の修得 といってもよいかと思います。

データベースを利用したWebアプリケーションの作り方は、言語別にたくさんの書籍がありますが、
C言語のものって少なくて、PHP,Ruby on Rails, ASP.NET(VBかC#), Java,Perlあたりかと思います。

初心者がSQLを理解するんだったら、C言語よりも、PHPとかRubyのほうがよいと思いますよ。
SQLそのものに集中してコーディングできるので。

投稿日時 - 2011-04-05 13:20:38

補足

文章が読みづらく申し訳ございません。
C言語でデータベースソフトを作りたいと思っています。

投稿日時 - 2011-04-06 15:03:47

あなたにオススメの質問