データ指向アプリケーションデザインを読み終わりました

データ指向アプリケーションデザインを一通り読み終えたので書評です。

O'Reilly Japan - データ指向アプリケーションデザイン

評価

★★★★★★★☆☆☆(7/10)
評価の目安はこちら

オススメできる人

オススメできない人

  • データストア周りの初心者 情報量が多いので初心者が読むものではないと思います。

感想

RDBMSやNoSQLなどデータを処理するためのライブラリやツールについての包括的な内容が載っています。

ページ数が660ページもあるので読んで全部理解できたかというと怪しい部分はあります・・・
個人的には第II部分散データのところが非常に参考になりました。
非機能要件を実現する上で考えるべきことがいろいろ載っているなと感じました。

RDBMSやNoSQLなどバックエンドを知るためには良い本だと思いました。
ただ、ページ数が多いので一回で理解するというよりはデスクの横に置いといて都度参照するというのが良さそうです。

mongoimportでネストされたオブジェクトとしてインポートする

概要

mongoimportでネストされたオブジェクトとしてインポートするためのメモです。

前提条件

  • MongoDB v4.0.10

今回使用するデータは公式ドキュメントのサンプルセットの中から、Inside Airbnbのデータを使わせていただきました。

元々は勉強用コードで見つけた内容なのですぐに試したい環境が欲しい場合はここを参照してください。
(勉強用に色々と触っているので内容は変わると思います)

結論

下記のように.で区切るとネストされたオブジェクトが作成されます。

listingId.int32()
date.date(2006-01-02)
available.string()
price.value.string()
price.adjusted.string()
nights.minimum.int32()
nights.maximum.int32()

インポートしたデータの取得結果です。
ネストされていることがわかりやすいように整形しています。

{
  "_id" : ObjectId("5d3ba3182101bb0c912c29d1"),
  "listingId" : 1600758,
  "date" : ISODate("2019-06-28T00:00:00Z"),
  "available" : "f",
  "price" : {
    "value" : "$3,300.00",
    "adjusted" : "$3,300.00"
  },
  "nights" : {
    "minimum" : 2,
    "maximum" : 7
  }
}

詳細

今回はfieldFileオプションを使って取り込みむのでfieldFileを作成します。
中身は結論で書いた内容と同じです。
columnsHaveTypesオプションを使っているので()つきの部分は型になります。

listingId.int32()
date.date(2006-01-02)
available.string()
price.value.string()
price.adjusted.string()
nights.minimum.int32()
nights.maximum.int32()

次にデータを取ってきます。

$ curl http://data.insideairbnb.com/japan/kant%C5%8D/tokyo/2019-06-27/data/calendar.csv.gz -O
$ gunzip calendar.csv.gz

mongoimportでデータを取り込みます。
コマンドは下記のような感じになります。

mongoimport \
    --db ${DB名} \
    --username ${ユーザ名} \
    --password ${パスワード} \
    --host ${ホスト}:${ポート} \
    --collection ${コレクション名} \
    --type csv \
    --file ${ダウンロードしたデータのパス} \
    --columnsHaveTypes \
    --parseGrace skipRow \
    --fieldFile ${作成したfieldFileのパス}

CSVによるインポートなので--type csvを指定し、
型の指定も行なっているので--columnsHaveTypesとつけます。

CSVの一行目はタイトル行なのでスキップするために--parseGrace skipRowを指定します。
本当は読み取れない行をスキップするオプションなのですが、タイトル行をスキップするために使っています。

実際に自分のローカルで実行したコマンドは下記です。

mongoimport \
    --db single-db \
    --username test-user \
    --password test-password \
    --host 127.0.0.1:27017 \
    --collection calendar \
    --type csv \
    --file /tmp/mongo-data/calendar.csv \
    --columnsHaveTypes \
    --parseGrace skipRow \
    --fieldFile ./single-node/docker/mongodb/csv-fields/calendar.txt

mongodbにログインし、1件数取り出してみるとこんな感じです。

> db.calendar.find().limit(1)

{ "_id" : ObjectId("5d3ba3182101bb0c912c29d1"), "listingId" : 1600758, "date" : ISODate("2019-06-28T00:00:00Z"), "available" : "f", "price" : { "value" : "$3,300.00", "adjusted" : "$3,300.00" }, "nights" : { "minimum" : 2, "maximum" : 7 } }

まとめ

ドキュメントを探してみたのですがネストオブジェクトの方法が見つからなかったので試してみました。
JIRAのISSUEにネストオブジェクトがインポートされないバグがあがっているので、
.で区切った場合にネストされたオブジェクトして扱われるのは仕様っぽいですね。

ゼロからわかる Amazon Web Services超入門を読み終わりました

ゼロからわかる Amazon Web Services超入門を一通り読み終えたので書評です。

ゼロからわかる Amazon Web Services超入門 はじめてのクラウド:書籍案内|技術評論社

評価

★★★★★★☆☆☆☆(6/10)
評価の目安はこちら

オススメできる人

  • AWSを触ったことない人
  • AwSで一から構築したことない人

オススメできない人

「超入門」とあるように一度でも構築したことがある人にとっては目新しいことはないと思います。

感想

私自身はオンプレ環境でしか開発したことがないのでAWSは触ったことないです。
そろそろちゃんと入門しないとなと思って書いました。

数あるAWSのサービスの中からS3/EC2/RDSを使って、
Webサイトやブログを作って覚えていくという内容になっています。
アンマネージドサービスととマネージドサービスについても説明がされています。
構築の手順がキャプチャ付きで説明されているので実際に画面で触りながら試せます。

個人的には各サービスがどのような課金体系なのかが書かれているのが良かったです。
今後、課金体系が変わることはあると思いますが、
大体の課金体系のイメージをつけたかったのでちょうど良かったです。

タイトルの通り入門者には良い一冊だと思います。

分散システムデザインパターンを読み終わりました

分散システムデザインパターンを一通り読み終えたので書評です。

O'Reilly Japan - 分散システムデザインパターン

評価

★★★★★★☆☆☆☆(6/10)
評価の目安はこちら

オススメできる人

  • システム構成について勉強したい人

オススメできない人

  • コンテナの使い方を知らない人

ハンズオンでコンテナを使って構築するのでコンテナの操作に慣れていない人にはオススメしません。
ただ、単純に読むだけであれば問題ないと思います。

感想

パターンごとの概要とハンズオンという形で学習できます。
とはいっても私は通勤の時に読んでいるのでハンズオンは試していませんが・・・

サブタイトルで「コンテナを使った」とありますが、コンテナではなくても適用できる内容だったと思います。
コンテナだからこそやりやすいけど、コンテナではないといけないというものはなかったと思います。

個人的には「コンテナを使ったスケーラブルなサービスの設計」というのがちょっとしっくりこないなぁと。
ハンズオンとしてコンテナを使っているというのであって、コンテナじゃなくてもという感じです。
ただ、内容としては勉強になりました。

MongoDB 解体新書を読み終わりました

MongoDB 解体新書を一通り読み終えたので書評です。

MongoDB 解体新書(Amazonページ)

評価

★★★★★★★☆☆☆(7/10)
評価の目安はこちら

オススメできる人

  • MongoDB初心者

オススメできない人

  • MongoDBを使って運用をしている人

オススメできない人があまり思いつかないので、強いていうならすでに運用している人かなぁと。
サブタイトルで「入門書」と謳っているため運用している人であれば知っていることも多いと思います。

感想

概要、CRUD操作、設定/設計、実装という4部構成です。

概要とCRUD操作ではインストールから操作までとよくある感じの入門書の構成です。
目次を見るとわかるのですがデータベース・コレクションの作成や集計と一括処理もあります。
実際の仕事で使いそうな操作は一通り揃っているのかなという印象です。

設定/設計についてはパフォーマンス、セキュリティ、バックアップといった
実際の運用で必要となる内容が書かれています。
個人的にはこの章が一番知りたいだったので助かりました。

実装部分はJava、Node.jsでMongoDBを使ったコードが載っています。
私自身Javaで簡単なプログラムを書く予定でしたので
この章はささっと軽く流した程度にしてしまったため記憶があんまりないです・・・
雰囲気を掴むには良いかもなぁといった感じです。

運用するにあたって最低限の知識がまとまっていて良い本だと思いました。

入門 Prometheusを読み終わりました

入門 Prometheusを一通り読み終えたので書評です。

O'Reilly Japan - 入門 Prometheus

評価

★★★★★★★☆☆☆(7/10)
評価の目安はこちら

オススメできる人

  • Prometheus入門した人
  • Prometheusの公式ドキュメントの英語に挫折した人

タイトルが入門 Prometheusなので入門した人は当然として、
公式ドキュメントを読んで英語に挫折した人にも良さそうかなと思います。

オススメできない人

  • Prometheusを通して監視を勉強したい

監視はそもそもどういうことをすればいいのかといったところについては
簡単に触れる程度にしか書かれているないのでPrometheusを通して監視を勉強したい人には向かないと思います。

感想

私は一通り公式ドキュメントは読んだのですが、詳細まで理解できているかというとそうでもなかったので購入してみました。
Prometheusの構成要素とそれぞれの使い方、PromQLの使い方、デプロイの仕方と運用する上で必要そうな内容は揃っていると感じました。
監視対象の数が多い場合にどのようにスケールさせるかもについても少しではありますが書かれています。

私は公式ドキュメントの関数部分について詳細に理解できていなかったので、 関数の詳細が説明されているところが助かりました。
タイトルの通り、Prometheusに入門するには良い本だと思います。

モデルベース要件定義テクニックを読み終わりました

モデルベース要件定義テクニックを一通り読み終えたので書評です。

モデルベース要件定義テクニック - 秀和システム あなたの学びをサポート

評価

★★★★★★☆☆☆☆(6/10)
評価の目安はこちら

オススメできる人

  • 要件定義の新しいやり方を探しているひと

オススメできない人

要件定義のやり方はプロジェクトごとに違うと思いますが、
だいたいどういうことを決めないといけないのかを知っている人が対象かと思います。
従来のやり方と対比する為にも知っておいた方が良いかと思います。

感想

RDRA(リレーションシップ駆動要件分析)という手法で要件定義を行うやり方について説明されています。
内容としてはUMLをベースとした複数のモデルを関連づけて、要件定義をしていくという内容になっています。
UMLをベースにしていますが厳格な書き方を重視していないのでUMLの知識がなくても読めると思います。

効果的な要件定義のやり方は何かないかと思い、この本を読んでみました。
一通り読んでみた感想としてはこういうやり方があって、今のチーム構成だとうまくいくかもなという感じです。
ただ、本を読んだだけではピンとくるものがなく、
実際に仕事でこの方法を適用したり、ワークショップなどで体験したりした方が良さそうです。

新しいやり方として知識を得るには良い本だと思います。