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
NoSQLの付き合い方
Search
PharmaX(旧YOJO Technologies)開発チーム
August 24, 2022
Technology
0
51
NoSQLの付き合い方
2022.06.30 LT会 江藤さん発表資料
PharmaX(旧YOJO Technologies)開発チーム
August 24, 2022
Tweet
Share
More Decks by PharmaX(旧YOJO Technologies)開発チーム
See All by PharmaX(旧YOJO Technologies)開発チーム
PharmaX 弱者の広報戦略を振り返る
pharma_x_tech
0
62
しくじり先生、PharmaXのLLMアプリケーション開発の失敗を語る
pharma_x_tech
0
170
LLMアプリケーションの実験管理・評価の工夫を紹介
pharma_x_tech
8
900
LLMアプリケーションの改善プロセスの構築
pharma_x_tech
0
250
チーム再編を伴う2年半のプラダクト開発から学ぶソフトウェアアーキテクチャ運用のコツ
pharma_x_tech
0
1.7k
LLMにサジェストさせたチャットの評価方法について
pharma_x_tech
0
650
薬剤師のチャットサジェストの評価と実験管理の本番運用
pharma_x_tech
1
300
新しいJSランタイムのDenoとBunに入門してみた
pharma_x_tech
0
70
2024.02.16_LLMを活用してオンライン薬局のオペレーションを自動化した話
pharma_x_tech
4
1.8k
Other Decks in Technology
See All in Technology
20240509 CloudWatch でいろいろなものを監視してみよう
masaruogura
1
120
【リラン】AIの光と闇?失敗しないために知っておきたいAIリスクとその対応 ①政府の動き編
tkhresk
0
140
複雑なビジネスルールに挑む:正確性と効率性を両立するfp-tsのチーム活用術 / Strike a balance between correctness and efficiency with fp-ts
kakehashi
5
3.6k
グイグイ系QAエンジニアでやっていくよ!
____rina____
0
780
From here to resilience - a travel guide
ufried
1
160
【SORACOM UG 四国】今だからこそ学ぶ!IoTの全体像と最新事例、生成AIの基礎
soracom
PRO
2
170
生成AIと産業向けソフトウェアの自動生成 〜 ハノーバーメッセ2024より〜
kioto
2
430
The depthes of profiling Ruby - RubyKaigi 2024
osyoyu
0
170
Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間
oracle4engineer
PRO
12
7.9k
エムスリーマルチデバイスチーム紹介資料 / Introduction of M3 Multi Device Team
m3_engineering
1
170
My road to OSEE Part1
yunolay
0
120
サービス開発におけるVue3とTypeScriptの親和性について
tsukuha
10
1.8k
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
43
12k
Build your cross-platform service in a week with App Engine
jlugia
226
17k
Side Projects
sachag
451
41k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
34
6.1k
What the flash - Photography Introduction
edds
64
11k
How to name files
jennybc
65
94k
Raft: Consensus for Rubyists
vanstee
133
6.3k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
358
22k
Become a Pro
speakerdeck
PRO
13
4.6k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
117
18k
Large-scale JavaScript Application Architecture
addyosmani
504
110k
[RailsConf 2023] Rails as a piece of cake
palkan
29
4.1k
Transcript
NoSQLのテーブル設計
ある時期のNoSQL
None
NoSQL is 素晴らしい • 早い + 軽量 ◦ 分散処理 •
シンプル ◦ 巨大なjson = 扱いやすい ◦ 学習コストも低い • 柔軟性が高い ◦ json形式で巨大なデータも突っ込める
今のNoSQL
None
NoSQL is 辛い • 検索が貧弱 ◦ 絞り込みの制約が辛い • トランザクション ◦
保証できないもの ▪ 昔NoSQLでトランザクションを実現する黒魔術があった • 拡張性がありすぎる ◦ 同じテーブルでも 値の形が違ったりする
つまりNoSQLには 特有の向き合い方が必要
今回はテーブル設計(dynamo)のお話
• table ◦ RDBのテーブルに相当する。この中にデータを入れる • parimary key ◦ データを一意に絞るためにキーで partion
key, sort key がある ▪ 後述 • Attribute ◦ primary key 以外のカラムのこと ◦ dynamoはカラムに対して型を指定できる。 • index ◦ GSI, LSI があるが、目的は検索条件を増やすため ◦ 今回はGSIを使っている(以下indexと呼称) 基礎概念
• partion key(pk), sort key(sk)を使ってテーブルを作る ◦ pkは一意なIDでこれで検索をかける ▪ PKを指定したらひもづく Attributeが全て取得できる
◦ skはソートに使うキーで range検索やdescなどができる ▪ skだけで検索を行うことはできない。 • indexでwhere対象を増やす ◦ indexをカラムに当てるとそのカラムで検索がかけられるようになる • 検索上限は取得サイズで決まる ◦ 一度の検索で最大1MG dynamoのクエリ制約
pk
index
クエリパターンから考えるしかない!
サンプル(ユーザーの記事投稿サービス) • ユーザーの一覧情報を取得したい • ユーザーの一覧を登録した順にソートしたい • ユーザーの記事一覧を最新順で取得したい • ユーザーの記事一覧でいいねが多い順に取得したい
キーの設計 概念名 PK SK user user_name register_at post user_name post_at
サンプル(ユーザーの記事投稿サービス) • ユーザーの一覧情報を取得したい ◦ dynamoはデフォルトで全件取得があるからいけそう • ユーザーの一覧を登録した順にソートしたい • ユーザーにひもづく記事一覧を最新順で取得したい •
ユーザーにひもづく記事一覧でいいねが多い順に取得したい
テーブル設計 PK SK Attribute user user_nam e(john) resgiter_at (20210312 )
birth_day (1月2日) profile (こんにち わ) post user_nam e(john) post_at (20221203 ) title (記事1) content (テスト) like_count (12)
サンプル(ユーザーの記事投稿サービス) • ユーザーの一覧情報を取得したい ◦ dynamoはデフォルトで全件取得があるからいけそう • ユーザーの一覧を登録した順にソートしたい ◦ userテーブルでregister_atをsortkeyにしてるからいけそう •
ユーザーにひもづく記事一覧を最新順で取得したい ◦ postテーブルでpost_atをsort keyにしてるからいけそう • ユーザーにひもづく記事一覧でいいねが多い順に取得したい
indexの設計 PK SK Attribute post user_nam e like_count title content
post_at
サンプル(ユーザーの記事投稿サービス) • ユーザーの一覧情報を取得したい ◦ dynamoはデフォルトで全権取得があるからいけそう • ユーザーの一覧を登録した順にソートしたい ◦ userテーブルでregister_atをsortkeyにしてるからいけそう •
ユーザーにひもづく記事一覧を最新順で取得したい ◦ postテーブルでpost_atをsort keyにしてるからいけそう • ユーザーにひもづく記事一覧でいいねが多い順に取得したい ◦ index貼って,user_nameから検索がかけられる ◦ like_countをskにしてるからいけそう
完
最後に
クエリパターンを最初に考えましょう