Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
社内勉強会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
750
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
75
Flutterハンズオン 5
aya_ebata
0
110
JEP 480: Structured Concurrency
aya_ebata
0
300
Flutterハンズオン 4
aya_ebata
0
180
Flutterハンズオン 3
aya_ebata
0
110
Flutterハンズオン 2
aya_ebata
0
120
Flutterハンズオン 1
aya_ebata
0
150
あたらしい もじれつの かきかた
aya_ebata
0
150
社内勉強会vol.3@ごーふぁー荘
aya_ebata
0
810
Other Decks in Technology
See All in Technology
え、こんなに早く改修できるの?──新人エンジニアとスクラムマスターの2人が語る、AI×アジャイル開発の現場
ysasago
2
660
安心して変更できるWebフロントエンドの作り方
pirosikick
5
2.9k
人間はどの意思決定を手放せるのか
kawasima
15
8k
30座EKS, 180次升級淬煉的EKS Upgrade Skill 的歷程
eric8230
0
210
技術的負債から考える、AI時代のエンジニアリング投資 — ビズリーチの技術的負債と向き合った経験から、変更し続けられるソフトウェアを考える/ technical-debt-con2026
visional_engineering_and_design
4
3.6k
Cloudflare Workers 向けアプリを C# で構築する ~WASM Native AOT への道~
nenonaninu
1
1k
なぜ「決定性」が 決定的に重要なのか? Durable Execution 基盤の数理的理解 #serverlessjp / ServerlessDays Tokyo 2026
ytaka23
3
1.2k
Claude in Chrome 入門 / Introduction to Claude in Chrome
cielo1985
0
880
Oracle Cloud Infrastructure(OCI):Onboarding Session(はじめてのOCI/Oracle Supportご利⽤ガイド)
oracle4engineer
PRO
2
20k
Deployment の 先にある AI Agent 基盤 - kagent vNext、Agent Substrate、Hermes から読み解く Agent Runtime の現在地 / k8s-matsuri-2-ai-agent-platform-amsy810
masayaaoyama
4
700
Vibe Coding で作ったプロダクトをどう安全に動かすか / How to Safely Run Products Built with Vibe Coding
glidenote
0
490
AIを活用するために決めた "やらないこと" - 価値に注目する / Not betting on AI
soudai
PRO
3
580
Featured
See All Featured
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
580
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
530
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
460
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
300
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
610
Agile that works and the tools we love
rasmusluckow
331
22k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
730
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
360
Discover your Explorer Soul
emna__ayadi
2
1.3k
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