Koherent_DB

Pure-Perl RDBMSのKoherent::DBを公開しました

http://www.koherent.org/db/にてモジュールを公開しています。インストール方法などはリンク先から。Perlの練習用に作った上にまだα版でテストも全然できていないのでバグだらけだと思いますが・・・。

改名します(PerlShell→Koherent::DB)

PerlShellですが、もろもろの事情でKoherent::DBに名前を変更します。あとはデッドロックの対処とPODを書けば公開できそうです。

追記型MVCCで機能するB-treeによるインデックス

PerlShellKoherent::DBのインデックスがとりあえず機能するようになりました。最初実装していた手法が正しく動作しないことに、かなり実装が進んでから気付いたのでずいぶん時間がかかってしまいました。単純なB-treeなら実装が簡単ですが、どうやって追記型…

実装状況報告: Standaloneモードでの動作確認とトランザクションのサポート

このところ実装に注力してブログの更新が滞ってしまっていましたが、PerlShellKoherent::DBがとりあえず動くようにはなりました。当初の予定に加えて次の機能を実装することにしました。 StandaloneモードとClient/Serverモードの両立 追記型MVCCによるトラ…

limitメソッドとLimitedViewクラスの実装

limitメソッドは、SQLのLIMITやOFFSET*1相当の機能を実現するためのメソッドです。今回は、limitメソッドとそれを実現するLimitedViewクラスの実装について書きます。 例で使用するテーブル これまで同様、次のようなテーブルがあるものとして話を進めます。…

ROLLBACK TO (SAVEPOINT)をどう実装するか

これまで書いてきた記事は実装のほぼ固まったものについて解説する形のものが多かったですが、それらとは区別し、現在検討中のことについて検討事項のカテゴリーで書きたいと思います。今回は、ROLLBACK TO(およびSAVEPOINT)の実装について書きます。なお…

方針変更について

PerlShellKoherent::DBの作成についての方針を一部変更します。Pure PerlのRDBMSを作るで、次のように書きました。 10月上〜中旬くらいまでにある程度形にする。 まずはMyISAMのような、トランザクションなし、テーブルロックで動作するものを作る。 これら…

order_byメソッドとOrderedViewクラスの実装

実装の楽なlimitメソッドから書こうかと思いましたが、order_byメソッドなくしてlimitメソッドは使い物にならないので、先にorder_byメソッドの実装について書きます。order_byメソッドではSQLのORDER BYのように検索結果をソートして取得するためのメソッド…

whereメソッドとConditionedViewクラスの実装

友人の結婚式に出るために関西に帰ったり、Module::Starterを触ったり、PostgreSQLのトランザクションの実装を調べたりしている間にずいぶん間が空いてしまいました。さて、前回までにSELECT/INSERT/UPDATE/DELETE、つまりCRUDのためのAPIを一通り考えた*1の…

UPDATE、DELETE、INSERTのAPI

これまでは参照(SELECT)のためのAPIを考えてきましたが、次に更新(UPDATE)、削除(DELETE)、挿入(INSERT)のAPIを考えたいと思います。なお、GROUP BYに当たる検索方法を検討していませんが、これらはプログラム上で実現できるうえに実装が大変そうな…

SELECTのAPI(4) インデックスの利用

SELECTのAPI(2) 様々なSELECT文への対応で述べた検索ではインデックスを活用した検索を実現できません。ここではインデックスを用いた検索のAPIを考えます。 例で使用するテーブル これまで同様、次のようなテーブルがあるものとして話を進めます。 members:…

SELECTのAPI(3) イテレータによるデータアクセス

これまで、テーブルからのデータの読み出しそのものに関しては触れませんでした。ここでは、どのようにテーブルからデータを読み出すかについて考えます。テーブルから数百万件というような大量のデータを読み出す場合、すべてのデータをメモリ上に読み込ん…

SELECTのAPI(2) 様々なSELECT文への対応

パッケージ越しにソートサブルーチンを渡してもうまく動作しないようなので、ORDER BYでは通常のサブルーチンを渡すように変更しました。 (参考)パッケージ越しのソートサブルーチンがうまく働かない - $koherent->diary (2009.09.21) APIを考えるにあたっ…

SELECTのAPI(1) 概要

SQLと言えばまずはSELECT文です。ということで、最初にSELECT文相当の検索用APIを考えたいと思います。 例で使うテーブル 以下、次のようなテーブルがあるものとして話を進めます。 members: メンバーを格納したテーブル。 member_id family_name first_name…

実装の方針

併せて、方針変更についてもご覧下さい。 (2009-10-16) RDBMSの実装においては、次のような要素がキーになると思います。 インデックス キャッシュ トランザクションと同時実行制御 テーブルやビューの結合 SQLやAPI 実行計画とオプティマイザ これらについ…

PerlShell

もろもろの事情でKoherent::DBに改名することにしました。 (2009-11-24) という名前にすることにしました。これから実装するRDBMSを。やはり名前がないと不便ですし、名前は必要です。 名前の由来 名前の由来は「pearl shell(真珠貝)」です。 Perlは元々pe…

Pure PerlのRDBMSを作る

今日からブログを書くことにしましたkoherです。突然ですが、Pure PerlのRDBMSを作りたいと思います。 自己紹介 某ITコンサルに勤めていましたが、より技術的なことに取り組みたいと思い、退職して大学院に戻ろうと考えています。8月でプロジェクトがひと段…