kikeda1104's blog

備忘録・技術に関することを書いています。(webエンジニア)

2018-01-01から1年間の記事一覧

文字列の連結(`#+`, `#{}`)のベンチマーク

質問されてどうなのか知らなかったので、ベンチマークを取ってみた。 - ruby 2.2.10 - macOS - 3.3 GHz Intel Core i7 コード(sample利用) require 'benchmark' Benchmark.bm 10 do |r| r.report "#r+" do result = '' 1000000.times do chr = [*'a'..'z'].s…

shellコマンドのエスケープ[Ruby]

外部コマンドで、ファイルパスを渡す際にエスケープが必要になり探していたら見つけた。 前提 ruby 2.2.10 rails 4.2.x.x コマンドまたは引数の文字列をエスケープ require 'shellwords' file_name = 'tmp/file_name1(1).txt' system "ls -lShellwords.es…

Redshiftへのデータ流し込み(Batch)

Batchを作ることになったので、そちらを書いていきます。warningを解消する際にすでに公開していたバッチですが、コードを改善したのでまた載せていきます。 サンプルコードは参考までにしてください。 前提 Rails(4.2.x) Ruby(2.2.10) RedShift S3 検討・方…

Rubyからシェルコマンドを実行する(Kernel.#system ..etc)

調べていたので、書いていきます。 前提 Ruby 2.2.10 外部コマンドの呼び出し 実装で利用したは、#system, #`を利用していて、コマンドを実行して返却値、ステータスは無視するケースと返却値を利用するケースで分けて使っています。 Kernel.#system 引数を…

AWSのメモリ使用量のモニタリング

AWS

EC2のメモリ使用量を継続的に監視するために、cloudwatchに転送するAWS公式で出しているスクリプトを利用した。new_rericが入ったんだけれども、みれる状況じゃなかった。(諸事情) 前提 AWS EC2 CloudWatch Cloud SNS 方針 EC2のメモリ・スワップ使用量は、E…

mysql([Warning] Using a password on the command line interface can be insecure.)

コマンドファイルを作っている際に出てきたので、警告を表示しないようにする。 前提 mysql: 5.7.18 ruby 2.2.10 Rails(secret.ymlに依存していて、環境変数で書かれていない) 解決方法 confファイルを利用して、client情報を渡すことにする。 confファイル…

sidekiq + redisの構築(Rails 4系) 4-1

AWS

インフラの準備を分割して書いていきます。 前提環境: ElasticCache(Redis 4) AWS EC2(Amazon linux) AWS(Amazon Linux) 東京リュージョン 検証環境として、立てていきます。(EC2はのぞく) EC2 EC2は立てている前提で、サーバにsshで接続して、redis(client)…

Redshiftへのデータの流し込みについて

AWS

環境の違いでスクリプトを変えたので、そちらを載せます kikeda1104.hatenablog.com kikeda1104.hatenablog.com SQLファイル -> sh # tab区切りでファイル出力: dump.shとする PASSWORD=password mysql -u username -p"$PASSWORD" -h hostname db -e "select…

Redshiftの環境構築

AWS

Redshiftの環境構築について書いていきます。 前提 RedShift データサイズが増加量を計測して毎月1GB増える 将来的にデータサイズが、クラスターのストレージを超える可能性も検討してサイズ変更ができるように設計 Snapshotを利用したデータサイズの変更に…

Basic認証(S3 + CloudFront + Lamdba)

AWS

コーポレートサイトを作っていて検証として公開したいが、閲覧の制限をかけたかったので急ぎめでBasic認証をかけました。 前提 httpsでの公開まで終えている Lamdba CloudFrontと連携させてBasic認証を行う 環境構築 Lamdbaで、リュージョンをバージニア北部…

Redshiftのソートキー

AWS

前回の記事の続きでRedShiftのチューニング(ソートキー)を定義します。今回は結論はなしで、ベンチマークを残します。 前提 RedShift PostgreSql ソートキー RedShiftでは、ソートキーを元に並び替えてデータをディスクに格納します。 最新のデータが最も頻…

クエリ実行時間の表示(PostgreSQL, RedShift)

PostgreSQLクライアントから操作する際に、クエリの実行時間が、表示されていない。計測で必要だったので設定を調べた。 前提 Mac OS PostgreSQL(Client) RedShift コマンド \timing db=# \timing Timing is on. # COPYコマンド INFO: Load into table 'tabl…

RedShiftのエンコード

AWS

前回の記事では、テーブル定義まで進めて検証しましたが、今回はエンコードについて書いていきます。 前提 RedShift エンコード メリットは下記の通りです。 圧縮は、データの格納時にそのサイズを小さくする列レベルの操作です。圧縮によってストレージスペ…

Unicornの参照先が変わらないケース(Capistrano)

前提条件 AWS EC2 Amazon linux Unicorn + Nginx + Rails(4.2) + Capistrano 問題 デプロイした後にWeb + Appサーバにアクセスすると、release versionが古いバージョンにアクセスしている(しかもviewsのみ)そのrelease versionは削除されているので、templa…

sshの接続切れ対応(Broken pipe)

以前から利用しているサーバに対してクライアントには設定(.ssh/config)していたが、サーバに始めて接続する際に、オプションを設定していなかった。 サーバ接続中に起きたので、再設定して、sshした。 接続状態を維持したいので、ServerAliveIntervalとServ…

sidekiq + redisの構築(Rails 4系) 3

今回は、workerのテストを書いていきます。 前提環境 Rails 4.2.x Ruby 2.2.10 Redis Rspec CI(circle ci) Redis Worker Classの場合 方針を決めます。retryの上限数を超えた場合のテストも書きたいので、(Dead Job Queueに移す前に通る # app/workers/high_…

テーブル定義/データインポート(Amazon Redshift)

前回mysqlからtsvファイルとしてダウンロードしたファイルをredshiftにデータをロードする。検証目的なので、batch処理は後日。 前提環境 Redshift(AWS) MySql(5.7系) macOS 10.13.5 PostgreSQL 9.6.2 前回の記事でtxtファイルをs3アップロードしている Reds…

tsvファイル出力(MySQL)とaws s3アップロード

RedShiftへのデータロードで、テーブルからcsvでダウンロードしてs3にアップロードします。txtファイルの出力とs3のアップロードについて書いていきます。 txtファイル SQLファイルを作る # dump.sql select * from c into outfile '/tmp/table_name.txt' FI…

sidekiq + redisの構築(Rails 4系) 2

前回の続きで、sidekiqのデプロイについて書いていきます。 前提環境 rails 4.x ruby 2.2.10 capistrano 3.5 capistranoを利用していたので、capistrano/sidekiqをGemに追加します。 unicorn, pumaなどの設定は無視していきます。 実装 # Gemfile group :dev…

sidekiq + redisの構築(Rails 4系)

非同期処理を取り入れる提案をして、採用されたので構築していました。アウトプットとして何回かに分けて記事を書いていきます。 前提環境 Mac OS sidekiq(non pro, non enterprice) redis rails 4.2.x ruby 2.2.x 前提環境の背景を話すと、Rails 5系にアッ…