Carpe Diem

備忘録

MongoDBでJumboフラグのついたチャンクの分割

概要

シャード構成のMongoDBがチャンクの分割に失敗し、一定サイズを超えるとjumboというフラグが付きます。
普通の環境ではそうそう起きませんが、大量のドキュメントを扱っているとたまに発生します。
今回はそれの解消方法を紹介します。

環境

  • MongoDB 3.2.17

どういう状態か

シャード構成にしてシャードキーを設定することで本来分散するようになりますが、状態を確認した時に

mongos> sh.status()
...
  balancer:
        Currently enabled:  yes
        Currently running:  unknown
        Collections with active migrations:
                balancer started at Thu Apr 18 2019 23:55:15 GMT+0900 (JST)
                test.foo started at Thu Apr 18 2019 23:55:16 GMT+0900 (JST)
        Failed balancer rounds in last 5 attempts:  0
        Migration Results for the last 24 hours:
                1296 : Failed with error 'aborted', from shard_4 to shard_1
                1296 : Failed with error 'aborted', from shard_2 to shard_1
                11669 : Failed with error 'aborted', from shard_0 to shard_1
...

このようにmigrationに失敗している時はjumboチャンクが発生している可能性が高いです。

続きを読む

npm install する時のnpmのバージョンを固定する方法

概要

npmのバージョンを上げた(v6.x.x)ところ、以下のissueと同じケースに当たってCircleCIのキャッシュが効かない問題が起きました。

github.com

具体的には

  • 開発ではMacを使用している
  • 開発用MacとCircleCIのNode.js、npmバージョンは同一である
  • CircleCIでpackage-lock.jsonを元にnpm installすると、package-lock.jsonが修正される
  • package-lock.jsonハッシュ値が変わりキャッシュが使えない

という現象です。同一バージョンなのになんでやねん、という状況。

旧バージョン(v5.6.0)のnpmであれば上記の現象は起きなかったため自分の環境をそれにすればいいわけですが、他のメンバーが加わった時に同じ問題が起きうるのでnpmのバージョンを固定する方法を探してみました。

続きを読む

Angular のバンドルファイルのサイズを可視化

概要

Angular CLIはTree Shakingだったりbuild-optimizerなど、それだけである程度最適化する事が可能ですが、一方で外部ライブラリなどはどれくらいファイルがあるか見落としがちです。
今回はそういったものを可視化する方法を紹介します。

環境

  • Angular 7.2.12
  • Angular CLI 7.3.8
  • webpack-bundle-analyzer 3.3.0

webpack-bundle-analyzerを使う

webpack-bundle-analyzerという解析ツールを使います。
これを使うと以下の画像のようにwebpackのバンドルファイルを可視化することができます。

f:id:quoll00:20190410225244g:plain

ref: https://github.com/webpack-contrib/webpack-bundle-analyzer

続きを読む

context.WithCancel, WithTimeout で知っておいた方が良いこと

概要

christina04.hatenablog.com

でも話したcontext.Contextタイムアウト、キャンセルなどのハンドリングができて便利ですが、使う際に知っておいた方が良いことをいくつかまとめました。

環境

Tips

Q. 親・子の両方でWithTimeoutが設定されたらどうなるか?

例えば

  • 親:4秒
  • 子:1秒

の時、もしくはその逆の時どうなるか、です。

続きを読む

gRPC の Unary Interceptor の基本的な使い方

概要

gRPCのInterceptorのClient側、Server側の基本的な使い方を紹介します。

環境

Interceptorの種類

以下の4つがあります。今回はUnaryの方の使い方を説明します。

サーバサイド

クライアントサイド

続きを読む

Multi Match Queryのtypeの違い

概要

以前Bool Query と Dis Max Query の違いについて書きました。
今回はその中で出てきたMulti Match Queryのtypeの違いについて書きます。
どれも複数のフィールドに対して実行するクエリですが、それぞれ用途が異なります。

環境

  • Elasticsearch 6.6.0

データ投入

curl -s -H "Content-Type: application/json" \
  -XPOST localhost:9200/my_index/my_type/_bulk -d '
{"index": {"_id": "1"}}
{"title": "Quick brown rabbits", "body": "Brown rabbits are commonly seen."}
{"index": {"_id": "2"}}
{"title": "Keeping pets healthy", "body": "My quick brown fox eats rabbits on a regular basis."}
{"index": {"_id": "3"}}
{"first_name": "Will", "last_name": "Smith"}
{"index": {"_id": "4"}}
{"first_name": "Smith", "last_name": "Jones"}
'
続きを読む

ALBのアクセスログをAthenaで分析

概要

AthenaでALBのアクセスログの分析が非常に簡単にできるので、設定方法とよく使うクエリを紹介します。

手順

ALBアクセスログをS3に保存

新規バケットを同時に作成する場合

バケットポリシーが自動で設定されるので楽なやり方です。
ELBの属性の編集でチェックボックスをONにします。

f:id:quoll00:20190209072232p:plain

このときにS3バケットの作成を一緒にやります。

続きを読む