mongoDB -製品に組み込むための覚え書き

MongoDBを使って見る

普段リレーショナルデータベースしかいじったことのない我々が、MongoDBを扱う必要がでてきました。MongoDBについて触れた記事が世の中にたくさんある中で、現在進行形で我々がどの様にキャッチアップしているかまとめて見ます。 MySQL技術者が5分でMongoDBを把握するために役立つとうれしいです。

MongoDBを扱う必要って?

開発の中でチャットボットを作ろう!となったときに、目をつけたフリーのフレームワークがMongoDBを作っていたのがそもそも。

いずれ、このフレームワークについても記事を書くと思いますが https://github.com/alfredfrancis/ai-chatbot-framework になります。

ユーザーのフリーテキスト入力文から必要なパラメーターを抜き出し、パラメーターが足りなかったらその入力を促すものです

とりあえずさわってみる。ではなく、製品に組み込むためには?

フレームワークを拡張して試作品公開をするに当たって、必要と思った情報は次の通りです。

  • インストールはどの様に行えばいいのか?
  • 本番と開発環境はどの様にわけるのか?
  • 起動・シャットダウン・再起動はどの様に行えばいいのか?
  • 接続をして、現在入力されている中身を見てみる

--- 今回はここまで

  • 初期ユーザーをどの様に作ればいいの?
  • ユーザーを増やすにはどうしたらいいのか?
  • パスワードはどうやって管理されているのか?
  • バックアップはどの様にとるのか?そもそもどんなバックアップの種類があるのか
  • リストアをするとしたらどうすればいいのか

じゃあ、リレーショナルデータベースとMongoDBの違いは?

本格的にソースコードを書いたりする様になると、便利なのが以下の資料。 どうしても、「MySQLでいうところのInsertをするにはどうしたらいいの?」とか、なれている言語で一旦やりたいことを置き換えてしまいます・・ 日本人が英語をしゃべる際も、なれないうちはまず日本語で文章を考えてから英語に訳すのに近いですね。

ということで、知りたかったことの回答をまとめていきます

基本的にはMongoDBのマニュアルを参考にまとめました。

https://docs.mongodb.com/manual

1.インストールはどの様に行えばいいのか?

エディションについて

  • MongoDB Community Edition : これが商用版ではないほう。GNU AGPL v3.0ライセンス。なので、商業利用は可能。ソースコードの改変をしたら公開が義務づけられる(参考:http://ounziw.com/2013/05/17/agpl/
  • MongoDB Enterprise (Advanced) : 商業向け。In-memory Storageでスループットが向上していたり、暗号化サポートもあったり、セキュリティも向上
  • MongoDB Compass : MongoDBのためのGUI. MongoDB Enterprise Advanced, mongoDB Professionalの一部として提供されているとのこと
  • MongoDB Compass Community : こちらはフリーのGUIツール。Compassの機能制限版
  • MongoDB professional が有償サポート付きの契約 ということで、スモールスタートで始めるに当たっては、MongoDB Community Edition + MngoDB Compass Communityを用意することにしました。

動作環境について

セットアップについては説明ドキュメントが数多くあるし、インストーラーに従えばインストールはハードルは低いです。

2.本番と開発環境をどの様にわけるの?

MySQLの対応表を見ると、MySQLのDatabaseに相当するものはMongoDBでもDatabaseと呼ぶとのこと。MySQLのtableに当たるものは MongoDBではCollectionという概念になります。

今回使うフレームワークも(当然のように)データはCollectionという集合に対して読み書きされるので、本番用のDatabaseと開発用のDatabaseという分け方で大丈夫そう

すなわち、セットアップについては本番用と開発用の二つのmongodプロセスをインストールする必要がないという理解です。まあ、試作品の段階ということもあり。

とはいえ、バックアップとか起動・再起動の単位、そしてユーザーはプロセス毎なので、製品版については、開発と本番はわけたいと考えています。

3. 起動・シャットダウン・再起動はどの様に行えばいいのか?

参考: https://docs.mongodb.com/manual/tutorial/manage-mongodb-processes/

起動の仕方

サーバー上で、

mongod 

でデフォルト状態で起動します

シャットダウンのしかた

データベースへの接続が必要なので、サーバー上で

mongo

で接続する(デフォルトだとユーザー名・パスワード省略でログインができる。できてしまう。。。)

その上で、以下を実行

> use admin;
> db.shutdownServer();
> quit();

4. 接続をして中身を見てみる?

まずは接続をしてみる

(もちろんサーバーにログインした上で)

 $ mongo 

(ローカルホストでユーザー認証を有効化していない場合)

サーバーに接続する場合

$ mongo [サーバー名] 

ユーザーを指定する場合

$ mongo [サーバー名] -u [ユーザー名] -p [パスワード]

現在存在するDBの一覧を表示する

> show dbs; 

DBに接続する

> use [DB名] 

コレクション (テーブルと同等の概念)の一覧を確認する

> show collections; 

とりあえずコレクションを覗いてみる

> db.[コレクション名].find({}); 

特定のフィールド値を持つものだけを抽出する

> db.message.find({user_id:”test”}) 

以下、messageというコレクションを例にします

さらに、特定のフィールド (例:user_id, bot_message) の値のみを抽出する

> db.message.find({},{user_id:1, bot_message:1, _id:0})

そして、重複しないフィールド値を取得する (distinct)

> db.message.distinct(“user_id”) 

2重引用符が必要なので注意

以下、次回に続きます

5. 初期ユーザーをどの様に作ればいいの?

6. ユーザーを増やすにはどうしたらいいのか?

7. パスワードはどうやって管理されているのか?

8. バックアップはどの様にとるのか?そもそもどんなバックアップの種類があるのか

9. リストアをするとしたらどうすればいいのか