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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Aya Ebata
November 10, 2022
Technology
740
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
社内勉強会vol.1@ごーふぁー荘
ごーふぁー荘 その0
https://gophersou.connpass.com/event/264420/
Aya Ebata
November 10, 2022
More Decks by Aya Ebata
See All by Aya Ebata
JEP 526: Lazy Constants
aya_ebata
0
59
Flutterハンズオン 5
aya_ebata
0
97
JEP 480: Structured Concurrency
aya_ebata
0
290
Flutterハンズオン 4
aya_ebata
0
170
Flutterハンズオン 3
aya_ebata
0
100
Flutterハンズオン 2
aya_ebata
0
110
Flutterハンズオン 1
aya_ebata
0
140
あたらしい もじれつの かきかた
aya_ebata
0
140
社内勉強会vol.3@ごーふぁー荘
aya_ebata
0
800
Other Decks in Technology
See All in Technology
ChatworkとBPaaS 異なる特性で学んだAI機能開発の ベストプラクティス
kubell_hr
2
2.8k
OCI Oracle AI Database Services新機能アップデート(2026/03-2026/05)
oracle4engineer
PRO
0
230
「嘘をつくテスト」の失敗例から学ぶ 良いテストコード #frontend_phpcon_do
asumikam
0
480
[モダンアプリ勉強会]今更聞けないGit/GitHub入門
tsukuboshi
0
270
AIにフローを作らせようとして挫折した話
hamatsutaichi
0
200
Claude Code×Terraform IaC テンプレート駆動開発
itouhi
1
360
正解のないAIプロダクトをどう導くか?dodaが挑む、ユーザーの『本音』を構造化する評価設計と検証のリアル
techtekt
PRO
0
180
もりもり新機能を一挙紹介! AgentCoreに入門して、AWS上にAIエージェントを構築しよう
minorun365
PRO
6
820
Ruby::Boxでできること、Refinementsでできること
joker1007
3
390
製造業のクラウド活用最適解〜AI,DXを加速するデータ基盤の作り方〜
hamadakoji
0
390
AIプラットフォームを運用し続けるための可観測性
tanimuyk
4
1.1k
速さだけじゃない! VoidZero ツールが移行先に選ばれる理由
mizdra
PRO
6
760
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1033
470k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
370
Unsuck your backbone
ammeep
672
58k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
570
Done Done
chrislema
186
16k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Speed Design
sergeychernyshev
33
1.8k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
240
Faster Mobile Websites
deanohume
310
31k
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