Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
社内勉強会vol.1@ごーふぁー荘
Search
Aya Ebata
November 10, 2022
Technology
0
710
社内勉強会vol.1@ごーふぁー荘
ごーふぁー荘 その0
https://gophersou.connpass.com/event/264420/
Aya Ebata
November 10, 2022
Tweet
Share
More Decks by Aya Ebata
See All by Aya Ebata
Flutterハンズオン 5
aya_ebata
0
64
JEP 480: Structured Concurrency
aya_ebata
0
250
Flutterハンズオン 4
aya_ebata
0
110
Flutterハンズオン 3
aya_ebata
0
60
Flutterハンズオン 2
aya_ebata
0
65
Flutterハンズオン 1
aya_ebata
0
99
あたらしい もじれつの かきかた
aya_ebata
0
110
社内勉強会vol.3@ごーふぁー荘
aya_ebata
0
760
社内勉強会vol.2@ごーふぁー荘
aya_ebata
1
770
Other Decks in Technology
See All in Technology
Digitization部 紹介資料
sansan33
PRO
1
5.5k
Simplifying Cloud Native app testing across environments with Dapr and Microcks
salaboy
0
150
プロポーザルのコツ ~ Kaigi on Rails 2025 初参加で3名の登壇を実現 ~
naro143
1
220
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
5
43k
JAZUG 15周年記念 × JAT「AI Agent開発者必見:"今"のOracle技術で拡張するAzure × OCIの共存アーキテクチャ」
shisyu_gaku
1
160
エンタメとAIのための3Dパラレルワールド構築(GPU UNITE 2025 特別講演)
pfn
PRO
0
290
20201008_ファインディ_品質意識を育てる役目は人かAIか___2_.pdf
findy_eventslides
2
630
能登半島災害現場エンジニアクロストーク 【JAWS FESTA 2025 in 金沢】
ditccsugii
0
610
オープンソースでどこまでできる?フォーマル検証チャレンジ
msyksphinz
0
130
AWSでAgentic AIを開発するための前提知識の整理
nasuvitz
2
150
速習AGENTS.md:5分で精度を上げる "3ブロック" テンプレ
ismk
6
1.2k
[Codex Meetup Japan #1] Codex-Powered Mobile Apps Development
korodroid
2
520
Featured
See All Featured
Statistics for Hackers
jakevdp
799
220k
Speed Design
sergeychernyshev
32
1.2k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.6k
Done Done
chrislema
185
16k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.5k
Why Our Code Smells
bkeepers
PRO
339
57k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Building a Scalable Design System with Sketch
lauravandoore
463
33k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Making Projects Easy
brettharned
119
6.4k
What's in a price? How to price your products and services
michaelherold
246
12k
Transcript
GoでMongoDBを導入してみた! 作成者:えばた あや 2022/10/31
自己紹介 株式会社Alumnote えばた あや ◆プロフィール • 株式会社AlumnoteでバックエンドをGoで書いています! • ラーメン二郎が好きです!
会社紹介 国内大学・教育機関の財政難を解決するために、 大学の財務構造(資金調達手段)のアップデートを目指しているスタートアップです。 大学支援者ネットワークのデータベース化〜拡大活性化、寄付募集の最大化を実現する Vertical SaaSの開発・提供と大学実務のハンズオン支援を行っています。 エンジニアメンバーがまだ少ないため、 ごーふぁー荘にて社内勉強会を開催することになりました!
こんな感じのサービス作ってるよ CRMツール 決済基盤 ・エクセルなど複数のシステムに分散 している卒業生・寄付者名簿を 名寄せ・統合して管理 ・名簿情報をさまざまな項目で簡単に フィルタリングして抽出 ・HTMLメールをパソコン画面上で 簡単に作成し、名簿から配信可能
・配信したメールの到達率、開封率など の分析機能も標準で提供 ・寄付決済、会費決済向けの様々な 決済手段をワンストップで提供 ・決済情報は名簿情報と自動的に連携 大学支援者・関係者の名寄せ〜名簿管理 寄付マーケティングに必要なツール群 寄付者のデータが名簿に 自動連携される決済ツール コミュニティ ・卒業生検索・キャリアサービスなど 在校生や卒業生への便益提供が可能 ・名簿情報と自動連携されており、 最新の個人情報に更新できる 在校生・卒業生ネットワークの アクティベーション
目次 2 GoでMongoDBを使ってみてつらかったこと 3 GoでMongoDBを使ってみてよかったこと 4 まとめ 1 なんでMongoDBにしたの?
- 名簿の実データだけMongoDBに移行した - メインはPostgreSQL(AuroraDB)を使用しています - 名簿が持っているデータが多様で不確定性が高い - データの型が多様 - 大学によって名簿データのスキーマが大きく異なる
→ RDBでは制約が大きい、検索しにくい と言うことで…! 公式から出ているMongoDB Go Driverのライブラリを導入してMongoDBを使ってみた! https://github.com/mongodb/mongo-go-driver なんでMongoDBにしたの?
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 }
GoでMongoDBを使ってみてつらかったこと クエリがGoで書きにくい😭 - bson.Mでも同様に書けて、これならマップなので少しみやすい - 少しみやすくても、カラムの指定だけでなく、MongoDB独自の$or、$lte、$gteも文字列 で指定するからつらい😭 - 複雑なクエリを書くとクエリの組み立てがつらい😭 filter
:= bson.M{ "organization_id": organizationID, "created_at": bson.M{ "$lte": now, }, }
GoでMongoDBを使ってみてつらかったこと - クエリ書くにしてもクエリの書き方を理解してないと書けない - ライブラリでよしなにしてくれない😭 - $lteとか$elemMatchとか文字列として持つため… Goでソースコードを書くだけではなくてMongoDBのことを知らないといけないからつらい😭 filter :=
bson.M{ "organization_id": organizationID, "created_at": bson.M{ "$lte": now, }, }
GoでMongoDBを使ってみてつらかったこと - トランザクションするためにはWrite Concernの設定が必要で、Write Concernの設定を 書くにはReplica Setが必要😭 - MongoDBのことわからないとアプリケーション側の設定も書けない😭 -
ローカル開発で使っているDockerにもReplica Setを作ってあげなくてはいけなかっ た😭 - Write Concern: どこまで書き込めたら書き込み成功とみなすかの設定 - Replica Set: 書き込み用読み込み用など複数台の構成 Goでソースコードを書くだけではなくてMongoDBのことを知らないといけないからつらい😭
GoでMongoDBを使ってみてよかったこと - 検索エンジン入れなくても検索しやすい🤩 - RDBだといろんなテーブルからJOINして複雑なクエリ書いて検索だけど… - NoSQLならあるカラムにjsonで値を持たせても、jsonの中身について細かく検索の クエリをかける! - (まだ検索エンジン入れてないので)RDB側で管理している値でもNoSQLに入れておけば
検索しやすくなる! - (二重管理になって変更めんどいので変更のない値に限るがw 検索しやすくなった🤩
GoでMongoDBを使ってみてよかったこと - ローカル用のDockerではReplica Setの設定など自分で環境を作らなくてはいけない… - MongoDB Atlasでは構成をよしなに作ってくれるので便利! - しかもテスト用のインスタンスは無料で使える -
MongoDB Atlas: MongoDBのマネージドサービスで、GUIで操作できるやつ MongoDB Atlasがよしなにしてくれるのよかった🤩
まとめ - データが複雑な場合に導入すると検索しやすくなるし、値を持ちやすくなる - MongoDBはつらいところと嬉しいところがある - まだエンジニアが少ないから勉強会を開くにしても寂しい… - こういうところでわいわいやっていきたい!
募集中! Alumnoteでは正社員・業務委託として一緒に働いて頂ける方を募集中! 応募お待ちしてます! バックエンド https://herp.careers/v1/alumnote/PVuMatXQrdmn フロントエンド https://herp.careers/v1/alumnote/N8ujo5TyyP8h