Carpe Diem

備忘録

NoSQL

Bigtableに時系列データを保存する

概要 Bigtableで時系列データを保存する手段として 縦長のテーブルを使用する 横長のテーブルを使用する 列バージョンを利用する の3種類あるのでそれぞれの特徴、使い方を紹介します。 環境 go v1.15.0 Google Cloud SDK v293.0.0 cloud.google.com/go/big…

Cassandraのデータモデルを理解する

概要 Cassandraはワイドカラム型のKVSでデータモデル図もネット上には色々上がっていますが、実際にはTable Schemaもあって普通のRDBのような表に見えます。 またkeyも primary key row key partition key composite key clustering key とたくさん出てきて…

MongoDB 4.2でシャーディング・レプリカセットのクラスタ構築

概要 気づいたらMongoDBも4.2になっていました。 以前に DockerでMongoDBのレプリカセットを構築 - Carpe Diem でレプリケーションを、 MongoDBでシャーディング - Carpe Diem でシャーディングを構築しましたが、設定項目が代わっていたりしたので復習がて…

EmbulkでMongoDBのデータをBigQueryへ

概要 ユーザの行動ログで利用しているデータがDBにあるので、それをまるっとBigQueryへ書き込む方法をEmbulkを使って説明します。 BigQueryにマスタデータを保存する理由は? 単純に行動ログに保存される関連データがIDのみで保存されていると、詳細が知りた…

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

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

負荷が低いのにアクセスを捌けきれない時の対応

概要 MongoDBでCPU使用率やロードアベレージが高くないのに処理が詰まっている現象が起きました。 その時間にbatchが動いていてアクセスが急に増えることが原因と言うのは分かっているのですが、負荷的には十分余裕があり不思議な状態でした。 そこでdstatで…

MongoDBのデータをElasticsearchにリアルタイム同期

概要 以前はMongoRiverを使う - Carpe Diemで紹介したようにRiverという機能を使って同期を実現させていました。 しかしながらElasticsearchがRiverを廃止することを決め、バージョン2.x以降は使うことができなくなりました。 そこで調べてみて挙がったのは…

DockerでMongoDBのレプリカセットを構築

概要 MongoDBのレプリカセットを組んで検証する必要があったのでdockerを使って構築することにしてみました。 環境 Docker 1.12.0 Mongo 3.2.9 構成 コンテナ名 役割 ホスト側ポート mongo1 Primary 30001 mongo2 Secondary 30002 arbiter Arbiter。データは…

MongoDBのAggregationとSQLの比較

概要 MongoDBのAggregationとSQLとの比較です。 どうやって集計するかな?と悩んだ時に慣れているSQLとの比較があると分かりやすいと思って公式ドキュメントに沿った形で載せてます。 環境 MongoDB 3.0.7 オペレータの比較 SQL MongoDB WHERE $match GROUP B…

MongoDB 3.0 での explain

概要 MongoDB 3.0 からexplainの結果が大きく変わりました。 スロークエリを調べる上で、インデックスの使用、外部ソートの使用などをどこで確認するかをまとめてみました。 環境 Ubuntu 14.04 MongoDB 3.0.4 大まかな構造(全体) > db.users.find({name: "…

MongoDBのインデックス2

概要 MongoDBのインデックスにはIndex IntersectionやCovered Indexなんてのもあるので調べてみました。 環境 Ubuntu 14.04 MongoDB 2.6.8 Index Intersectionとは 1つのクエリーで2つのインデックスを使ってくれる機能で、より効率的にクエリーを処理でき…

MongoDB 3.0 をインストール

概要 3.0がリリースされたのでインストール方法をメモ。 Warningを消すのがちょっと面倒です。 環境 Ubuntu 14.04 MongoDB 3.0.0 インストール $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 $ echo "deb http://repo.mong…

MongoDBのインデックス

概要 MongoDBのインデックスをつける上で 複合インデックスの時はインデックスの順番に気をつける {a: 1, b: 1}の反対{a: -1, b: -1}は使えるけど{a: 1, b: -1}は使えない などいろいろ気をつける点が多く、一度しっかり学んでみましたのでそのメモ。 基本的…

MongoDBでシャーディング

概要 MongoDBでシャーディングを構築します。 MongoDBのインストールですでにインストールしている前提で進めます。 環境 Ubuntu 14.04 MongoDB 2.6.7 今回は1台でポートを別にして複数プロセスで構築します。 configサーバは1 or 3台必要(2だとサポー…

MongoRiverを使う

概要 MongoDBのデータをElasticSearchに流し込むMongoDB River Pluginを扱います。 あるデータに対して検索機能を追加したいけど、MongoDBで全文検索はちょっと。。という時に便利です。 環境 Ubuntu 14.04 MongoDB 2.6.7 Java 1.8.0_31 ElasticSearch 1.4.2…

MongoDBでTTL

概要 TTL(Time To Live)という自動でデータを消す仕組みを利用します。 データによっては「過去xx日までは必要だけどそれ以降は不要」みたいなものがあると思います。 例えばログなど。 そういったものに対して使えます。 環境 Ubuntu 14.04 MongoDB 2.6…