ãªãRDBããCSV + COBOLã«å¤æ´ããäºã§ã³ã¹ã忏ã¨é«éåãåæã«å®ç¾åºæ¥ããã®èå¯
- ããããæ¢åã¯ã©ããªãã¸ãã¯ï¼
- RDBãªãã ããWhereå¥ä½¿ã£ããï¼
- ãªããã¡ã¤ã«ã«ããã¨éããªãã®ãï¼
- 並ååã¨åæ£å¦çã«ããé«éåã®å¯è½æ§
- COBOL使ãå¿ è¦ãã£ãã®ï¼ Javaã¨ããããã¡ã ã£ãã®ï¼
- ã¾ã¨ã
TLãè¦ã¦ãã¨ä»¥ä¸ã®è¨äºãå°ã話é¡ã«ãªã£ã¦ã¾ããã tech.nikkeibp.co.jp tech.nikkeibp.co.jp
対象ã®è¨äºã¯ææä¼å¡ãããªãã¨è¦ããªãã®ã ãã©äºä¾ã¨ãã¦ã¯ä»¥ä¸ã¿ããã
リソース - ユーザー事例 - COBOL製品 ユーザー事例 : マイクロフォーカス
ãã¦ããã®è¨äºã®é©ããã¤ã³ãã¯ãï¼åã¬ã³ã¼ããããã®DBå¦çãRDBããCOBOL + CSVã«å¤æ´ãã¦Unixãµã¼ãããWindowsãµã¼ãã«å¤ããäºã§æ§è½ãç¶æãã¤ã¤ã³ã¹ãã1/5ãããã«ãããã¨ããäºã§ãããã ããã£ãã7å²ããã£ãSQLãå ¨é¨COBOLã«å¤ããã¨ãæä»£ã«éè¡ãããï¼ãã¨ããRDBããã¡ã¤ã«ã«å¤ãããªãã¦ã¨ãã§ããªããã¨ãæã人ãå¤ãããããªãã§ãããããã¨ããããç§ã¯æãã¾ããw
ãããå®éã«é«éåã¯ããããã®ãããã®çç±ãåæãã¦ããã¾ãããã
ããããæ¢åã¯ã©ããªãã¸ãã¯ï¼
ä¸ã®äººããç¡ãã®ã§åããã¾ããï¼ åããã¾ããããæ¨æ¸¬ã¯ã§ãã¾ãã
1å¹´åãç´1åã¬ã³ã¼ãã«è¿«ããã¼ã¿éã§ãããã1åº¦ã«æ°å¹´åæ±ãå¤§è¦æ¨¡ã·ã¹ãã ã§ãã æ¯æãä¼å¡ä¿éºä¼ç¤¾ããå¥ç´æ å ±ãä¿éºéæ¯ææ å ±ãªã©ã®ãã¼ã¿ãåéãæ©æ§å ã§ãã¼ã¿ãå¦çããä¸ã§æçè¨ç®ã®åºç¤ãã¼ã¿ä½æãè¡ãã¾ã
ææ¬¡å¦çã¨ãã¦é廿 å ±ããå©çãæ±ããã£ã¦ãã¨ã¯æ¬è³ªçã«ãªãã©ã¤ã³ãããã§ããã¤ã¾ãããã©ã³ã¶ã¯ã·ã§ã³ã®èæ ®ã¯ä¸è¦ã§ãã
ãã¨ãã¨ããã¯ã¡ã¤ã³ãã¬ã¼ã ã§ç¨¼åãã¦ãã¾ããããä¸ç¥ã 2003å¹´ã«UNIXç°å¢ã¸ç§»æ¤ COBOLã·ã¹ãã ã¯æ¥æ¬IBM製ã®ã¡ã¤ã³ãã¬ã¼ã ã§ç¨¼åãã¦ãããä¿å®ã³ã¹ãã®é«ããåé¡ã«ãªã£ã¦ããã ãã®å 訳ã¯SQLã7å²ãCOBOLã2å²ãCè¨èªã1å²ãSQLã®ã¦ã¼ã¶ã¼å®ç¾©é¢æ°ãå©ç¨ã....
ç´æ¥ã®ç§»æ¤ã¯Unixããã§ããããã¼ã¹ã®ãã¸ãã¹ãã¸ãã¯ã¯ã¡ã¤ã³ãã¬ã¼ã ã§ä½æããã¦ããäºãåããã¾ãã SQLã7å²ãããã®ã§ããããªã¨ã¯æè¨ã§ãã¾ããããã¡ã¤ã³ãã¬ã¼ã ã§ä½ã£ã¦ãããªããã¼ã¹ã®ãã¸ãã¹ãã¸ãã¯ã¯IMSã®ãããªé層åãã¼ã¿ãã¼ã¹ãVSAMã¨ãã£ããã¡ã¤ã«ãã¼ã¹ã®å¯è½æ§ãããã¾ãã ãã®å ´åãRDBã使ã£ã¦ãã¦ãåã«ãã¼ã§ãã¼ã¿ãåå¾ããåãªãç®±ã«ãªã£ã¦ããå¯è½æ§ã¯é«ãã§ãã
ã¨ããã®ãIMS/VSAMã¯SQLã®ãããªæ¡ä»¶ä»ããã¼ã¿åå¾ãã§ãã¾ããããã®ããå ¸åçãªã¡ã¤ã³ãã¬ã¼ã ã§ã®DBæä½ã¯ãå ¨ã¦ã®ã¬ã³ã¼ããèªã¿è¾¼ãã§ããã°ã©ã ã§æè»ã«æ¡ä»¶å¤å®ãè¡ããã¨ããä½ãããã¦ãã¾ãã
çä¼¼è¨èª + SQLã§æ¸ãã¨ä»¥ä¸ã®ãããªå¦çã¯
sql = "SELECT SUM(amount) FROM hoge WHERE flag == 3" result = db.exec(sql) puts result
ã¡ã¤ã³ãã¬ã¼ã çãªã¢ã¼ããã¯ãã£ã ã¨ä»¥ä¸ã®ããã«æ¸ãå¿ è¦ãããã¾ãã
def isValid(record) record.flag == 3 end sum = 0 db.get('hoge').records.each{|record| if isValid(record) sum += record.amount end }
å ¨é¨ãã¼ã¿ãPGå´ã§èãã¦ããã®ã§ãã«ã¹ãã£ã³ã¨åçããããããã¯ã¼ã¯ã³ã¹ãçãå å³ããã¨ãã以ä¸ã®è² è·ããããäºã¯å®¹æã«æ³åã§ããã§ãããã å ¬éããã¦ãæ å ±ããã¯æ³åã®ä¸çãåºã¾ããããã¡ã¤ã³ãã¬ã¼ã æä»£ãã使ã£ã¦ããªããã®ãããªæ§é ã®å¯è½æ§ã¯é«ããä»åã¯ãã®æ¹åã§èãã¾ãã
RDBãªãã ããWhereå¥ä½¿ã£ããï¼
ãã¦ãæ¢åã®ãã¸ãã¹ãã¸ãã¯ãåè¿°ããéãç·ãã¡å¦çã ã¨ä»®å®ããæ§è½ãè¶³ããªãã¨ããç¶æ³ãçãããªãã©ãæ¹åãã¾ããï¼ ã»ã¨ãã©ã®äººã¯ãã¡ããã¨RDBã«ä»äºãããããWHEREå¥ä½¿ããææªã¤ã³ããã¯ã¹ãç¡ãã¦ããã£ã¡ã®ãçéãã¨èããã§ãããã çéã§ãããããããåç´ã«ããã¯ãããªãã±ã¼ã¹ãå¤ã ããã¾ãã
ä¾ã§ã¯isValid
ã¯ã·ã³ãã«ã«ã¬ã³ã¼ãã®ä¸ã®ç¹å®ã«ã©ã ã®å¤ãæ¯è¼ããã ãã§ããã
ããããå®éã¯é¥ãã«è¤éãªæ¡ä»¶å¤å®ãã¸ãã¹ãã¸ãã¯ãå¹¾éã«ã使ããã¦ãå¯è½æ§ãé«ãã§ããå¥ã®ãã¼ãã«ã®å¤ã¨ç¸é¢æ¯è¼ã¯å½ããåã«åºã¦ãã¾ããããããããããDBã®æ°ååãæåååã§ã¯ç¡ããCOBOLã®ãã¼ã¿åã®ãã¤ããªããã®ã¾ã¾RAWã¨ãã¦çªã£è¾¼ã¾ãã¦ããå¯è½æ§ããããã¾ããå¤ãã³ã¼ãã¯ãã¼ã¿å®¹éç¯ç´ã®ããã«booleançãªãã©ã°ã¨ã使ããã«ããããã·ããæ¼ç®ã§å¤å®ããã¨ãããããã§ããã
ãããªã£ã¦ããã¨åç´ã«WHEREå¥ã«å
¥ããã®ã¯é£ããã
æ ¹æ¬çãªãã¸ãã¹ãã¸ãã¯ãèãç´ãããJOINãCASEæãé§ä½¿ãã¦SQLã«ç¡çããå¤å®å¦çãç§»æ¤ããããç¡ãã§ããããã¦ãå¾è ã¯ãã«ã¹ãã£ã³ã«ãªããã¡ã§ããæ§è½ãä¼¸ã³æ©ããã¨ããããããç¡ããã¨ã ã¦ã¼ã¶å®ç¾©é¢æ°ãè²ã 使ããã¦ãããï¼å²ãSQLãããã¨ãããã¨ã¯å²ã¨å¾è å¯ãã®å¯¾å¿ãå ã ã¯ããã¦ããã®ãããããªãã§ãã
åè ã®æ ¹æ¬å¯¾å¿ãåºæ¥ãã°ãã¹ãã§ããããã¯åºæ¬è¨è¨ããããç´ããªã®ã§ãç§»æ¤ãæ´æ¹ã¬ãã«ã®ã³ã¹ãã ã¨å²ã«åããªãå¯è½æ§ã¯é«ããã§ãã
ãªããã¡ã¤ã«ã«ããã¨éããªãã®ãï¼
æåããSQLãåæã¨ãããã¸ãã¹ãã¸ãã¯ã§ã¯ç¡ããRDBã使ã£ã¦ãã¨ãã¦ãåãªããã¼æ¤ç´¢ã®ç®±ãç¡çããSQLã§è¤éãªãã¸ãã¯ãçµãã§ãå¯è½æ§ãé«ãã®ã§RDBã®ç¹å¾´ã§ããéè¨å¦çãæ´»ç¨ã§ãã¦ãªãå¯è½æ§ãè¿°ã¹ã¾ããã
ã§ã¯ããªããã¡ã¤ã«ã«ããã¨éããªãã®ã§ããããï¼ ã¾ããã¡ã¤ã«ã¨ãã£ã¦ãJSONãXMLãªã©ã®ãããªæè»ãªæ§é åãã¼ã¿ã§ã¯ç¡ããããããåºå®é·ãã¼ã¿å¦çãè¡ãªã£ã¦ãã¾ãããã®ããã·ãªã¢ã©ã¤ãºã極ãã¦ã·ã³ãã«ãªã®ã§é«éåãæå¾ ã§ãã¾ãã åºå®é·ã¨ããã®ã¯ã1ã¬ã³ã¼ãã¯10ãã¤ããã£ã¦ã1ãã¤ãç®ã¯IDãã2ãã5ãã¤ãç®ã¯é ç®åããæ®ãã®5ãã¤ãã¯æ°éãã¿ãããªæé»ã®ã«ã¼ã«ã§ãã¼ã¿ãè¨è¿°ãã¦ãããèªãã¨ãã«ã«ã¼ã«ã«å¾ã£ã¦åããé ã«è§£éãã¦ãããã¨ããæ¹å¼ã§ããä»ã§ãHDFSã®å é¨ãã¼ã¿ã¨ãé«éæ§ãè¦æ±ãããé¨åã«ã¯æ®éã«ä½¿ããã¦ããæè¡ã§ãã
ä½ã£ãé ç®ã¯ç©ºç½ã¨ã0ã§åãã¾ããCSVèªä½ã¯å¯å¤é·ã®ãã¼ã¿ãã©ã¼ãããã§ãããåºå®é·çã«ãããå¦çãã¦ããããç¡ããã¨æããã¾ãã ã¨ããã®ãåºå®é·ãã¼ã¿ã¨COBOLã®ã¬ã³ã¼ãæ§æã¯é常ã«ç¸æ§ãããããã§ãã
åºå®é·ã§ãã¡ã¤ã«ãå¦çãã¦ããå ´åã¯RDBã«æ¯ã¹ã¦ã¬ã³ã¼ãèªã¿è¾¼ã¿ã¯é常ã«é«éã§ãã ã¾ããSQLãåæã¢ã¯ã»ã¹/ãã©ã³ã¶ã¯ã·ã§ã³å¨ãã®ã³ã¹ããããã¾ãããã¾ããããã¯ã¼ã¯éä¿¡ã§ã¯ç¡ãã®ã§I/Oãé«éã§ãã
å ãã¦ãCOBOLã§åºå®é·ãæ±ããªããã·ãªã¢ã©ã¤ãºããä¸è¦ã§ããã»ã¨ãã©ã®COBOLã§ã¯ã¬ã³ã¼ãã®ã¡ã¢ãªã®ä¸èº«ããã®ã¾ã¾ãã¡ã¤ã«ã«åãåºãã®ãåºæ¬ã¨ãã¾ãã ããã¯ãã種ã®ãã¤ããªãã©ã¼ãããã§ãã*1ã·ãªã¢ã©ã¤ãºã®ã³ã¹ãç¡ããã¼ã¿ãèªããã¨ãã§ãã¾ãã
å ãã¦COBOLã¯ã³ã³ãã¤ã«è¨èªãªã®ã§ããããé度ã¯éãæ¹ã§ãã è¤éãªæ¡ä»¶å¤å®èªä½ãSQLã§ç¡çããå®è£ ããããã¯åç´ã«é«éåãããå¯è½æ§ã¯é«ãã§ãã
ãããã®ãã¤ã³ãã«ããä¾ãå ¨ãã¼ã¿ãèããå¦çã«ãªã£ãã¨ãã¦ããæé©ãªå©ç¨ãããã¦ç¡ãSQLããå¤§å¹ ã«é«éåãããå¯è½æ§ã¯ååã«ããã¾ãã
並ååã¨åæ£å¦çã«ããé«éåã®å¯è½æ§
ä»å使ã£ã¦ãããåããã¾ãããããã¼ã¿ãä¾ãã°ç¨®å¥ã¨ãå¹´æã§åå²ãã¦å¦çã§ãããªã並åå¦ç/忣å¦çã«ããé«éåãæå¾ ã§ãã¾ãã ãã©ãã£ã·ã§ãã«ãªRDBã¯åæãªã¯ã¨ã¹ããåããã®ã¯å¾æã§ãä¸ã¤ã®å¦çã並åå¦çããã®ã¯ãã»ã©å¾æã§ã¯ç¡ãæ°ããã¾ã(ãã©ã¬ã«ã¯ã¨ãªã¨ããããããã©)ãå ãã¦æ ¹æ¬çã«ã¹ã±ã¼ã«ã¢ã¦ããããããã¢ã¼ããã¯ãã£ã¨ããã®ãããã¾ãã
ãã®ããããããã£ãå¦çãå¯è½ãªãã¼ã¿ç¹æ§/ãã¸ãã¹ãã¸ãã¯ã§ãã£ãå ´åã¯åç´ã«ãã«ãã¹ã¬ãããã¸ã§ãã®ä¸¦ååããããã¯Hadoop/Sparkã®æ´»ç¨*2ãããã¨ã§é«éåãçããã¨ãã§ãã¾ãã Unixãµã¼ã(AIX?) Windowsãµã¼ãã«ãªã£ãã®ã§ã¯ã©ã¦ãåã社å ã§ãvmwareã使ã£ãã¹ã±ã¼ã«ã¢ã¦ãã¯å®¹æã«ãªãã§ããããå®éããã¹ãç°å¢ã¯ä½ãããããªã£ãã¨ãããã
COBOL使ãå¿ è¦ãã£ãã®ï¼ Javaã¨ããããã¡ã ã£ãã®ï¼
ããã¯åºã¦ãæ å ±ã ãããã¯ãªãã¨ãã§ãããä¸å¿è¨äºä¸ã«ã¯ããããå¦çãã¡ã¤ã³ã®ããJavaã§ã¯é度ãåºãªãã£ãããã¨ããã¾ããå人çãªèªèã¨ãã¦Javaã¯ããã¾ã§é ãè¨èªã§ã¯ç¡ãã èããããã®ã¯ããã¸ã§ã¯ãã®çµç·¯çã«Javaã®æç¹ã§ã¯RDBæ¤å»ã¯æ±ºã¾ã£ã¦ãªãã£ãã®ã§RDB + Javaãæ¯è¼ã®å¯¾è±¡ã§ããã¨ããCOBOLãä»ã®ã¬ã¬ã·ã¼ã¨ã®äºææ§ãä¿ã¤ããã«æ¤è¨ããFWãéãã¨ãããããæ¹åããç¡ããã¨ããæ°ããã¾ãã
Javaããããã¯Rubyãªããã使ã£ã¦ãªã©ã¤ããã¦ããCSVããç¡ãã¦KryoãMassagePackã®ãããªé«éãªã·ãªã¢ã©ã¤ã¶ã使ãããåã ã®ãªã©ã¤ãã³ã¼ãã§ã¯COBOLãããã¨ãäºææ§ã¯æ¨ã¦ããã¨ããäºãããã°çµæ§é度åºãã®ã§ã¯ï¼ ã¨ããæ°ãããªããç¡ãã
ãã¶ããåç´ãªé度以ä¸ã«ä»è¨èªã¸ã®ç§»æ¤ã³ã¹ã/ç§»æ¤å¾ã®ã¡ã³ãã³ã¹ããå å³ããçµæããªãã¨ããæ°ããã¦ãã¾ããCOBOLã®éçºã«æ £ãã¦ããªãäººãæ´»ããããã COBOLã«ã³ãããããéçºä½å¶ãç¶æãããªãCOBOLã«ç¡çããªãç¯å²ã§éç´ããã®ã¯ä¸ã¤ã®ã¸ã£ãã¸ã§ã5å¹´ç¨åº¦ã®å»¶å½ã¨ãã¦ã¯ååããªã 10å¹´å¾ã20å¹´å¾ã¯æè¡è ãããã«æ¸ãã ãããåãããªããã©COBOL「私を殺すと言ってた言語は、みんな死んだよ」 | おごちゃんの雑文ã¨ãã話ãããã®ã§ã大ä¸å¤«ãªæ°ãããã
ã¾ã¨ã
ãã¦ãè²ã 仮説ãéãã¦ã¯ãã¾ãããRDBãããã¦CSV + COBOLã«ãããé«éåããçç±ããèå¯ãã¦ã¿ã¾ããããã£ã¦ããã©ããã¯ç¥ããªãã§ããã大ããå¤ãã¦ããªãããããªããã¨ã ããã¡ã¤ã«ãCOBOLã«ããã¨ãæä»£ã®éè¡ï¼ãã¨æããã¡ã§ãããæ°ãããã®ãå¸¸ã«æé©è§£ã¨ã¯éããªãã®ã§å¤ãã®æè¡ãå¦ãã§èªåãã¡ã®ç¶æ³ã«æé©ãªãã®ãé¸ãã§ããããã§ããã
ã©ãã§ãè¯ããã©COBOLã®ç§»æ¤å ã¨ãã¦ã¯Ruby(ç¹ã«JRuby)ããDecimalãç°¡åã«æ±ãããæ¯è¼COBOLçãªã·ã³ãã«ãã¨æè»ãªæ½è±¡åã両ç«ã§ããã¨æãã®ã§çµæ§è¯ãã¨æã£ã¦ããJavaããCOBOLã£ã½ãæ¸ããããã¨æãããã¬ã¼ã ã¯ã¼ã¯ã¯ä½ãåæã ãã ã ãããéèç³»SEã¯ãã£ã¨Rubyã«å¯è½æ§ãæããã¹ãï¼
ããã§ã¯Happy Hacking!