mongoDBインストールしてコンソールでCRUD試してみた
クローリングしてきたデータの保存先、最初はテキストでいいかと思っていたんですが
やはり検索とか考えるとデータベースにぶち込んだ方がいいかなぁと思ってRDBを使うか、
はやりのNoSQLを使うかで悩んでいました。もともと保存しているテキストがJSON形式で
あることと放り込んだデータに後から項目を追加するということも考えていたところもあって
柔軟性がほしいなぁと思ったのでmongoDBを使ってみることにしました。
pythonからいじくる予定なのですが、まずは動作検証してみたいということでmongoDBをインストール
してみました。ま、よそで色々とされているのでコピペしてぶっ込んでみて、そして簡単にCRUDしてみた
だけです。
ほとんど新しい知見はえられない記事です。
次は構築したmongoDBの中にpython使って取得してきたJSONデータをブッ込むところです。 色々と調べてて思ったのがスケールする場合はNoSQLとはいえインデックスとか考えないと パフォーマンス出ないんじゃないかということ。 大規模なサービスで既存技術に精通した技術者がいない場合に、楽だからと新しいものに飛びつくと 実は余計に痛い目見たりするんじゃないかと個人的には思いました。
https://xn--o9j8h1c9hb5756dt0ua226amc1a.com/?p=3370 https://lab4ict.com/system/archives/1137 https://qiita.com/h6591/items/68a1ec445391be451d0d https://qiita.com/thirdpenguin/items/4711e28f46cd9c7b09e4
https://it-blue-collar-dairy.com/add_auth_to_mongodb/ https://qiita.com/tomy0610/items/f540150ac8acaa47ff66
https://qiita.com/y-hara/items/83a86655bba48dc8b140 https://shoken.hatenablog.com/entry/20120405/p1 https://qiita.com/t2hk/items/45a04875dc6d8be9b004 https://qiita.com/tomy0610/items/ce45fa55dca10cb88083 https://codeday.me/jp/qa/20181129/27288.html https://qiita.com/saba1024/items/f2ad56f2a3ba7aaf8521 https://qiita.com/svjunic/items/285e9cf20169d70aa1fa
ほとんど新しい知見はえられない記事です。
■手順
1.mongoDBインストール
#キーを入手 $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4 $ echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list $ sudo apt update ・mongodbインストール $ sudo apt install -y mongodb-org #動作確認 $ mongod --version db version v4.0.13 git version: bda366f0b0e432ca143bc41da54d8732bd8d03c0 OpenSSL version: OpenSSL 1.1.1 11 Sep 2018 allocator: tcmalloc modules: none build environment: distmod: ubuntu1804 distarch: x86_64 target_arch: x86_64 matarain@crawler-srv:~$ mongo --version MongoDB shell version v4.0.13 git version: bda366f0b0e432ca143bc41da54d8732bd8d03c0 OpenSSL version: OpenSSL 1.1.1 11 Sep 2018 allocator: tcmalloc modules: none build environment: distmod: ubuntu1804 distarch: x86_64 target_arch: x86_64 #mongodb起動 $ sudo systemctl start mongod $ sudo systemctl enable mongod
2.セキュリティ設定(IDとPWでのログイン必須化)
$ mongo MongoDB shell version v4.0.13 ~中略~ onitoring() --- > use sample switched to db sample > db.createUser({user: "user",pwd: "password",roles: [{ role: "userAdmin", db: "sample" },{ role: "dbAdmin", db: "sample" },{ role: "readWrite", db: "sample" }]}) Successfully added user: { "user" : "user", "roles" : [ { "role" : "userAdmin", "db" : "sample" }, { "role" : "dbAdmin", "db" : "sample" }, { "role" : "readWrite", "db" : "sample" } ] } #設定ファイル編集 $ sudo vi /etc/mongod.conf ※以下を追記 ---------------------------- security: authorization: enabled ---------------------------- #mongoDB再起動および動作確認 $ sudo systemctl restart mongod $ mongo MongoDB shell version v4.0.13 ~中略~ MongoDB server version: 4.0.13 > use sample switched to db sample > db.auth("user", "password") 1 > #documentの挿入 //現在日時で項目2つ >db.test1.insert({new_column1: 'new_value1', new_column2: 'A9991', date_column: ISODate()}) >db.test1.insert({new_column1: 'new_value2', new_column2: 'A9992', date_column: ISODate()}) >db.test1.insert({new_column1: 'new_value3', new_column2: 'A9993', date_column: ISODate()}) >db.test1.insert({new_column1: 'new_value4', new_column2: 'A9994', date_column: ISODate()}) >db.test1.insert({new_column1: 'new_value5', new_column2: 'B9991', date_column: ISODate()}) >db.test1.insert({new_column1: 'new_value6', new_column2: 'B9992', date_column: ISODate()}) >db.test1.insert({new_column1: 'new_value7', new_column2: 'B9993', date_column: ISODate()}) >db.test1.insert({new_column1: 'new_value8', new_column2: 'B9994', date_column: ISODate()}) #collectionの検索 #2で終わるものを抽出(ObjectIDを除外して表示) >db.test1.find({new_column2: /.*2$/},{_id:0}) #日付が現在日時以前で降順 >db.test1.find({date_column:{$lte:ISODate()}},{_id:0}) #日付が指定日時範囲内(日本時間で2019/11/11 15:01~15:13) >db.test1.find({date_column:{$gte:ISODate("2019-11-11T06:01:00Z"),$lte:ISODate("2019-11-11T06:57:00Z")}},{_id:0}) #データをfindしてそのレコードを更新 #検索結果データに項目を追加 >db.test1.update({new_column2: /.*2$/}, {$set:{flg:'True'}}, false, true) #検索結果データを更新 >db.test1.update({new_column2: /.*2$/}, {$set:{new_Column2:'C9992'}}) #collection削除 > show collections test1 > db.test1.drop() true > show collections
次は構築したmongoDBの中にpython使って取得してきたJSONデータをブッ込むところです。 色々と調べてて思ったのがスケールする場合はNoSQLとはいえインデックスとか考えないと パフォーマンス出ないんじゃないかということ。 大規模なサービスで既存技術に精通した技術者がいない場合に、楽だからと新しいものに飛びつくと 実は余計に痛い目見たりするんじゃないかと個人的には思いました。
■参考サイト
https://websiteforstudents.com/install-mongodb-on-ubuntu-18-04-lts-beta-server/https://xn--o9j8h1c9hb5756dt0ua226amc1a.com/?p=3370 https://lab4ict.com/system/archives/1137 https://qiita.com/h6591/items/68a1ec445391be451d0d https://qiita.com/thirdpenguin/items/4711e28f46cd9c7b09e4
https://it-blue-collar-dairy.com/add_auth_to_mongodb/ https://qiita.com/tomy0610/items/f540150ac8acaa47ff66
https://qiita.com/y-hara/items/83a86655bba48dc8b140 https://shoken.hatenablog.com/entry/20120405/p1 https://qiita.com/t2hk/items/45a04875dc6d8be9b004 https://qiita.com/tomy0610/items/ce45fa55dca10cb88083 https://codeday.me/jp/qa/20181129/27288.html https://qiita.com/saba1024/items/f2ad56f2a3ba7aaf8521 https://qiita.com/svjunic/items/285e9cf20169d70aa1fa
コメント