Upgrade to Pro — share decks privately, control downloads, hide ads and more …

社内勉強会vol.1@ごーふぁー荘

Aya Ebata
November 10, 2022

 社内勉強会vol.1@ごーふぁー荘

Aya Ebata

November 10, 2022
Tweet

More Decks by Aya Ebata

Other Decks in Technology

Transcript

  1. こんな感じのサービス作ってるよ CRMツール 決済基盤 ・エクセルなど複数のシステムに分散  している卒業生・寄付者名簿を  名寄せ・統合して管理 ・名簿情報をさまざまな項目で簡単に  フィルタリングして抽出 ・HTMLメールをパソコン画面上で  簡単に作成し、名簿から配信可能

    ・配信したメールの到達率、開封率など  の分析機能も標準で提供 ・寄付決済、会費決済向けの様々な  決済手段をワンストップで提供 ・決済情報は名簿情報と自動的に連携 大学支援者・関係者の名寄せ〜名簿管理 寄付マーケティングに必要なツール群 寄付者のデータが名簿に 自動連携される決済ツール コミュニティ ・卒業生検索・キャリアサービスなど  在校生や卒業生への便益提供が可能 ・名簿情報と自動連携されており、  最新の個人情報に更新できる 在校生・卒業生ネットワークの アクティベーション
  2. - 名簿の実データだけMongoDBに移行した - メインはPostgreSQL(AuroraDB)を使用しています - 名簿が持っているデータが多様で不確定性が高い - データの型が多様 - 大学によって名簿データのスキーマが大きく異なる

     → RDBでは制約が大きい、検索しにくい と言うことで…! 公式から出ているMongoDB Go Driverのライブラリを導入してMongoDBを使ってみた! https://github.com/mongodb/mongo-go-driver なんでMongoDBにしたの?
  3. GoでMongoDBを使ってみてつらかったこと クエリがGoで書きにくい😭 - ↑organization_idの指定のようになる - bson.Dを使う場合、各条件を配列で持つ - bson.Dだと、人間が読みにくいよー😭 coll :=

    client.Database("alumnote").Collection("users") filter := bson.D{ {"organization_id", organizationID}, {"created_at", bson.D{{"$lte", now}}}, } cur, err := coll.Find(context.Background(), filter) if err != nil { return err }
  4. GoでMongoDBを使ってみてつらかったこと - トランザクションするためにはWrite Concernの設定が必要で、Write Concernの設定を 書くにはReplica Setが必要😭 - MongoDBのことわからないとアプリケーション側の設定も書けない😭 -

    ローカル開発で使っているDockerにもReplica Setを作ってあげなくてはいけなかっ た😭 - Write Concern: どこまで書き込めたら書き込み成功とみなすかの設定 - Replica Set: 書き込み用読み込み用など複数台の構成 Goでソースコードを書くだけではなくてMongoDBのことを知らないといけないからつらい😭