インピーダンスミスマッチ解決手法あれこれ
datomic がどんな位置づけになるのかの確認の為に他の要素技術をちょっと軽く見てみたくなった。インピーダンスミスマッチについて自分の中でもカッチリ定義できてるわけではないが、モヤっとしてあるのは SQL とホスト言語との相性ってどうも悪いよなあと言うレベル。
ORM
オブジェクト関係マッピング。何となくクラス⇔DB Table, クラスフィールド⇔DB フィールドを対応させてホスト言語であれこれすると言うイメージで単純にそれだけじゃないんだろうが、せっかくの SQL のクエリパワーを失うんじゃないのかなあと言う疑念が晴れないものでもある。Hibernate だけちょっとググってみた。
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 上では開発してないのでこれくらいでいいや。
ActiveRecord
- Ruby on Rails のコアライブラリの一つ
- ここ によるとテーブル名⇔クラス名、テーブルフィールド⇔クラスフィールドと言う単純なマッピングをするらしい
- 検索条件の部品化ができるスコープなどは良いかも
- ただやっぱり SELECT/WHERE での CASE 句、JOIN などは使えなくなる?(未確認)
- 基本的に DB の 1 レコードに対して扱うと言うのもどうなんだろうと言う気も
- RDBMS 前提としている以上仕方ない部分なのかもしれん
NoSQL
まとめ
どれも今ひとつピンと来なかった。