DBã®ãã©ã€ããªãŒããŒã¯UUIDãæŽæ°ãïŒå®éã«æ€èšŒããŠã¿ã
â»ãã®èšäºã¯èªåãæå±ããçµç¹ã§æžãã以äžã®èšäºã®ã³ããŒã§ããæçš¿ããèšäºã¯å人ã®èäœç©ãšããŠèªããã°ã«ã³ããŒããŠè¯ãã«ãŒã«ãšããŠããŸãã
å èšäº: https://tech-blog.mitsucari.com/entry/2026/02/02/112938
ããã«ã¡ã¯ãããã«ãªCTOã®å¡æ¬ããšãã€ãã³ãŒ(@tsukaby0) ã§ãã
å æ¥ããããªãã€ãŒããå°ã話é¡ã«ãªã£ãŠããŸããã
çµæ§æ°å€æŽŸãå€ããéãªæçš¿ã ã£ãã®ã§ã¡ãããšæžããŠãªãã£ãããPostgreSQL䜿ã£ãŠUUID䜿ããªãv7ãã·ã£ãŒãã£ã³ã°ããæ³å®ãªããã¢ããªã¹ãšããåæããã®åæäžã ãšæ°å€ã¯é«éã ãæšæž¬ããããã£ãŠã®ããã¡ãªããããã®ããã«å€éšã«èŠããçšidãäœã£ãããªããŠã®ããããã¯ãŠã㊠https://t.co/EuN00w8Mad
— Keisuke Nishitani (@Keisuke69) January 28, 2026
ãã®æã3000äžãŠãŒã¶ãŒã»10åAPIããã/æ¥ã»ç±³åœApp Storeã§YouTubeãFacebookããäžäœã®ãããã©ã³ã«ãŒã¢ããªã®è£ã§åãBaaSãäœã£ãŠãŸãããpkeyã¯æå³çã«é£çªã§ãã
— Kenn Ejima (@kenn) January 30, 2026
UUIDã«ãããã£ãã·ã¥ãããçã®äœäžã¯å€§èŠæš¡ã·ã¹ãã ã§ã¯ææã§ã⊠https://t.co/gzVyu2tAkG
èŠçŽãããš
- 3000äžãŠãŒã¶ãŒã»10åAPIããã/æ¥ã®BaaSã§pkeyã¯æå³çã«é£çªã ã£ã
- UUIDã«ãããã£ãã·ã¥ãããçã®äœäžã¯å€§èŠæš¡ã·ã¹ãã ã§ã¯ææ
- 128bit vs 32bitã®å·®ã¯æçµçã«8å16åã«å¢å¹ ããã
- å€éšå
¬éçšã«ã¯å¥é
public_idã«ã©ã ãäœãã®ããããã
ãããã£ãpkeyãintegerã«ããããUUIDã«ãããã¯å²ãšããèã話ã§ã¯ãããŸããç§ã¯éå»ã¢ããã¯ãããžãŒã»Webåºåçéã«ããŸãããããã®ãããªç°å¢ã§ã¯æ¡çªã®é »åºŠãäžè¬çãªSaaSã®ã¢ã¯ã»ã¹éã®æ¯ã§ã¯ãªãã®ã§ãUUIDãçšããããããšãå€ãã£ãã§ãããã ãããã§ã¯ãªãã»ãšãã©ã®ãŠãŒã¹ã±ãŒã¹ã§ã¯integerãäžè¬çã§ãã
ã©ãããŠintegerã«ãã¹ããã詳现ã¯å ãã€ãŒããèªãã§ããã ããšããŠãç¥èãçµéšãšããŠã¯ããçšåºŠããã£ãŠããã€ããã§ãããå®éã«UUIDãpkeyã«ããŠå°ã£ããšããã±ãŒã¹ã«ã¯ééããŠããŸããããã®ãããUUIDã«ãããšã©ã®çšåºŠäžå©ãªã®ãæ€èšŒããŠã¿ãããšã«ããŸããã
çµè«
- Kenn Ejimaããã®äž»åŒµã«åæã§ãããpkeyã¯integerã§ãããå¿ èŠã«å¿ããŠå ¬éçšã®public_idã远å ããã°ãã
- public_idã§ã¯ãªãã颿°ã«ããå°åºãããã ããå€éšç°å¢ãèæ ®ãããšpublic_idãšããŠçšæããæ¹ãè¯ã
- ä»åã®æ€èšŒã§ã¯integer vs UUID v7ã§ãã£ãã·ã¥ãããçã
96.93% vs 2.78%ãšãªã£ã - (å šäœçã«ããªãç°¡ç¥åããæ€èšŒæ¹æ³ã§ãããã¡ã¢ãªãå®éã®ã¯ãšãªçã«ããªãå·Šå³ãããŸããäžæŠã«ããã ã倧ããªå·®ãåºãããã§ã¯ãªãã®ã§æ³šæã§ã)
- å³ããç°å¢ã§ã¯ãã£ãã·ã¥ãããçãèŽåœçã«ãªããã
æ€èšŒç°å¢
Dockerã³ã³ããäžã§PostgreSQLãåããããã¹ãåŽããã¯ãšãªãå®è¡ããŸãããã£ãã·ã¥ãã¹ãçºçããããããã¡ã¢ãªãå³ããå¶éããŠããŸãã
ã³ã³ããã®èµ·å
# CPU 1ã³ã¢ãã¡ã¢ãª 128MB ã«å¶éããPostgreSQLã³ã³ãããèµ·å
# ããŒã¿ãµã€ãºïŒçŽ300MBïŒã«å¯ŸããŠãã£ãã·ã¥ãå°ããããããã£ãã·ã¥ãã¹ãçºçããããç°å¢
#
# PostgreSQLã®ã¡ã¢ãªé¢é£ãã©ã¡ãŒã¿:
# - shared_buffers: PostgreSQLãããŒã¿ãã£ãã·ã¥ã«äœ¿ãå
±æã¡ã¢ãªé å
# - work_mem: ãœãŒããããã·ã¥æäœã§äœ¿ãäœæ¥ã¡ã¢ãªïŒã¯ãšãªããšïŒ
docker run -d \
--name pg-bench \
--cpus="1" \
--memory="128m" \
-e POSTGRES_PASSWORD=postgres \
-p 15432:5432 \
postgres:18 \
-c shared_buffers=16MB \
-c work_mem=4MB
# 以éã®ã³ãã³ãã§äœ¿ãç°å¢å€æ°ãèšå®
export PGPASSWORD=postgres
ããŒãã«äœæ
ãã¹ãåŽãã psql ã§DBã«æ¥ç¶ããæ€èšŒã®ã»ããã¢ãããè¡ããŸããPostgreSQL 18ãã uuidv7() ããã€ãã£ãã§ãµããŒããããã®ã§å¬ããã§ããã
# æ¥ç¶ç¢ºèª
psql -h localhost -p 15432 -U postgres --pset pager=off -c "SELECT version();"
--pset pager=off ã¯çµæãlessãªã©ã®ããŒãžã£ãŒã§è¡šç€ºãããæšæºåºåã«çŽæ¥åºåãããªãã·ã§ã³ã§ããã¹ã¯ãªããã§ã®å©çšããã°ååŸæã«äŸ¿å©ã§ãã
以äžã®SQLã§ããŒãã«ãäœæããŸãã
psql -h localhost -p 15432 -U postgres --pset pager=off -f - <<'SQL'
-- integerç
CREATE TABLE users_int (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(255),
created_at TIMESTAMP DEFAULT NOW()
);
-- UUID v7çïŒPostgreSQL 18ãããã€ãã£ããµããŒãïŒ
CREATE TABLE users_uuid (
id UUID PRIMARY KEY DEFAULT uuidv7(),
name VARCHAR(100),
email VARCHAR(255),
created_at TIMESTAMP DEFAULT NOW()
);
SQL
æ€èšŒ
æºåãã§ããã®ã§ãããŒã¿ãå ¥ãã€ã€æ€èšŒãéå§ããŠãããŸãã
ãŸãã¯ã²ãããå®è¡ããŠãçµæã®èå¯ã¯åŸè¿°ããŸãã
æ€èšŒ1ïŒINSERTæ§èœ
300äžä»¶ã®INSERTã«ãããæéãèšæž¬ããŸããUUID v7ãintegerãæç³»åé ã§B-treeã«è¿œèšããããããããŒãžåå²ã®åé¡ã¯çºçããŸãããå·®ãåºããšããã°UUIDçæã³ã¹ããšããŒãµã€ãºã«ããã€ã³ããã¯ã¹æžã蟌ã¿éã®éãã§ãããªããUUID v4ã¯æç³»åã§ãªããšããåé¡ãæã£ãŠãããããããã©ãŒãã³ã¹é¢ã§æ·±å»ãªåé¡ãçºçããŸãããä»åã¯æ€èšŒå¯Ÿè±¡ãšããŸããã
# integerç
psql -h localhost -p 15432 -U postgres --pset pager=off -c "\timing" -c "
INSERT INTO users_int (name, email)
SELECT
'user_' || i,
'user_' || i || '@example.com'
FROM generate_series(1, 3000000) AS i;
"
# UUIDç
psql -h localhost -p 15432 -U postgres --pset pager=off -c "\timing" -c "
INSERT INTO users_uuid (name, email)
SELECT
'user_' || i,
'user_' || i || '@example.com'
FROM generate_series(1, 3000000) AS i;
"
| æ¹åŒ | æèŠæé |
|---|---|
| integer | 9,309 ms |
| UUID v7 | 4,888 ms |
æ€èšŒ2ïŒã¹ãã¬ãŒãžãµã€ãº
ããŒãã«ãšã€ã³ããã¯ã¹ã®ãµã€ãºãæ¯èŒããŸããUUIDã¯128bitïŒ16ãã€ãïŒãintegerã¯32bitïŒ4ãã€ãïŒãªã®ã§ãããŒãµã€ãºã ãã§4åã®å·®ããããŸããä»åã¯ä»ã«ããŒãã«ãçšæããŠããŸããããå®éçšäžã§ã¯å€éšããŒãªã©ãããããã4åã§ã¯ãªã8åã16åãšå¢ããŠããéšåã§ãã
psql -h localhost -p 15432 -U postgres --pset pager=off -c "
SELECT
relname as table_name,
pg_size_pretty(pg_total_relation_size(relid)) as total_size,
pg_size_pretty(pg_relation_size(relid)) as table_size,
pg_size_pretty(pg_indexes_size(relid)) as index_size
FROM pg_stat_user_tables
WHERE relname LIKE 'users_%'
ORDER BY relname;
"
| ããŒãã« | ããŒãã«ãµã€ãº | ã€ã³ããã¯ã¹ãµã€ãº | åèš | åè |
|---|---|---|---|---|
| users_int | 234 MB | 64 MB | 298 MB | |
| users_uuid | 266 MB | 90 MB | 357 MB | +20% |
æ€èšŒ3ïŒSELECTæ§èœïŒåäžè¡ã©ã³ãã ååŸïŒ
å šããŒã¿ãžã®åäžã©ã³ãã ã¢ã¯ã»ã¹ãè¡ãããã£ãã·ã¥å¹çã®å·®ãæ€èšŒããŸãã
ã·ã³ãã«ã«psqlã§ã©ã³ãã ãªIDãæå®ããŠSELECTãç¹°ãè¿ããŸããUUIDçã¯äºåã«IDäžèЧããã¡ã€ã«ã«åºåããshufã§ã©ã³ãã éžæããŸããpsqlæ¥ç¶ã®ãªãŒããŒãããã¯äž¡è
åããªã®ã§å
¬å¹³ã«æ¯èŒã§ããŸãããã ããpsqlãéœåºŠåŒã³åºãã®ã¯ããªãé
ãã®ã§ãçæ³çã«ã¯pgbenchãªã©ã䜿ã£ãæ¹ãè¯ãã§ãâŠãä»åã¯ãšããçç±ã«ãã䜿ããªãã®ã§ãã®æ¹æ³ã§è¡ããŸããçç±ã¯åŸè¿°ããŸãã
# UUIDäžèЧããã¡ã€ã«ã«åºå
psql -h localhost -p 15432 -U postgres -tAc "SELECT id FROM users_uuid" > /tmp/uuids.txt
# ã³ã³ããåèµ·åã§ãã£ãã·ã¥ã¯ãªã¢
docker restart pg-bench
# çµ±èšæ
å ±ããªã»ãã
psql -h localhost -p 15432 -U postgres -c "SELECT pg_stat_reset();"
# integerç: ã©ã³ãã IDã§10000åSELECT
time for i in {1..10000}; do
id=$((RANDOM % 3000000 + 1))
psql -h localhost -p 15432 -U postgres -tAc "SELECT * FROM users_int WHERE id = $id" > /dev/null
done
# integerçã®ãã£ãã·ã¥ãããçã確èª
psql -h localhost -p 15432 -U postgres --pset pager=off -c "
SELECT
relname,
heap_blks_hit as hits,
heap_blks_read as reads,
ROUND(heap_blks_hit::numeric / NULLIF(heap_blks_hit + heap_blks_read, 0) * 100, 2) as hit_ratio
FROM pg_statio_user_tables
WHERE relname = 'users_int';
"
# ã³ã³ããåèµ·åã§ãã£ãã·ã¥ã¯ãªã¢
docker restart pg-bench
# çµ±èšæ
å ±ããªã»ãã
psql -h localhost -p 15432 -U postgres -c "SELECT pg_stat_reset();"
# UUIDç: ã©ã³ãã UUIDã§10000åSELECT
time for i in {1..10000}; do
uuid=$(shuf -n 1 /tmp/uuids.txt)
psql -h localhost -p 15432 -U postgres -tAc "SELECT * FROM users_uuid WHERE id = '$uuid'" > /dev/null
done
# UUIDçã®ãã£ãã·ã¥ãããçã確èª
psql -h localhost -p 15432 -U postgres --pset pager=off -c "
SELECT
relname,
heap_blks_hit as hits,
heap_blks_read as reads,
ROUND(heap_blks_hit::numeric / NULLIF(heap_blks_hit + heap_blks_read, 0) * 100, 2) as hit_ratio
FROM pg_statio_user_tables
WHERE relname = 'users_uuid';
"
| æ¹åŒ | ã¯ãšãªæ° | ãããæ° | ãã£ã¹ã¯èªã¿åã | ãããç | 1ã¯ãšãªãããreads |
|---|---|---|---|---|---|
| integer | 10,000 | 9,693 | 307 | 96.93% | 0.03 |
| UUID v7 | 6,300 | 180 | 6,286 | 2.78% | 1.00 |
â» psqlçµç±ã ãšããªãé ãã®ã§ãUUID v7æ¹åŒã¯éäžã§æã¡åããŸããããã®ãã6,300åããã¯ãšãªã§ããŠããŸããããã ãã£ãã·ã¥ãããçã®èšç®ã«ã¯ããã»ã©åé¡ãªãã¯ãã§ã
ã¯ãªãŒã³ã¢ãã
æ€èšŒãçµãã£ããã³ã³ãããåé€ããŸãã
docker stop pg-bench && docker rm pg-bench
rm -f /tmp/uuids.txt
çµè«ãšèå¯
ä»åã®æ€èšŒçµæããŸãšãããšïŒ
| æ€èšŒé ç® | integer | UUID v7 | å·® |
|---|---|---|---|
| INSERT (300äžä»¶) | 9.3ç§ | 4.9ç§ | UUIDãéãïŒâ»åŸè¿°ïŒ |
| ã¹ãã¬ãŒãžãµã€ãº | 298 MB | 357 MB | +20% |
| ãã£ãã·ã¥ãããç | 96.93% | 2.78% | çŽ35åã®å·® |
| 1ã¯ãšãªããããã£ã¹ã¯èªã¿åã | 0.03å | 1.00å | 33å |
INSERTã§UUIDãéãã£ãã®ã¯èšæž¬ãå®è¡ç°å¢ã®åé¡ãããããã§ããä»åã®æ€èšŒã¯äœåãããæ¹ãå€ããªãã宿œããã®ã§ãããä»ã®å®è¡ã§ã¯integerã®æ¹ãè¥å¹²éãã£ãïŒ20%çšåºŠïŒã§ãã
ã¹ãã¬ãŒãžãµã€ãºã¯ +20% ã§ããUUIDã®æ¹ã倧ããã®ã¯åœããåã§ããããã ãããã¯æ€èšŒæ¹æ³ããããããŸããã§ãããnameãemailã«ã©ã ãå
¥ããŠããŸã£ãã®ã§ããã®åã®åœ±é¿ã§æ£ç¢ºãªå·®ãåºããŠããŸããããããã®åããªãæ¹ãè¯ãã£ãã§ããã
æ¬åœã§ãããã£ãã·ã¥ãããçã«ã¯åçãªå·®ãåºãŸããã
UUIDã¯1ã¯ãšãªãããçŽ35åã®ãã£ã¹ã¯èªã¿åããçºçããŠããŸãã ããã¯Kenn EjimaãããææããŠãããUUIDã«ãããã£ãã·ã¥å¹çã®äœäžããè£ä»ããçµæã§ãã
UUIDã®ããŒãµã€ãºïŒ128bitïŒã¯integerïŒ32bitïŒã®4åãããããåãããŒãžã«æ ŒçŽã§ããè¡æ°ãå°ãªããªããŸãããã®çµæãã©ã³ãã ã¢ã¯ã»ã¹æã«ãã£ãã·ã¥ã«å¿ èŠãªããŒã¿ãä¹ã£ãŠãã確çãäžããããã£ã¹ã¯I/Oãå¢å ããŸãã
æšå¥šæ§æã«ã€ããŠ
Kenn Ejimaããã®ãã€ãŒãã§ã¯æšå¥šã®æ§æãæçš¿ãããŠããŸããããããã«åæããŸãã
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY, -- å
éšçšïŒ64bité£çª
public_id VARCHAR(16) UNIQUE -- å€éšçšïŒrandom_hex(16)
);
ãã®æ§æã§ããã°ãã€ãŒãã®éããã·ã£ãŒãã£ã³ã°ãåé¿ããŠé·ãæ§æãå€ããã«ç¶æã§ãããšæããŸãã
public_idã颿°çã§éœåºŠå°åºããããåºå®ã§å ¥ããã
public_idã«ã©ã ãçšæããã«ãintegerã®pkeyããäœããã®ããã·ã¥é¢æ°ãæå·åã§éœåºŠpublic_idãå°åºããæ¹æ³ããããŸãã
ããããDBã«public_idã«ã©ã ãšããŠå€ãæãããæ¹ãå®åäžã¯äŸ¿å©ã§ãã
- BIããŒã«ãããŒã¿åæåºç€ã§ã®å©çš: MetabaseãRedashãBigQueryãªã©ã§ããŒã¿ãåç §ããéã颿°ã§å°åºããæ¹åŒã ãšããŒã«åŽã§åã颿°ãå®è£ ããå¿ èŠããããŸããã«ã©ã ãšããŠååšããã°åçŽãªJOINããã£ã«ã¿ã§æžã¿ãŸãã
- å€éšã·ã¹ãã 飿º: WebhookãAPI飿ºããã°è§£æãªã©ã§å€éšã·ã¹ãã ãpublic_idãåç §ããå ŽåãDBã«å€ãããã°SQLã§çŽæ¥æ€çŽ¢ã§ããŸãã
- ãããã°ã®ãããã: æ¬çªé害æã«ããã®public_idã®ãŠãŒã¶ãŒã調ã¹ããããšãªã£ãæãã«ã©ã ãããã°å³åº§ã«ã¯ãšãªã§ããŸãã
- ã€ã³ããã¯ã¹ã®å¹ç: ã«ã©ã ã«å¯ŸããŠã€ã³ããã¯ã¹ã貌ãã°ãpublic_idã§ã®æ€çŽ¢ãé«éã§ãã颿°ã€ã³ããã¯ã¹ãå¯èœã§ããã管çãè€éã«ãªããŸãã
å°åºæ¹åŒã ãšäžäŸ¿ãªå ·äœäŸãšããŠã以äžã®ãããªã·ããªãªãèããããŸãïŒå®éã«è¿ããã®ãäœéšããŠããŸãïŒã
- å¶æ¥ãID public_id=foo ã®ã客æ§ãããã°ã®åãåããããã£ãã®ã§ããã確èªãé¡ãã§ããŸããïŒã
- éçºè 1ãåãããŸããã調ã¹ãŸããïŒããŒãš fooã£ãŠã©ã®IDã ã£ãã»ã»ã»ãã³ãŒã颿°ãå®è¡ããªããšã»ã»ã»ïŒã
- PdMãGA4ã®ããŒã¿ã§UserID public_id=barãèšé²ããŠãããšæãã®ã ãã©ããã®ãŠãŒã¶ãŒã®DBã®ããŒã¿ãšGA4ã®ããŒã¿ãJOINããŠåæããã¬ããŒããBIç°å¢ã«äœã£ãŠãã ããã
- éçºè 2ãåãããŸãããïŒfrontendã«ã¯public_idãè¿ããŠããããidã¯è¿ããŠããªããã ãããBIã«ããDBçã®ããŒã¿ãJOINããªããšâŠãããBIç°å¢ã§decodeããªããšã»ã»ã»ïŒã
- ïŒåŸæ¥ïŒ
- éçºè 1ïŒ2ãKPTã§ãã®åé¡ãå ±æããŸãïŒèª¿æ»ããããã°ãããã¥ããã§ãïŒã
- éçºè 3ãåŒç€Ÿã®éçšç®¡çã·ã¹ãã äžã§decodeããæ©èœãäœããïŒããšããã¡ãã¡decodeããªããŠããããã«public_idã衚瀺ããæ©èœãäœããïŒBIç°å¢ã¯BIã«ããŒã¿ãå ¥ããåã®ETLã§decodeããåŠçãå ¥ãããïŒã
æ³åãããšé¢åã§ãããåãããpublic_idãããã°è§£æ±ºãã話ã§ãã
UUIDã䜿ãå Žé¢
åé ã§Webåºåãšãã話ãããŸããããUUIDãpkeyã§ãè¯ãã±ãŒã¹ã¯äžå®ååšããŸããäŸãã°é¢é£ãã€ãŒãã§ä»¥äžãåèã«ãªããŸãã
ç§ãæ±ã£ãŠããã®ã¯æè¬OpenWebã®åºåé ä¿¡ã·ã¹ãã ã§ããããããµã€ãã«èšæž¬ã®ããã®Beaconèšçœ®ããŠããã£ãããåºå衚瀺ã®ãã£ã³ã¹ã§IDæ¡çªããã®ã§ãããæšä»ã®Cookieäºæ ã§CookieãããããããæšãŠãããã®ã§ããã®ãã³ã«IDãæ¡çªããªããå¿ èŠããããŸãããâŠ
— æéé ä¿¡ç ç©¶äŒå±±åŽå€§èŒ å¶çŽçè«ãšåŸ ã¡è¡åçè«ã«ããæè¡çµå¶ã¢ããã€ã¶ãªãšãšã³ãžãã¢èµ·æ¥çžè« (@yamaz) January 30, 2026
å¿ ãããUUID pkeyãæªãšããããã§ã¯ãªãã§ãããã»ãšãã©ã®ãŠãŒã¹ã±ãŒã¹ã§ã¯äžèŠãªã®ã§ãããå©çšããå Žåã¯ååã«èª¬æããããã³ãŒãã«ã³ã¡ã³ããæ®ããŠãªãUUIDãå¿ èŠãªã®ããæèšãããšè¯ãã§ãããã
æ€èšŒã§èŠåŽããããš
ä»åã®æ€èšŒã§ã¯ãããã£ãã·ã¥ãããçã®å·®ããæç¢ºã«ç€ºããŸã§ã«äœåºŠãæ¹æ³ã倿ŽããŸãããããŸã誰ãã®åœ¹ã«ç«ã€æ°ã¯ããŸããããäžå¿èŠåŽããç¹ãèšèŒããŠãããŸãã
1. ã¡ã¢ãªèšå®ã®èª¿æŽ
æå㯠memory=512MB ã memory=256MB ã§å®è¡ããŠããã®ã§ãããOSã®ããŒãžãã£ãã·ã¥ãå¹ããããŠãã£ãã·ã¥ãããçãäž¡è
ãšã100%ã«ãªã£ãŠããŸããŸãããæ¬¡ã« memory=64MB, shared_buffers=16MB ã§è©ŠããŸããããOOMãçºçããŸãããæçµçã« memory=128MB, shared_buffers=16MB ã«èœã¡çããŸããã
ããããã±ãŒã¹ãããã®ã§ãæã ãä¿å®ããDBã§äžèŠã«UUID pkeyã䜿ãããŠãããšããŠããèŽåœçã§ãªãã±ãŒã¹ããããç¡èŠããŠãè¯ãå ŽåããããšæããŸãã
2. pgbenchã®å¶çŽ
pgbenchã¯PostgreSQLæšæºã®ãã³ãããŒã¯ããŒã«ã§ãã«ã¹ã¿ã SQLã¹ã¯ãªãããé«éã«ç¹°ãè¿ãå®è¡ã§ããŸããintegerçã§ã¯ \set id random(1, 3000000) ã®ããã«å€æ°ã«ã©ã³ãã ãªæŽæ°ãã»ããã§ãããããçŽç²ãªPKã«ãã¯ã¢ããã®æ§èœãç°¡åã«æž¬å®ã§ããŸãã
ããããpgbenchã«ã¯å€éšãã¡ã€ã«ããå€ãèªã¿èŸŒãæ©èœããããŸãããUUIDçã§ã¯300äžä»¶ã®UUIDäžèЧãã1ã€ãéžãã§å€æ°ã«ã»ãããããã®ã§ããããããã§ããŸããã
ãã®ãããpgbenchã諊ãã·ã³ãã«ã«psqlã§ã«ãŒãããæ¹åŒã«å€æŽããŸããã
- integerç:
$((RANDOM % 3000000 + 1))ã§çŽæ¥IDçæ - UUIDç: äºåã«ãã¡ã€ã«åºåããUUIDäžèЧãã
shufã§ã©ã³ãã éžæ
psqlæ¥ç¶ã®ãªãŒããŒãããã¯å€§ããã§ãããäž¡è 忡件ãªã®ã§å ¬å¹³ã«æ¯èŒã§ããçŽç²ãªPKæ€çŽ¢ã®ãã£ãã·ã¥å¹çãèšæž¬ã§ããŸããã
ããã
ä»åã®æ€èšŒã¯å®ç§ã§ã¯ãªãã§ããäŸãã°å®éã«ã¯ããŒã¿ã«å¯ŸããŠæºéãªãã©ã³ãã ã¢ã¯ã»ã¹ãããã±ãŒã¹ããã¯ãäžéšã®ããŒã¿ã«ã¢ã¯ã»ã¹ãéäžããã±ãŒã¹ãèããããŸãããã®ãããUUIDã§ããã£ãã·ã¥ãããçãåé¡ã«ãªããªãã±ãŒã¹ã¯ãããŸãããŸããããããã¢ã¯ã»ã¹ã¯å€ããããŒã¿éãå°ãªããååã«ãã£ãã·ã¥ãããããå¯èœæ§ããããŸããããå³å¯ãªæ€èšŒãããå Žåã¯ãä»åã®ãããªéœåºŠpsqlã³ãã³ããå®è¡ããæ¹æ³ã§ã¯ãªããäœããã®ã·ããªãªããŒã¹ã®è² è·ãã¹ãããŒã«ã䜿ã£ãŠæ€èšŒããæ¹ãè¯ãã§ãããã
ä»åŸã«ãããŠãåé¡ãªãå Žåã¯ç¡çã«ä»ããUUIDã«ã©ã ãintegerã«ã©ã ã«å€ããå¿ èŠã¯ãªãã§ãããããæ°ããã·ã¹ãã ãäœãå Žåã¯åºæ¬çã«ã¯ç¹å¥ãªçç±ããªãéãã¯UUIDã¯é¿ããã¹ããšèšããã§ãããã
ä»åã®æ€èšŒã®ãããã§ããã®ç¥èã¯ç§ã«å»ãŸãããšæãã®ã§ãä»åŸãèªä¿¡ãæã£ãŠintegerã®pkeyãããŒã¹ã«ããŠè¡ããããšæããŸãã
çŸåšãããã«ãªã§ã¯ITãšã³ãžãã¢ãåéããŠããŸããèå³ã®ããæ¹ã¯ãã²ãæ°è»œã«ãé£çµ¡ãã ããïŒ