MongoDB利用を検討して調べていて見つけたので試しに使ってみます。
- macOS High Sierra
- Node.js v9.5.0
- Mongoose v5.0.6
です。
Azure Cosmos DB
宇宙感あってかっこいい。
機能は
待機時間が非常に短く、極めてスケーラブルなアプリケーションを世界中どこでも実現する、NoSQL のネイティブ サポートが付いたデータベース
Azure Cosmos DB は、グローバル分散と水平方向への拡張性を中心として一から構築されました。透過的なスケーリングとあらゆる場所のユーザーへのデータ レプリケーションにより、使い始めてすぐに任意の数の Azure リージョン全体でグローバル分散を実現できます。世界中でスループットとストレージを弾力的にスケーリングでき、お支払いは必要な分のみとなります。Azure Cosmos DB では、NoSQL の各オプションをネイティブでサポートしており、明確でわかりやすい複数の整合性モデルを提供しています。また、99 パーセントで 10 ミリ秒未満の待機時間を保証すると同時に、マルチホーム機能による高可用性と、世界中のあらゆる場所での短い待機時間を保証します。これらはすべて、業界トップレベルの包括的なサービス レベル アグリーメント (SLA) の対象となります。
らしいです。
AWS系もGCP系もこの手の文句は似てるのでそこまで気にしてないやつです()
MongoDBとして利用
作成はAzure使ってる人なら通常なポータル画面からリソース作成でいけます。
APIの箇所でMongoDBって選択できますね。
Mongooseから利用する
Azure Cosmos DB: Azure Cosmos DB で Mongoose フレームワークを使用するというAzure公式のチュートリアルはあるのですが、参考にはなるのですが、 そのままやっても動かなかったのでmongooseの公式ページを参考にして書いた方がよさそうです。
mkdir cosmos
cd cosmos
npm init -y
npm i --save dotenv mongoose
チュートリアルを参考にdotenvで環境変数利用します。
app.js
を作成してmongooseの公式サンプルを参考に接続コードを作ってみます。
'use strict';
const mongoose = require('mongoose');
const dotenv = require('dotenv').config();
const authParams = {
auth:{
user: process.env.COSMOSDB_USER,
password: process.env.COSMOSDB_PASS,
}
};
mongoose.connect(process.env.COSMOSDB_HOST,authParams);
const Cat = mongoose.model('Cat', { name: String });
const kitty = new Cat({ name: 'のびすけ' });
kitty.save().then(() => console.log('meow'));
.env
ファイルを作成して、ユーザー名パスワード、ホスト情報を記述します。
AzureのCosmos DB管理画面の接続文字列の画面から確認できます。
COSMOSDB_USER=""
COSMOSDB_PASS=""
COSMOSDB_HOST="mongodb://xxxxxxxx.documents.azure.com:10255/?ssl=true&replicaSet=globaldb"
実行するとcatsコレクション
が作成されてのびすけ
というデータが保存されます。
クライアントアプリからデータの確認を利用してみる
Robo 3Tを利用してみました。
ちゃんとのびすけ
ってデータが入ってました。
所感
まだ全然使ってないですが、MongoDBのセットアップを素でやるとけっこう大変だった印象があるので、セットアップの時間がほぼかからずに利用開始できるのは魅力的でした。
もっと使っていかないと良さみは分からなのでもうちょい触ってみます。
補足: 出てたエラー
Azure側のチュートリアルのコードを利用するとError: Password contains an illegal unescaped character
というエラーが出ます(2018年2月時点)。
Stack Over FlowのCannot connect to MongoDB in Azureによると特殊文字列がconnect()
のところで使えないようになったみたいで、別途以下のようなオブジェクトを用意する必要があるとのことです。MongooseのバージョンなのかMongo DBのバージョンなのか。
auth: {
user: 'username',
password: 'p@ssword',
}
という感じで今回のコードに落ち着きました。