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
0
730
社内勉強会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
84
JEP 480: Structured Concurrency
aya_ebata
0
270
Flutterハンズオン 4
aya_ebata
0
150
Flutterハンズオン 3
aya_ebata
0
89
Flutterハンズオン 2
aya_ebata
0
90
Flutterハンズオン 1
aya_ebata
0
130
あたらしい もじれつの かきかた
aya_ebata
0
130
社内勉強会vol.3@ごーふぁー荘
aya_ebata
0
780
社内勉強会vol.2@ごーふぁー荘
aya_ebata
1
790
Other Decks in Technology
See All in Technology
Cortex Code CLI と一緒に進めるAgentic Data Engineering
__allllllllez__
0
410
Yahoo!ショッピングのレコメンデーション・システムにおけるML実践の一例
lycorptech_jp
PRO
1
210
Keycloak を使った SSO で CockroachDB にログインする / CockroachDB SSO with Keycloak
kota2and3kan
0
150
GCASアップデート(202601-202603)
techniczna
0
200
Goのerror型がシンプルであることの恩恵について理解する
yamatai1212
0
130
会社紹介資料 / Sansan Company Profile
sansan33
PRO
16
410k
AI時代のSaaSとETL
shoe116
1
180
非情報系研究者へ送る Transformer入門
rishiyama
12
7.6k
JAWSDAYS2026 [C02] 楽しく学ぼう!AWSとは?AWSの歴史 入門
hiragahh
0
170
品質を経営にどう語るか #jassttokyo / Communicating the Strategic Value of Quality to Executive Leadership
kyonmm
PRO
1
230
スクリプトの先へ!AIエージェントと組み合わせる モバイルE2Eテスト
error96num
0
180
ソフトバンク流!プラットフォームエンジニアリング実現へのアプローチ
sbtechnight
1
180
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
Code Review Best Practice
trishagee
74
20k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
180
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
240
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.1k
Automating Front-end Workflow
addyosmani
1370
200k
Between Models and Reality
mayunak
2
230
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.9k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
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