日曜プログラミング

休日趣味でやってるプログラミング関連記事をダラダラと

インピーダンスミスマッチ解決手法あれこれ

datomic がどんな位置づけになるのかの確認の為に他の要素技術をちょっと軽く見てみたくなった。インピーダンスミスマッチについて自分の中でもカッチリ定義できてるわけではないが、モヤっとしてあるのは SQL とホスト言語との相性ってどうも悪いよなあと言うレベル。

ORM

オブジェクト関係マッピング。何となくクラス⇔DB Table, クラスフィールド⇔DB フィールドを対応させてホスト言語であれこれすると言うイメージで単純にそれだけじゃないんだろうが、せっかくの SQL のクエリパワーを失うんじゃないのかなあと言う疑念が晴れないものでもある。Hibernate だけちょっとググってみた。

Hibernate

  • Java ライブラリ
  • spring 内で使われているとか
  • 直接使っての感想らしきものを見つけられず
    • SQL を熟知している人が使うべきで SQL を使いたくないと言う目的で導入するものではない」ってのはあって、まあそりゃ RDBMS を相手する以上当たり前なような
  • どうやら HQL と言う SQL ライクな言語もあるらしい
    • 独自に用意する意味を知りたかったが簡単に説明している所は見つけられず

結論としては、使う事によるメリット的なものを見つけられず良く分からん。

LINQ

何か福岡のアイドルグループ出てきたw
そういや LISP ってアイドルグループも一時期いたなあw

それはさておき、LINQ とは MS 謹製 .Net 言語(C#/VB)の機能らしい。
ここの記事でコードにそのまま書き下せるのが最初のメリットで上げられてた。はっきり言うが、文字列に埋め込んでたのをコードにしただけで何が嬉しいんだか。

リンク先のメリットの一つにこんなのもあった。

 例えばテーブルの列名のスペルを間違ったとしても、それは実行時にSQL文が送信されるまでエラーになりません。LINQはまずこれらの問題を解決してくれます。

まあ多少便利かもしれんが書くほどの問題とは思えん。埋め込む前に SQL 直接実行するツール使えよとツッコミたくなる。最近のフリー SQL エディタならテーブル・フィールド名補完くらいするし。

と、文句を言っていたが、RDBMS だけでなく XML やらオブジェクトにも対応してると言うのは良いかもしれない。異なるデータ構造を行き来するようなプロジェクトの場合は検討する価値があるように思う。ただそれぞれ LINQ to SQL, LINQ to XML, LINQ to XML と分かれてるのが微妙に気になるけど。そういや JSON は対応してるのかな?とかも気になるが、現状 .Net 上では開発してないのでこれくらいでいいや。

また、LINQ to SQL 見てみると最終的には SQL 生成してた。ああ、なるほど。

ActiveRecord

  • Ruby on Rails のコアライブラリの一つ
  • ここ によるとテーブル名⇔クラス名、テーブルフィールド⇔クラスフィールドと言う単純なマッピングをするらしい
  • 検索条件の部品化ができるスコープなどは良いかも
    • ただやっぱり SELECT/WHERE での CASE 句、JOIN などは使えなくなる?(未確認)
  • 基本的に DB の 1 レコードに対して扱うと言うのもどうなんだろうと言う気も
    • RDBMS 前提としている以上仕方ない部分なのかもしれん

NoSQL

  • キーバリューストアとか聞くが
  • これらのクエリ言語 or API って SQL と比べてどうなんだろと言うのは気になる
  • まあこれは DB からの設計も必要な全くの新規プロジェクトの時に考えりゃいいか

まとめ

どれも今ひとつピンと来なかった。