MongoDB
概要 MongoDB AtlasではContinuous Cloud Backupという機能を用いることでRPO(Recovery Point Objective)を1分にすることが可能です。 Dedicated Cluster Backups — MongoDB Atlas その他のストレージやデータベースではPoint in Time Recover/Restoreとい…
概要 MongoDBやPostgreSQLでは認証時にSCRAM (Salted Challenge Response Authentication Mechanism) と呼ばれる認証方式を採用しています。 これは従来のチャレンジレスポンス型の認証を改善したものであり、パスワード(ハッシュ値含む)といった機密情報…
概要 オンプレからクラウドに移行(マイグレーション)した場合や、クラウド上でセルフホスティングしていたDBをマネージドDBに移行した場合に問題となるのが「データは欠損なく移行されたか」です。 データの数が少なければプログラミングで差分チェックな…
概要 MongoDBが使っているbsonはomitemptyというstructタグが利用可能で、これを使うことでそのフィールドがzero値の際は insert時にフィールドを追加しない(容量の削減) update時にフィールドを更新しない(部分アップデートの簡易化) といったメリット…
概要 MongoDBで使っていないindexを整理する際に使ったコマンドのチートシートです。 バックアップ用途の吐き出しコマンドとスプレッドシートで確認しやすくするためのコマンドを主に書きます。 環境 MongoDB v3.6.23 コマンド 以下にそれぞれのケースでのス…
概要 MongoDB Write Concern - Carpe Diem MongoDB Read Concern - Carpe Diem でデータの耐久性・一貫性・分離性・最新性などを保証する方法について説明しました。 しかし、これらの設定だけでは Causal Consistency - Carpe Diem で紹介した因果関係の一…
概要 前回 MongoDB Write Concern - Carpe Diem にてWrite Concernについて説明しました。 今回はRead Concernについて説明します。Read Concernはデータの分離性・一貫性・最新性を考慮する際に気をつけるべき設定です。 環境 MongoDB 3.6+ 前提知識 Point-…
概要 MongoDBはデータがどこまで書き込まれたらクライアントにackを返すかという設定ができます。 その設定をWrite Concernといい、メモリまで保存されたのかディスクまで保存されたのか・何台のデータノードにデータが書き込まれたらといった指定が可能です…
概要 気づいたらMongoDBも4.2になっていました。 以前に DockerでMongoDBのレプリカセットを構築 - Carpe Diem でレプリケーションを、 MongoDBでシャーディング - Carpe Diem でシャーディングを構築しましたが、設定項目が代わっていたりしたので復習がて…
概要 ユーザの行動ログで利用しているデータがDBにあるので、それをまるっとBigQueryへ書き込む方法をEmbulkを使って説明します。 BigQueryにマスタデータを保存する理由は? 単純に行動ログに保存される関連データがIDのみで保存されていると、詳細が知りた…
概要 シャード構成のMongoDBがチャンクの分割に失敗し、一定サイズを超えるとjumboというフラグが付きます。 普通の環境ではそうそう起きませんが、大量のドキュメントを扱っているとたまに発生します。 今回はそれの解消方法を紹介します。 環境 MongoDB 3.…
概要 インデックスに対してMongoDBはB Treeを採用し、MySQLのInnoDBはB+ Treeを採用しています。 どうして採用しているアルゴリズムが違うのだろう?と思って調べてみました。 主な違い B+ TreeはほとんどB Treeと同じですが、以下の点が異なります。 リーフ…
概要 MongoDBでCPU使用率やロードアベレージが高くないのに処理が詰まっている現象が起きました。 その時間にbatchが動いていてアクセスが急に増えることが原因と言うのは分かっているのですが、負荷的には十分余裕があり不思議な状態でした。 そこでdstatで…
概要 以前はMongoRiverを使う - Carpe Diemで紹介したようにRiverという機能を使って同期を実現させていました。 しかしながらElasticsearchがRiverを廃止することを決め、バージョン2.x以降は使うことができなくなりました。 そこで調べてみて挙がったのは…
概要 MongoDBのレプリカセットを組んで検証する必要があったのでdockerを使って構築することにしてみました。 環境 Docker 1.12.0 Mongo 3.2.9 構成 コンテナ名 役割 ホスト側ポート mongo1 Primary 30001 mongo2 Secondary 30002 arbiter Arbiter。データは…
概要 MongoDBのAggregationとSQLとの比較です。 どうやって集計するかな?と悩んだ時に慣れているSQLとの比較があると分かりやすいと思って公式ドキュメントに沿った形で載せてます。 環境 MongoDB 3.0.7 オペレータの比較 SQL MongoDB WHERE $match GROUP B…
概要 MongoDB 3.0 からexplainの結果が大きく変わりました。 スロークエリを調べる上で、インデックスの使用、外部ソートの使用などをどこで確認するかをまとめてみました。 環境 Ubuntu 14.04 MongoDB 3.0.4 大まかな構造(全体) > db.users.find({name: "…
概要 MongoDBのインデックスにはIndex IntersectionやCovered Indexなんてのもあるので調べてみました。 環境 Ubuntu 14.04 MongoDB 2.6.8 Index Intersectionとは 1つのクエリーで2つのインデックスを使ってくれる機能で、より効率的にクエリーを処理でき…
概要 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のインデックスをつける上で 複合インデックスの時はインデックスの順番に気をつける {a: 1, b: 1}の反対{a: -1, b: -1}は使えるけど{a: 1, b: -1}は使えない などいろいろ気をつける点が多く、一度しっかり学んでみましたのでそのメモ。 基本的…
概要 MongoDBでシャーディングを構築します。 MongoDBのインストールですでにインストールしている前提で進めます。 環境 Ubuntu 14.04 MongoDB 2.6.7 今回は1台でポートを別にして複数プロセスで構築します。 configサーバは1 or 3台必要(2だとサポー…
概要 MongoDBのデータをElasticSearchに流し込むMongoDB River Pluginを扱います。 あるデータに対して検索機能を追加したいけど、MongoDBで全文検索はちょっと。。という時に便利です。 環境 Ubuntu 14.04 MongoDB 2.6.7 Java 1.8.0_31 ElasticSearch 1.4.2…
概要 TTL(Time To Live)という自動でデータを消す仕組みを利用します。 データによっては「過去xx日までは必要だけどそれ以降は不要」みたいなものがあると思います。 例えばログなど。 そういったものに対して使えます。 環境 Ubuntu 14.04 MongoDB 2.6…