パスワードを忘れた? アカウント作成
14325639 journal
日記

tuneoの日記: 鶏を割くに焉んぞ牛刀を用いん 12

日記 by tuneo

コーダーとしてちょっとしたPython?スクリプトを作らないといけないのだが、なんだかえらいひとが決めた道具立てがやたら重厚長大な模様。

有償ソフトのライセンスマネージャのログファイルをパースして、ライセンスの稼働率を集計するスクリプトなのだが、すべてデータをメモリに載せたらそこらのパソコンではメモリが足りないらしい(そりゃそうだ)。

じゃあ一行ずつ逐次で処理すりゃいいじゃんか、と考えるのが普通の発想なんだが、出てきた道具立ては「ログファイルを頭からお尻までパースして、読み込んだデータをリレーショナルデータベース様の表に入れ込み、SQLの集計関数で集計する」だった。

別の表とのリレーションがない、ただの「表」を1枚作って集計するのにRDB使うんか?しかもSQLの集計関数だってやってることは逐次で集計してるだけだぞ?ちょっと俺には理解できない発想だなぁ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by nnnhhh (47970) on 2020年09月15日 14時37分 (#3889348) 日記

    SQLしかできない人が将来機能追加できるようにとか…

    • by Anonymous Coward

      RDB の「リレーション」って表と表の関係性(だけ)じゃなく,「列の組」のことなんだよね。だからただ1枚の表でも立派な RDB なんだ。

      将来の拡張性を考えるならば,「RDBM で扱えるようにする」と「稼働率を集計する」に仕事を分けるのは,よりシンプルで独立性の高いモジュールに分割しているという点では,そんなに無理な発想ではない。

      その案件で,将来の拡張性がどの程度必要かによるけど。

  • 大げさな事かなと、牛刀でカボチャをぶっ叩きながら思う。

  • by KENN (3839) on 2020年09月15日 22時03分 (#3889732) 日記

    昔その手のスクリプトをawkで書きました。

    • by Anonymous Coward

      私はデータベースを使う方法に賛成ですね

      これで例えば
      - ログをawkでパース csv に変換 (sedでもできるかも知れない)
      - csvをデータベースに書き込む(データベースは sqlite3 COPY文で一発)
      - sqlで集計&pythonとかgnuplotで表示
      という感じで3つスクリプト or ワンライナーを書きます

      実装は超簡単です

      たとえばログの書式が
      時刻 セッションID ログイン
      時刻 セッションID ログアウト
      とかだったら
      - 時刻 セッションID ログイン
      - 時刻 セッションID ログアウト
      で2個テーブルをつくって セッションIDでjoinして時刻を引き算
      これでログイン累計時間が計算できます

      処理の高速化は デ

      • by Anonymous Coward

        まあ概ね同意。
        車輪の再発明を避けられるなら牛刀だろうが食肉加工工場だろうが何でも使う。

  • by Anonymous Coward on 2020年09月15日 14時52分 (#3889359)

    と似たようなもんかな?

  • by Anonymous Coward on 2020年09月15日 15時51分 (#3889418)

    仮に有償ソフトのライセンスマネージャのログだとしたら、後から不正ライセンス等が発覚しどの時点からそんなことやってたか調べたくなるかもしれない。
    ゆえに一切合切のログをRDBにぶち込んでおくのは当たり前すぎるくらい当然のこと。
    逆に何故あんたの仕事だけのスコープでものを語っているのか意味不明で仕方ない。
    誰がどう考えてもあんたのやってるライセンスの稼働率を集計するなどという仕事の方がおまけ。

    だいたい、
    > しかもSQLの集計関数だってやってることは逐次で集計してるだけだぞ?
    この時点でもう話にならない。
    ポスグレでもなんでもいいからソース読んでみろよ。
    そんな単純なことやってるか?
    むしろ集計関数だけで何種類のやり方をデータ量などによってやりくりしてた?

    冗談はおまえの人生だけにしとけよ。

  • by Anonymous Coward on 2020年09月15日 17時11分 (#3889499)

    パーサーが組めた時点でほぼほぼ目的達成できてそうな気がするんだが……
    集計対象要素をパーサーの中で集計させれば済むんじゃない?

typodupeerror

皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー

読み込み中...