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
Rustは厳しいが役に立つ Part3「Rustでデータべース(MongoDB編)」
Search
NearMeの技術発表資料です
September 30, 2022
Programming
0
450
Rustは厳しいが役に立つ Part3「Rustでデータべース(MongoDB編)」
NearMeの技術発表資料です
September 30, 2022
Tweet
Share
More Decks by NearMeの技術発表資料です
See All by NearMeの技術発表資料です
GTFSのデータを Streamlitで可視化してみた
nearme_tech
0
18
Offset / Cursor Paginationについて
nearme_tech
1
21
⼤規模⾔語モデルの拡張(RAG)が 終わったかも知れない件について
nearme_tech
22
15k
VRPを深層強化学習で解く
nearme_tech
0
59
Let’s go monorepo - intro to Nx.dev
nearme_tech
0
15
Dynamic Vehicle Routing のシミュレーションを Streamlitで作ってみた
nearme_tech
0
61
ログ監視ツールについて調べてみた
nearme_tech
0
53
(インターン生が大学院で行なっている)研究紹介
nearme_tech
0
45
拡散モデルの概要 −§2. スコアベースモデルについて−
nearme_tech
0
55
Other Decks in Programming
See All in Programming
Micro Frontends for Java Microservices - Devnexus 2024
mraible
PRO
0
440
OpenAPIを中心に考えるAPI開発入門 / Introduction to API Development with a Focus on OpenAPI
seike460
PRO
2
130
PostmanでAPIの動作確認が楽になった話
h455h1
0
140
Ruby GitHub Packages
bkuhlmann
0
620
Changed Rules: Architectures with Lightweight Stores
manfredsteyer
PRO
0
230
Blue/Greenデプロイの導入による 運用フローの改善
kudoas
1
360
#phpcon_odawara オープン・クローズドなテストフィクスチャを求めて / open closed test fixtures
77web
3
220
DMMプラットフォームがTiDB Cloudを採用した背景
pospome
8
3.7k
SwiftUI Performance 不要なViewの再描画と更新を抑える
bigamitiongit
1
160
Hanami and htmx
bkuhlmann
0
200
0→1と1→10の狭間で Javaという技術選定を振り返る/Reflecting on the Decision to Choose Java Between Scaling from 0 to 1 and 1 to 10
jaguar_imo
2
370
大規模Reactアプリのリアーキテクチャ~8万行のTanStack Query移行の軌跡~
kj455
3
800
Featured
See All Featured
Building Adaptive Systems
keathley
30
1.9k
Debugging Ruby Performance
tmm1
70
11k
Designing for humans not robots
tammielis
247
25k
Design by the Numbers
sachag
274
18k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
1
1.3k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
1
3.4k
Embracing the Ebb and Flow
colly
79
4.1k
Build your cross-platform service in a week with App Engine
jlugia
225
17k
What's new in Ruby 2.0
geeforr
337
31k
From Idea to $5000 a Month in 5 Months
shpigford
377
45k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
9
8.3k
Being A Developer After 40
akosma
56
580k
Transcript
0 Rustは厳しいが役に立つ Part3「Rustでデータべース(MongoDB編)」 2022-09-30 第15回NearMe技術勉強会 Kaito Asahi
1 目次 RustとMongoDB MongoDBについて ハンズオン!! 実際に簡単なアプリケーションをつくります
2 MongoDBとは? • Build faster. Build smarter. → 迅速そして賢いデータベースの構築 →
シャーディング、インメモリでの処理、レプリカセット • JSONライクにデータを扱っている • さまざまなユースケースがある(https://www.mongodb.com/ja-jp/use-cases) • データベース言語「SQL」を使えない ※次回以降で、MySQLについても扱います。 出典:https://www.mongodb.com/
3 ハンズオンのために 以下の作業をおこなってください。 (1) 必須 • Rust環境の構築(https://www.rust-lang.org/ja/tools/install) • MongoDBのインストール (https://www.mongodb.com/docs/manual/installation/)
(2) 任意 • Mongo Compassのインストール(GUIでデータベースを確認できる) (https://www.mongodb.com/try/download/compass)
4 データのインサート (0) 準備 src/bin/insert.rsを作成し、以下を追加してください。 use mongodb::{ bson::{doc, oid::ObjectId}, options::ClientOptions,
Client, }; use serde::{Deserialize, Serialize};
5 データのインサート (1) データベースクライアントを作成する main関数内に、以下の2つの変数を宣言する。 ※parseメソッドの引数は、一応各デバイスで確認してください。 ※基本のport番号は27017です。 let client_options =
ClientOptions::parse("mongodb://localhost:27017").await?; let client = Client::with_options(client_options)?;
6 データのインサート (2) データベースを作成し、コレクションを作成 main関数内に、以下の2つの変数を追加する。 let db = client.database("test_pokemon"); let
collection = db.collection::<Pokemon>("pokemons");
7 データのインサート (3) データの準備 3-1. main関数の外にPokemon構造体を作成する #[derive(Serialize, Deserialize)] struct Pokemon
{ #[serde(rename = "_id", skip_serializing)] id: Option<ObjectId>, name: String, where_from: String, }
8 データのインサート (3) データの準備 3-2. main関数内にポケモンのデータのサンプルを追加する。 let pokemons = vec![
Pokemon { id: None, name: "Bulbasaur".to_string(), where_from: "Kanto".to_string(), }, … ];
9 データのインサート (4) pokemonsドキュメントにデータを挿入する main関数内に、以下を追加する。 ※Ok(())は、main関数でResultを返すために置いてあります。 collection.insert_many(pokemons, None).await?; Ok(())
10 データのインサート (5) Mongo Compassで確認
11 データの検索 (0) 準備 src/bin/search.rsを作成し、以下を追加してください。 use futures::stream::TryStreamExt; use mongodb::{ bson::{doc,
oid::ObjectId}, options::{ClientOptions, FindOptions}, Client, }; use serde::{Deserialize, Serialize};
12 データの検索 (1) フィルターを作成する 先程のcollection変数の部分までは同じで、以下のようにフィルターを作成。 → ここでは、Venusaur(フシギバナ)を検索しています。 → sortは、”where_from”で逆順(-1)にしている。 let
filter = doc! {"name": "Venusaur"}; let find_options = FindOptions::builder().sort(doc! {"where_from": -1}).build();
13 データの検索 (2) フィルターをつけて検索する 先程のcollection変数の部分までは同じで、以下のようにフィルターを作成する。 ※awaitを用いて、検索が終了するまで、後に現れる検索結果の表示を行わないよ うにしています。 let mut cursor
= collection.find(filter, find_options).await?;
14 データの検索 (3) 検索結果の表示 検索して、データがあればそれを報告する。 while let Some(pokemon) = cursor.try_next().await?
{ if let name = pokemon.name { println!("name: {}, where from: {}", name, pokemon.where_from); } }
15 (おまけ)Pokeapiを用いて、全てのポケモンを取得しました 別途結果をお見せいたします。
16 参考リンクまとめ 1. MongoDB:https://www.mongodb.com/ 2. MongoDB Compass:https://www.mongodb.com/try/download/compass 3. Rust:https://www.rust-lang.org/ja/tools/install 4.
Rustでのデータベース作成について ・https://zenn.dev/kyoheiu/articles/c3b6b6f156e57a ・https://zenn.dev/tfutada/articles/e5bf173edd541b 5. Pokeapi:https://pokeapi.co/ 6. Rustでapiを叩く:https://qiita.com/odayushin/items/0e2a5a3d047e6b08c811
17 余談 Rustに関する本で、Webアプリに特化したものが出るらしいので、 速攻購入してブラッシュアップしていきたいです... https://www.shuwasystem.co.jp/book/9784798067315.html
18 Thank you