2007-03-01から1ヶ月間の記事一覧

仕様をつめる(DB仕様Ver 0.10)

最近、自作OSSのメモリDBの事を書いていないが、忘れてしまったわけではない。 今回の、Web向けアプリケーションサーバを作りながら、リアルな仕様とその実装方法をつめている。現在のところ、こんな感じ。でも、まだ、仕様はバージョンアップしそう。 デー…

内部の方向性がかたまる

だいぶ、内部の管理の方向性が見えてきた。 一番悩んでいたのは、HTMLの部品化のところ。ここでは、親のHTMLの中に子HTML(+スクリプト)をどんどん追加していけて、しかも、親と子供が独立して動くから、部品化ができるという所の仕様だ。これには、独立性…

Frameタグが腐る程使えたら

結構、PHPやJSPで開発していて、そうかんがえたことはないだろうか? なぜならば、Frameタグを使うとすごく便利だからだ。 なぜ便利かというと、 ・フレーム内のHTMLのフォームが独立して動く ・だから、WEBの部品化が出来る ・だから、あとで修正を加えると…

実行系の整備にはいる

だいぶ、SQLのパーサーは出来てきた。 これからは、そのパースしたものを実行する実行系をどんどん実装しようと思う。 SQLScriptのパース → 実行 → 実行結果をHTMLデザインに渡す→HTMLデザインのレンダリング という一連の流れを披露できるまでもうすぐだ。

目標、4月にαリリース予定

HTML+SQLコンパイラの方に、結構引き合いが出てきた。 デモを見せられるようになったら、見にきてくれるところも出てきた。結構、コンパイラの方は、以前作ったプロダクトの知識が生きるので、さくさく進む。 ソースコードもどんどん増える。こちらの製品で…

演算子の優先順位は生成規則で

だいぶ、SQLの一番ややこしいところ、すなわち、WHERE区のコンディション関連ができた。 SQLのコンパイラ作成で一番厄介なのがこの部分だ。 ANDとかORの論理演算もあるし、優先順位もあるし。NOTとかもあるし、結構いろいろとやることがある。演算子の優先順…

コンパイラ系を見直す

HTMLの状態遷移をもっと的確に行うようにした。 というのはHTMLの中の本文(BODY STRING)と、タグ内(''の間)と、ダブルクオーテーション、シングルクオーテーション内で、認識するトークンが違うからだ。 例えば、タグ内では"HTML"という単語が出てきたら…

SQLコンパイラと実行環境作成に入る

HTMLのほうのコンパイラはだいぶ目処がついてきたので、SQLコンパイラの作成にはいろうと思います。 今回は、SQLコンパイル後の実行も必要なので結構工夫が必要。 あと、HTMLのデザインのコンパイルは、そもそも目に見えるものだから、エラーが起きたら分か…

生Servletにはまる

ひさびさにはまった。 というのは、文字コードにはまった。HTMLのコンパイラはただしく認識しているのに、System.outとTomcatからの出力で?????が出てしまう。僕は、これをずーーっと実はJavaCCのせいにしていた。 でも、おちついて解析したら、ServletのHtt…

ついに商品名のalinous.comを押さえる

ついに、商品名のalinous.comをパートナー企業の方が押さえてくれた! しかも、お名前.comで。これで、ホームページが作れるぞ! ダウンロードサイトも作れる。このなまえが空いてて本当にびっくり!でも、良かった良かった。

デバッグ環境を整える

今日は、エラー系の処理をかなり重点的にやった。 WEBのフレームワークの使い勝手でかなり重要なのは、エラーが起きたときに、エラーが何なのかとか、どこでおきているのかとか、その辺の情報が取りやすいことだ。 やっぱり、この辺が難しいと普及しない。 P…

複合キーと順番

CREATE TABLE文内で、PRIMARY KEY(column1, cokumn2, ....)とかくと、複合キーができるが、結構順番が重要だ。 でも、毎回重要なわけではない。 WHERE区で column1 = 'AAA' and column2 = 'bbb' みたいに完全一致で指定するだけの場合は関係ない。でも、ORDE…

SQLプロセッサ部分

しかし、もう、かなりSQLの内部処理が身に染みてきた。 自作OSSデータベースのSQL処理+集計部分は、自分で作ったほうが、MySQLを使うより高速に出来るようなきがしてきた。MySQLだと、上位のSQLProcessor部分でたくさん判断しすぎて、下の方(ストレージエ…

Web+DBアプリのSession有効活用

今、作成している、HTML+SQLコンパイラ搭載のAPPサーバは、セッションをかなり有効活用している。 というか、その部分をDBに自動的に入れるようにしている。 その他、WEBでつくってて嫌だなーとおもうところは、全て何気に解決されているようにしたい。WEB…

Order by句とlimit句とbool代数

正直、これが、実は今回のメモリDB開発のラスボスになりそう。というのは、bool代数で、母集合をしぼるためにどのインデックスを使うかというのを前回、できたと書いた。しかし、じつは、これに加えて、特定フィールドでソートするOrder by句とレコードを最…

オブジェクト指向全開とデータベース

だいぶ、オブジェクト指向のほうのコンパイラはできてきた。すごくいい感じだ。やっぱり、技術系の製品を作るときに妥協はいかん。 しかし、こういうのをつくっていると、本当に高速なDBが必要だと思えてくる。ただ、どういう風に早いかはすごく問題だ。 み…

複合インデックスも作ろうかな

結構、実際にDBを使ったソフトウェアを開発していると、複合キーがあると相当良いケースが多い。複合キーがない場合は、一度インデックスを使うが、そこで、Hitした値をスキャンしなくてはならない。最初のインデックスでHitした内容が少なければ、それでも…

行ロックの実装仕様

行ロックの実装の仕様でずーーーっと悩んでいたけれども、やっと、仕様が決まりそうです。たんなる行ロックではなく、「行ロック+行リードコミッティッド」になりそうです。 行単位でロックをかけるところはわかりやすいかも知れませんが、行リードコミッテ…

メモリDBから大きな発展

結局は、メモリDBを自分で作ることになってしまったが、逆にこれは良かった。なぜならば、メモリDBをコンポーネント化したら、いろんなところで使えるからだ。 トランザクションモジュール内でも使えるし、すごく重宝する。インデックス情報とかを自動で認識…

ルールベース or コストベース

かなり、メモリDBがそれらしくなってきた。というのは、今回はルールベースになってしまうが、それなりにかなり最適化された処理を行うことができる。 WHERE句のなかが、結構ややこしくても再帰的に処理するロジックになっている。あと、インデックスを使う…

Fedora調子いい!!

今回入れたFedora Core5は調子よいです。トラブルとしては、Eclipse3.2.2を入れるときに、GTKのパスがモジラとどうのこうのという以外は全然ありませんでした。パスを通したら直ったので全然OK。これで、ばりばり開発できるぞ!!

template使ったら速度が2倍のに

僕のトランザクション処理パーツは、今まで、秒間で10万件処理が出来ていた。 (for文でまわして、1CPUで直列実行) で、リリースビルドとDebugビルドがほとんど同じ速度だった。なんだか、ソートがすごく遅いなあと感じて、ひそかに仮想関数のせいだと思…

ソースコードがすごい量に

オープンソースにするのに、ソースコードの量があまりに少なかったらどうしようと危惧していたが、それは大丈夫そう。もう、すでにMySQLのInnoDBのコードより量は多くなっている。 現在、Releaseビルドでビルドしたバイナリが250KB。これからさらに、チュー…

Web・携帯のためのDB

だいぶ、全文検索が出来てきた。いくら、64BitがターゲットのメモリDBとはいっても、全てのテーブルの全文検索用のインデックスを全部メモリにおいてしまっては、本当に死亡だと思うので、一個か2個だけLRUアルゴリズムで残すことにした。 (残す数は設定可…

WeB向けにバランスの取れたDB

結構、Web向けに、機能バランスが取れたDBってない。・likeが速い(全文検索) ・Alterとかもちゃんとできる ・トランザクションをサポート ・レスポンスが良く、高トランザクションをこなすことが出来るこれだけで、1点、2点満たしているのはあるけれど、…

32Bitを斬り捨てる、この潔さFoooo!!!

いやあ、潔い。 32Bitを斬り捨てると、本当に潔いプログラムが書けるし、32Bitでコンパイル出来ないとか言う苦情もこなさそうだ。しかし、Core2Duoって速いなあ〜〜。 まだ、全然CPUの性能を引き出してないのに、動きがかなり速いです。 やっぱし、キャッ…

超高速全文検索をつける

今、DBのインデックスに高速文字列検索をつけている。 これがあれば、データベースからYahooみたいな検索がサクサクできる。さすがに、全文検索のインデックスは大きいので、ディスクにしまうことにしました。

実メモリを消費するか、論理アドレスを消費するか

mmap()は、仮想記憶の仕組みを使う。だから、メモリにマップすると、そのファイルの大きさの分のメモリがmallocされる。だけれども、別にその領域にたいして全部実メモリがマップされるわけではない。 アクセスがあったところに実メモリがマップされて、この…

自分でAssertコードにやられる

僕のプログラムには#ifdebug AssertManager::neverComeHere(__LINE__, __FILE__); #endif // _DEBUGとか、アサーションのコードが結構埋まっている。 つまり、なるべく多くのテストをする為に、テスト実行自体が、内部パーツのテスト行為になっている。しか…

VMWAREなしは早い!!!

今まで、Linux環境はVMWAREを経由して動かしてたんだけど、それを使わずにNAtiveで動かすとはやいですーーーーー!!!今まで動かして、遅いと落ち込んでた部分もはやいーーー!!!!いままで予想していた以上に超速いソフトが作れそう!!!