株式会社タフス

わかりやすい・効率の良いそして果ては自己満足のソース

こんにちは。

久々に、開発プロジェクトに携わることができ、毎日うきうきしてますよ!
今日はそんな中、プロジェクト内で出会った、ソースの書き方+アルゴリズムの人それぞれな部分に感じたことを。

最近、自分がほんと歳をとったなぁと思うのが、若い子達とお仕事をしてる時ですね。
若い子は仕事が早い!覚えもいい!(人によるのは知ってる)
今回のプロジェクトでも、

    ★とても優秀な若い子に出会うことができた★

のでおじさんは満足しています。

その子のソースは読みやすい。
インデントとかそういう問題ではなく(そこも綺麗だけど)、処理のまとまりとか、
一貫性とか、華麗で端的な書き方。ほんと頭下がるおもい。

そんな中、PL/SQLあがりのおじさんは、どうしても納得のいかない部分を見つけてしまったんだよね。
ちょっと専門的な話になるのだけど、Sequelizeというnode.jsで利用するORM(オーアールマッパー)があるんだけど、こいつは残念なことにUNION、UNIONALLができません。
そこで各テーブル(MODEL)毎にデータをとってきて、JavaScript上でえいっとマージする必要がある。(処理はとても簡単)

今回はこの「UNION ALL」した結果と、トランザクションをJOINする。といった処理でした。

 ・若い子
  トランザクションを取得(オブジェクト配列へ)
  マスタのUNIONALLを取得(オブジェクト配列へ)
  トランザクションのオブジェクト配列をぶつける(マスタへの照合はfilterを採用)

 ・MochiTomo氏
  トランザクションとすべてのマスタを外部結合して取得(オブジェクト配列へ)
  各マスタの中で名前がNULLでない部分を名前として再定義。

マスタとトランザクションは主キー・外部キーでぶつけるのが前提だけど、
おじさんはどうも全部とってきて、プログラムで回すというのが苦手で(苦笑)
マスタが1000件でトランザクションが1万件だったらどうしよう。みたいな。
今のサーバスペックならびくともしないのは知ってますけど。

結果としてはUNIONALLしてるのでORMにもかかわらずSQLが埋め込まれてる若い子のソースのほうが不格好です。
この辺をみて勝利を感じた(勝ち負けかい!)のだけど、結局は自己満足。

もし、厳密に処理速度を求めるならどっちよ?ってデータ要件加味してやらないかんのですがね。

ながながとありがとうございました。
このもやもやをこうやってBlogに載せてまた明日からがんばれそう(笑)