Monthly Archives: 3月 2016

post by yamamoto | | 0 | 203 views

MongoDB の collection 内の すべての key を取得する

RDBM関連データベースの table に相当する collection に key : value のペアーが保管されている、key は field に似ていますが、一つ一つのオブジェクトに入っている key は可変です。だから、RDBMの field の一覧を出すのは簡単ですが、MongoDB は collection 内のオブジェクトを巡って取ってくる必要がある。  

 

{ "result" : "my_collection_keys", "timeMillis" : 290837, "counts" : { "input" : 3883160, "emit" : 117368229, "reduce" : 1281456, "output" : 33 }, "ok" : 1 }   実際にDPCのEFファイル、388万件ほどで実行してみた。 結果は下記の通りです。  db[mr.result].distinct("_id") [   "EF-0",   "EF-1",   "EF-10",   "EF-11",   "EF-12",   "EF-13",   "EF-14",   "EF-15",  

post by yamamoto | | 0 | 239 views

Mongodb で大量データ(390万件弱)をインポートしてみた

DPC外来のEFファイル(32列、2.1GB、3,883,160件)をMongodbにインポートしてみました。進捗の表示はずっと0.0Bなので、インポートできないと思ったが、一応ちゃんとインポートされて、所要時間はおよそ2分でした。しかもデータベース上の容量は 0.461GBで収またのですね。 db.EFn.find({"EF-0":201504}) で検索してみてもすぐレスポンスがあって、全然ストレスを感じませんでした。複雑な mapReduce はしていませんが、これからいろいろ分析してみます。 【以下オペレーション記録】 mongoimport --file DPC_EFn_201504-12_title.txt --headerline --type tsv -d dpc -c EFn --drop --ignoreBlanks 2016-03-24T12:16:06.388+0900 connected to: localhost 2016-03-24T12:16:06.389+0900 dropping: dpc.EFn 2016-03-24T12:16:09.378+0900 [........................] dpc.EFn 0.0 B/2.1 GB (0.0%) 2016-03-24T12:16:12.378+0900 [........................] dpc.EFn 0.0 B/2.1 GB (0.0%) 2016-03-24T12:16:15.377+0900 [........................] dpc.EFn 0.0 B/2.1 GB (0.0%) 2016-03-24T12:16:18.378+0900 [........................] dpc.EFn 0.0 B/2.1 GB (0.0%) 2016-03-24T12:16:21.378+0900 [........................] dpc.EFn 0.0 B/2.1 GB (0.0%) 2016-03-24T12:16:24.377+0900 [........................] dpc.EFn 0.0 B/2.1 GB (0.0%) 2016-03-24T12:16:27.377+0900 [........................] dpc.EFn 0.0 B/2.1 GB (0.0%) 2016-03-24T12:16:30.377+0900 [........................] dpc.EFn 0.0 B/2.1 GB (0.0%) 2016-03-24T12:16:33.377+0900 [........................] dpc.EFn 0.0 B/2.1 GB (0.0%) 2016-03-24T12:16:36.377+0900 [........................] dpc.EFn 0.0 ...

post by yamamoto | | 0 | 257 views

DPCデータ:厚労省 公開統計表 => Node.jsで自動ダウンロード(1)

  とりあえずの目標は、下記のサイトにある各年度の公開統計表ページのURLを取得すること。 http://www.mhlw.go.jp/stf/seisakunitsuite/bunya/0000049343.html 【gethtml.js】 / モジュールロード var http = require('http'); var Iconv = require('iconv').Iconv;   // ダウンロード先URLを指定する var url = 'http://www.mhlw.go.jp/stf/seisakunitsuite/bunya/0000049343.html';   // ダウンロードする var req = http.get(url, function (res) {      var html='';       // データを受け取るたびに、文字列を追加     res.on('data', function (line) { var iconv = new Iconv('SHIFT-JIS','UTF-8//TRANSLIT//IGNORE');         var link=iconv.convert(line).toString(); link = link.replace(/[\n\r]/g,""); html += link;     });     // ファイルのダウンロードが終わるとendイベントが呼ばれる       res.on('end', function () { var result=html.match(/<a href=.*?<\/a>/g); for (var ...

post by yamamoto | | 0 | 254 views

Node.js:ネット巡回に必要な日本語コード変換

前回、簡単にHTMLファイルをダウロードしましたが、今回は日本語のエンコーディングがSHIFT-JISのページをUTF-8に変換して標準出力に出す方法を紹介します。 まず、追加する必要があるモジュールは node-iconv です。インストールは簡単です。   npm install iconv --save   【サンプルプログラム」gethtml.js // モジュールロード var http = require('http'); var Iconv = require('iconv').Iconv;   // ダウンロード先URLを指定する var url = 'http://www.mhlw.go.jp/stf/seisakunitsuite/bunya/0000049343.html';   // ダウンロードする var req = http.get(url, function (res) {     res.on('data', function (html) { var iconv = new Iconv('SHIFT-JIS','UTF-8//TRANSLIT//IGNORE'); console.log(iconv.convert(html).toString());     });       // ファイルのダウンロードが終わるとendイベントが呼ばれる     res.on('end', function () {         console.log('finished!!!');     });  });   // 通信エラーなどはここで処理する req.on('error', function (err) {     console.log('Error: ...

post by yamamoto | | 0 | 192 views

Node.js:ネット巡回の第一歩

【getHTML.js】   // モジュールロード var http = require('http'); var fs = require('fs'); // ダウンロード先URLを指定する var url = 'http://www.mhlw.go.jp/stf/seisakunitsuite/bunya/0000049343.html'; var outFile = fs.createWriteStream('file.html');     // ダウンロードする var req = http.get(url, function (res) {          // ダウンロードした内容をそのまま、ファイル書き出し。     res.pipe(outFile);       // ファイルのダウンロードが終わるとendイベントが呼ばれる     res.on('end', function () {         console.log('finish download.');     });  });   // 通信エラーなどはここで処理する req.on('error', function (err) {     console.log('Error: ', err); return;   });   【実行】node getHTML.js

post by yamamoto | | 0 | 253 views

DPCデータ:厚労省 公開統計表

サイト内リンク

DPC導入の影響評価に関する調査 に現時点平成18年度から平成26年度のデータが公開されています。    平成26年度  平成25年度  平成24年度  平成23年度  平成22年度  平成21年度  平成20年度  平成19年度  平成18年度 これらのリンク先に主にPDFとExcelがありますが、まず自動的にExcelファイルをダウンロードしてみるのは面白いかもしれません。 一応、手動でダウンロードしてみましたが、Excel ファイルは、古い xls の形式なので、 ssconvert で直接ダウンロードして xlsx に変換した。ちなみに、ssconvertは gnumericの一部なので、debianは、sudo apt-get install gnumeric でインストールする。Macは、brew install gnumeric でインストールする 【ダウンロード&変換】   ssconvert http://www.mhlw.go.jp/file/05-Shingikai-12404000-Hokenkyoku-Iryouka/0000104287.xls 0000104287.xlsx   なんで、変換する必要があるのかどういうと、Node.js の exceljs  で中身を取り出したいのだ(npm install exceljsで debian や mac でインストールできる)   【app.js】 var Excel = require('exceljs'); var targetExcelPath = "0000104287.xlsx"; var workbook = new Excel.Workbook(); workbook.xlsx.readFile(targetExcelPath).then(function () {     var sheet1 = workbook.getWorksheet(1);     for(var i=1;i<=10;i++){         var str = "";         for(var ...

post by yamamoto | | 0 | 185 views

Node.js を動かし続けるため、Forever を使ってみてダメだったので、nohup node にしてみた!

  cron に1分おきでサイトを確認して落ちたらForeverで再起動してみたが、大量のNodeプロセスが残されたため、メモリ足りなくなってサーバ自体が落ちた>< だから、下記のように変えてみた。 sudo crontab -e で下記の一行を追加 0-59/1 * * * *   /bin/bash /home/username/site_3000_alive.sh site_3000_alive.sh  -------------------------- #!/bin/bash   #================================================================ # check web server # # wget option # -nv : no verbose  # -S  : print server response # -t  : tries number  # -T  : timeout seconds # --spider             : don't download anything. # --http-user=USER     : set http user to USER. # --http-password=PASS ...

post by yamamoto | | 0 | 238 views

脆弱性スキャナーも文句いわない Postfix の SSL 設定

2016年3月10日時点で、 sudo vi /etc/postfix/main.cf を実行して、下記の数行を追加して、   #20160310 時点 smtpd_tls_eecdh_grade = strong tls_preempt_cipherlist = yes smtpd_tls_loglevel = 1 smtp_tls_loglevel = 1 smtpd_use_tls = yes smtp_use_tls = yes smtpd_tls_security_level = may lmtp_tls_mandatory_ciphers = high smtp_tls_mandatory_ciphers = high smtpd_tls_mandatory_ciphers = high smtp_tls_security_level = may smtpd_tls_mandatory_exclude_ciphers = MD5, DES, ADH, RC4, PSD, SRP, 3DES, AECDH, eNULL smtpd_tls_exclude_ciphers = MD5, DES, ADH, RC4, PSD, SRP, 3DES, AECDH, eNULL smtp_tls_mandatory_exclude_ciphers = MD5, DES, ADH, RC4, PSD, SRP, 3DES, ...

post by yamamoto | | 0 | 191 views

いろなOSに最新の Node.js をインストルする

Mac OSX(10.9.5) Node.js の本家のページからインストール用のパッケージをダウンロードし、実行するのみです。 https://nodejs.org/en/ https://nodejs.org/dist/v5.7.1/node-v5.7.1.pkg ラズベリーパイ(B) まずは、本家の「https://nodejs.org/dist/」に配布されているバージョンのうち、最新のものへ飛びます。 例えば、現時点の最新は、「https://nodejs.org/dist/v5.7.1/」 なので、armv6l のファイルを wget します。 wget https://nodejs.org/dist/v5.7.1/node-v5.7.1-linux-armv6l.tar.gz  tar zxvf node-v5.7.1-linux-armv6l.tar.gz cd node-v5.7.1-linux-armv6l/  sudo cp -r * /usr/local/ node -v  v5.7.1がでれば、OKです。  ラズベリーパイ2(B) まずは、本家の「https://nodejs.org/dist/」に配布されているバージョンのうち、最新のものへ飛びます。 例えば、現時点の最新は、「https://nodejs.org/dist/v5.7.1/」 なので、armv7l のファイルを wget します。 wget https://nodejs.org/dist/v5.7.1/node-v5.7.1-linux-armv7l.tar.gz  tar zxvf node-v5.7.1-linux-armv7l.tar.gz cd node-v5.7.1-linux-armv7l/  sudo cp -r * /usr/local/ node -v  v5.7.1がでれば、OKです。  Debian wheezy ■/etc/apt/sources.list.d/backports.list あたりに、下記を追記しておく。  deb http://ftp.jp.debian.org/debian/ wheezy-backports main contrib non-free deb-src http://ftp.jp.debian.org/debian/ wheezy-backports main contrib non-free  上記を追記し保存してから、下記のコメントを実行してください。 $ sudo apt-get update $ sudo apt-get install nodejs nodejs-legacy nodeパッケージにはnpmは含まれていないので、下記コマンドでインストールしておく。 # curl -L https://npmjs.org/install.sh | sh     【参考サイト】 http://kotak.hatenablog.com/entry/2014/06/18/190500 

post by yamamoto | | 0 | 251 views

Debian wheezy に MongoDB 3.2.3 をインストールする

本家のサイトの方法でインストールするとき、下記のエラーが発生しますので、   [FAIL] Starting database: mongod failed! invoke-rc.d: initscript mongod, action "start" failed. dpkg: error processing mongodb-org-server (--configure): このページの情報でうまくインストールできましたが、   sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927 sudo apt-get update echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/3.2 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list sudo export LANGUAGE=en_US.UTF-8 export LANGUAGE=en_US.UTF-8 export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8 sudo locale-gen en_US.UTF-8 dpkg-reconfigure locales sudo dpkg-reconfigure locales sudo apt-get install mongodb-org-server sudo apt-get install mongodb-org 下記のワーニングが mongo を実行した後に出てしまいました。   Server has startup warnings:  2016-03-06T19:47:24.176+0900 I CONTROL  [initandlisten]  2016-03-06T19:47:24.176+0900 I CONTROL  ...