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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
81
JEP 480: Structured Concurrency
aya_ebata
0
270
Flutterハンズオン 4
aya_ebata
0
150
Flutterハンズオン 3
aya_ebata
0
87
Flutterハンズオン 2
aya_ebata
0
88
Flutterハンズオン 1
aya_ebata
0
120
あたらしい もじれつの かきかた
aya_ebata
0
130
社内勉強会vol.3@ごーふぁー荘
aya_ebata
0
780
社内勉強会vol.2@ごーふぁー荘
aya_ebata
1
790
Other Decks in Technology
See All in Technology
AIエージェントで変わる開発プロセス ― レビューボトルネックからの脱却
lycorptech_jp
PRO
2
840
Webアクセシビリティ技術と実装の実際
tomokusaba
0
190
LY Tableauでの Tableau x AIの実践 (at Tableau Now! - 2026-02-26)
yoshitakaarakawa
0
1.2k
APMの世界から見るOpenTelemetryのTraceの世界 / OpenTelemetry in the Java
soudai
PRO
0
220
Lookerの最新バージョンv26.2がやばい話
waiwai2111
1
150
全自動で回せ!Claude Codeマーケットプレイス運用術
yukyu30
3
150
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3k
[続・営業向け 誰でも話せるOCI セールストーク] AWSよりOCIの優位性が分からない編(2026年2月20日開催)
oracle4engineer
PRO
0
160
Digitization部 紹介資料
sansan33
PRO
1
7k
Oracle Cloud Infrastructure:2026年2月度サービス・アップデート
oracle4engineer
PRO
0
170
どこで打鍵するのが良い? IaCの実行基盤選定について
nrinetcom
PRO
2
110
opsmethod第1回_アラート調査の自動化にむけて
yamatook
0
330
Featured
See All Featured
The Limits of Empathy - UXLibs8
cassininazir
1
240
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
150
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
210
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Marketing to machines
jonoalderson
1
5k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
78
Building AI with AI
inesmontani
PRO
1
760
Agile that works and the tools we love
rasmusluckow
331
21k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.7k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
450
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.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