- ベストアンサー
データベースソフトを作りたい
ニコニコ動画や様々なWEBサービスは、レスポンス向上のためなどの理由により独自のデータベースを作っていると思います。 初めにできればC言語を使ったデータベースソフトに取り掛かろうと思いました。 そこで、本やWEBを探したところ見つからず途方に暮れています。 できれば、初級の本や適切なステップをお教え願えないでしょうか?
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
ということは、 ストレージ上へのレコードの格納方法 型ごとの格納方法 可変長データの格納方法 索引の作り方 順次検索や索引検索 ソート リレーションのさせかた ユニークやNULLの扱い ネットワークからのSQLの受取り方と結果の返し方 SQLの解析方法 SQLの最適化 トランザクション処理 ロギング バキュームやダンプ といったことを、一からC言語で作りたいということなんですね。 (思いつくままに適当に羅列しましたが) 車輪の再発明という言葉がありますが、データベースを使っている アプリケーションやWebシステムで、RDBエンジンそのものを一から作ることは あまりないですよ。 一般的なリレーショナルデータベースの行と列に収まらないデータを格納する場合でも、 XMLデータベースとかありますので。 勉強の為にということなら、C言語で 固定長レコードのバイナリファイルの読み書き 索引を別ファイル化 順次検索・索引検索 的なところから入って、だんだん大きくしていっては どうでしょう。
その他の回答 (6)
- _yasuo
- ベストアンサー率41% (16/39)
この手の本や整備されたドキュメントはなかなか難しいので、探すならOSSの方が充実していますね。 すでにC言語、C++言語が柔軟に解釈できるのであれば、 MySQL等のデータベースソフトウェアのソースコードを読む込むというのもステップの1つになるかと思います。 初級となると、図解による構造説明等が(理解を早めるために)必要になると思いますので、いきなりソースコードというのは 良いステップとは限りませんが、勉強にはなると思います。 ご参考までに
お礼
ベストアンサーには、選べませんでしたが、ソースコードを見るというのも一つの手だと思いました。 ありがとうございます。
- zwi
- ベストアンサー率56% (730/1282)
最初の質問からすると、ニコニコ動画が独自のデータベースエンジンを使っていると勘違いされているようですが、べつに特別なものは使われていないですよ。 ドワンゴの「ニコニコ動画の仕組み」 http://info.dwango.co.jp/rd/files/niconico_douga_study_20070425/koizuka.swf はっきり、「MySQL5」と書かれています。 信頼性やレスポンス性、開発工数などなどを加味すると独自のデータベースエンジンは開発コストが割に合いませんのでまず行いません。 ※ googleは独自なデータベースエンジンを使ってますが。これはgoogleの規模が半端無く大きいからです。世界企業レベルのシステムは参考にもなりません。 質問者さんにはっきりしてもらいたいのは、データベースエンジン/サーバー/ライブラリなどデータベースの根本システム(DBMS)のアルゴリズムの部分を開発したいのか、データベースを使った応用ソフトを作りたいかです。
- zwi
- ベストアンサー率56% (730/1282)
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
- nora1962
- ベストアンサー率60% (431/717)
PHP+MYSQLでアクセス数がそんなにないのならば、 ・mysql_pconnect関数を使い、コネクションを切らないようにする ・パラメータだけ異なるSQLを多数発行するなら、query_cacheではなくサーバーサイドのPrepared Statementを使用する。 と、それなりにレスポンスが向上します。
補足
申し訳ございませんが、独自のデータベースを作りたいと思っていますので、チューニング等で高速化したいとは、考えていません。
- zwi
- ベストアンサー率56% (730/1282)
意図がよくわかりませんがリレーショナルデータベースを一から構築したいのであれば、まずリレーショナルデータベースと言うものを経験するところから初めて見てはどうでしょうか? 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
補足
MySqlは、利用したことはありませんが、DB2,oracleの経験がありますので、そこは、必要ないと考えています。 できれば、簡単なデータベースソフトを作るところから始めたいと思っています。
- superside0
- ベストアンサー率64% (461/711)
独自のデータベースということだと、 データベースエンジンそのものを、フルスクラッチでC言語で作りたいのかと、思ってしまいましたが、 > 様々なWEBサービスは、レスポンス向上のためなどの理由により独自のデータベースを作っていると思います。 ということですと、 既存のデータベースエンジンを利用したアプリケーションをC言語で作りたい、ということなんでしょうね。 データベースの利用は、極端にいうと、テーブル設計+SQL言語の修得 といってもよいかと思います。 データベースを利用したWebアプリケーションの作り方は、言語別にたくさんの書籍がありますが、 C言語のものって少なくて、PHP,Ruby on Rails, ASP.NET(VBかC#), Java,Perlあたりかと思います。 初心者がSQLを理解するんだったら、C言語よりも、PHPとかRubyのほうがよいと思いますよ。 SQLそのものに集中してコーディングできるので。
補足
文章が読みづらく申し訳ございません。 C言語でデータベースソフトを作りたいと思っています。
お礼
ありがとうございます。 このステップからまずは、やっていこうと思います。