Archive for the ‘Linux’ Category

1億2千万行のcsvデータをデータベースに保管したくなったので、rubyを使ってデータベース(Mysql)に挿入した。

gem install mysql

でrubyのmysqlライブラリを入れようとしたら

libmysqlclient-dev を先にaptでインストールするべしとのお告げを得たので

sudo apt install libmysqlclient-dev

でまずはlibmysqlclient-devをインストール

その後

gem install mysql

で無事gemが入った

以下mysqlDBにファイルからデータをINSERTするのに使ったコードです。

#!/usr/bin/ruby

require 'mysql'

client = Mysql::new("127.0.0.1", "username", "password", "db-name")

# set charcter code UTF-8
client.query("set character set utf8")

File.open('./source.csv', 'r') do |f|
    f.each_slice(1000) do |chunk|
        chunk.each do |lines|
			# chop() cuts "\n" end of line
            buf = lines.chop.split(',')
            client.query("INSERT INTO test(time,price,amount) VALUES(#{buf[0]},#{buf[1]},#{buf[2]});")
        end
    end
end

client.close

io.each_slice(1000)

普通のeachを使うと一行ずつの処理になってしまい、時間もかかるものと思われるが、each_slice(n)によってnの数分だけ一気に処理を行うことができる。

nの数は各々のメモリ搭載量に合わせて変更していただければと思います。

ただ想定外だったのは、これでも一万件のレコードを挿入するのにおよそ1分くらいかかってしまうこと

単純に計算して1億2千万件のレコードを挿入し終えるのは166時間以上の時間が必要ということになる…

NOSQLデータベースだったらもっと早いんだろうね。

そのうちそっち方面も探っていきたい

ちょっと大量のファイル操作をsshからやることになって、以前から使ってみたいと思っていたmidnight-commander(mc)をダウンロードしてみた。

しかし、オプションが開けない・・・

スクリーンショット 2019 06 07 13 06 27

何とOで開くのこれー?と思って色々なmc関連のサイトを見たが答え見つからず。

結局twitterを検索して見つけたのである

正解はF9を押してPullDnを起動するのであった

スクリーンショット 2019 06 07 13 07 46

いやー、これは悔しい。
わからんでしょこれ。

と思ったので私と同じ悩みの人たちの目に届きますように

ちょっとハマったので備忘録として書いておきます。

最近サーバーでグラフを描画するようなことをしたいと考えていまして、そうなるとsshだけではだめで、GUIを動かす必要があるということでVNCを導入しました。

使ったVNC serverはx11vnc: v0.9.13です。

まずはx11vncをインストール

#apt install x11vnc

続いて、パスワードを設定します

#ディレクトリ名ubuntuになっているところはご自分のユーザー名に置き換えてください
$x11vnc -storepasswd
Enter VNC passwd: [enter new password]
Verify password: [enter the new password again]
Write password to /home/ubuntu/.vnc/passwd? [y]/n y
Password written to : /home/ubuntu/.vnc/passwd

ではx11vncを起動しましょう

#x11vnc -bg -auth guess -forever -loop -noxdamage -repeat -rfbport 5900 -shared -rfbauth /home/ubuntu/.vnc/passwd

これでうまくいかないときはLightdmというソフトウェアを入れましょう

#apt install lightdm

デフォルトディスプレイマネージャーを選択する画面がでるので、lightdmを選択します。

下記のサイトを参考にさせてもらいました。
Cinnamon その19 - ディスプレイマネージャーをLightDMに切り替えるには・Slick Greeterを利用するには - kledgeb

このあと起動時にx11vncを同時に起動させるには/etc内のconfigファイルを設定するのが定石っぽかったのですが、自分はcrontabに@rebootを設定してそこに上に書いたx11vncの起動スクリプトを書くことでオートスタートできるようになりました。

#sudo crontab -e

@reboot x11vnc -bg -auth guess -forever -loop -noxdamage -repeat -rfbport 5900 -shared -rfbauth /home/ubuntu/.vnc/passwd

以上でーす