Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
MySQLで画像 を扱うメリット・デメリットと障害・解決事例/Advantages_and_disadvantages_of_handling_images_with_MySQL_and_special_patterns
mamy1326
June 16, 2018
Programming
0
1.3k
MySQLで画像 を扱うメリット・デメリットと障害・解決事例/Advantages_and_disadvantages_of_handling_images_with_MySQL_and_special_patterns
PHPカンファレンス福岡 2018 でお話ししました
「MySQLで画像 を扱うメリット・デメリットと障害・解決事例」
の登壇スライトです。
mamy1326
June 16, 2018
Tweet
Share
More Decks by mamy1326
See All by mamy1326
mamy1326
2
250
mamy1326
3
1.8k
mamy1326
8
1.4k
mamy1326
4
1.3k
mamy1326
2
2k
mamy1326
22
8.7k
mamy1326
80
27k
mamy1326
5
2.5k
mamy1326
7
890
Other Decks in Programming
See All in Programming
christianliebel
PRO
0
130
manfredsteyer
PRO
0
140
grapecity_dev
0
180
alperhankendi
1
140
ntaro
0
160
morimorihoge
1
150
takutakahashi
2
200
yotuba088
1
590
yasaichi
31
7.7k
grapecity_dev
0
170
selcukusta
1
100
afilina
PRO
0
120
Featured
See All Featured
chriscoyier
145
20k
bkeepers
408
58k
jcasabona
8
550
shpigford
369
42k
ddemaree
273
31k
sachag
267
17k
shpigford
165
19k
michaelherold
224
8.5k
paulrobertlloyd
72
1.4k
frogandcode
128
20k
addyosmani
1346
190k
mojombo
358
62k
Transcript
.Z42-Ͱը૾Λѻ͏ ϝϦοτɾσϝϦοτͱ োɾղܾࣄྫ ·Έͳ͓͖ !NBNZ +VO!QIQDPOGVL
ࣦഊମݧͱ ղܾख๏Λղઆ
ϝϦοτ " σϝϦοτ $
దʹը૾Λ ѻ͏ํ๏Λ ͓͠͠·͢
͓͢Δ͜ͱ ▶︎ ࣗݾհ ▶︎ τϥϒϧࣄྫͱղܾํ๏ ▶︎ ϝϦοτɾσϝϦοτ ▶︎ Կ͕ϕετͳͷ͔ ▶︎
͓ΘΓʹ
͓͢Δ͜ͱ ▶︎ ࣗݾհ ▶︎ τϥϒϧࣄྫͱղܾํ๏ ▶︎ ϝϦοτɾσϝϦοτ ▶︎ Կ͕ϕετͳͷ͔ ▶︎
͓ΘΓʹ
ࣗݾհ Name ɿ·Έͳ͓͖ ॴଐɹ ɿInnovator Japan Inc. Twitterɿ@mamy1326ʢ·Έʔʣ - ීஈPHPॻ͍ͯ·͢
- 20171݄ʹॳΊͯmy.cnfΛ৮Δ - 2017 MySQL͕झຯ - 2018 DNSͱωοτϫʔΫ͕झຯ
ͱ͜ΖͰ Έͳ͞Μ
ը૾Λ3%#ʹ ೖΕͨ͜ͱ ·ͨʜ
ϓϩδΣΫτܦݧ ͋Γ·͔͢ʁ ڍख✋
ͪΖΜʁ ͋Γ·͢ʂ
ିཧγεςϜ ݅ը૾Λશ෦ ΧϥϜʹೖΕΔ
ͭΒ͍
͓͢Δ͜ͱ ▶︎ ࣗݾհ ▶︎ τϥϒϧࣄྫͱղܾํ๏ ▶︎ ϝϦοτɾσϝϦοτ ▶︎ Կ͕ϕετͳͷ͔ ▶︎
͓ΘΓʹ
None
%#͔Β ը૾Λ4&-&$5 ʢ֎؍ɺɺؒऔɺपลʣ
ಥવͷ ͓٬͞·͔Βͷ ͓͍߹Θͤ
͋Δͷ͓͍߹Θͤ ☎ɿ݅σʔλΞοϓϩʔυͨ͠Βɺ ɹɹը໘͕ਅͬനʹͳΔΜͰ͚͢Ͳ ɿը໘Ωϟϓνϟૹ͍ͬͯͯ ɹɹΑΖ͍͠Ͱ͔͢ʁ
͋Δͷ͓͍߹Θͤ ը໘ ਅͬന
͋Δͷ͓͍߹Θͤ ը໘ ਅͬന λΠϜΞτ
࣮ࡍʹى͖ͨτϥϒϧ ⾣େ͖ͳαΠζͷը૾ΛΞοϓϩʔυ ɹˠεϚϗɺσδΧϝαΠζ ⾣ෳຕΛҰʹΞοϓϩʔυ ɹˠ݅ͷը૾͕ଟ͍ ⾣ϦΫΤετ͕ଟൃ ɹˠൟظʹूதɺෳళฮͰൃੜ
ͯ ςʔϒϧߏݟΔ͔ʜ
mysql> show create table bukken\G *************************** 1. row *************************** Table:
bukken Create Table: CREATE TABLE `bukken` ( `id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `gaikan_01` mediumblob NOT NULL, `gaikan_02` mediumblob, `gaikan_03` mediumblob, `gaikan_04` mediumblob, `gaikan_05` mediumblob, `gaikan_06` mediumblob, `gaikan_07` mediumblob, `gaikan_08` mediumblob, `gaikan_09` mediumblob, `gaikan_10` mediumblob, `madori_01` mediumblob NOT NULL, `naiso_01` mediumblob NOT NULL, `naiso_02` mediumblob, `naiso_03` mediumblob, `naiso_04` mediumblob, `naiso_05` mediumblob, `naiso_06` mediumblob, `naiso_07` mediumblob, `naiso_08` mediumblob, `naiso_09` mediumblob, `naiso_10` mediumblob, `syuhen_01` mediumblob NOT NULL, `syuhen_02` mediumblob, `syuhen_03` mediumblob, `syuhen_04` mediumblob, `syuhen_05` mediumblob, `syuhen_06` mediumblob, `syuhen_07` mediumblob, `syuhen_08` mediumblob, `syuhen_09` mediumblob, `syuhen_10` mediumblob, `panorama` mediumblob, `gaikan_s_01` mediumblob NOT NULL, `gaikan_s_02` mediumblob, `gaikan_s_03` mediumblob, `gaikan_s_04` mediumblob, `gaikan_s_05` mediumblob, `gaikan_s_06` mediumblob, `gaikan_s_07` mediumblob, `gaikan_s_08` mediumblob, `gaikan_s_09` mediumblob, `gaikan_s_10` mediumblob, `madori_s_01` mediumblob NOT NULL, `naiso_s_01` mediumblob NOT NULL, `naiso_s_02` mediumblob, `naiso_s_03` mediumblob, `naiso_s_04` mediumblob, `naiso_s_05` mediumblob, `naiso_s_06` mediumblob, `naiso_s_07` mediumblob, `naiso_s_08` mediumblob, `naiso_s_09` mediumblob, `naiso_s_10` mediumblob, `syuhen_s_01` mediumblob NOT NULL, `syuhen_s_02` mediumblob, `syuhen_s_03` mediumblob, `syuhen_s_04` mediumblob, `syuhen_s_05` mediumblob, `syuhen_s_06` mediumblob, `syuhen_s_07` mediumblob, `syuhen_s_08` mediumblob, `syuhen_s_09` mediumblob, `syuhen_s_10` mediumblob, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8mb4 1 row in set (0.00 sec)
mysql> show create table bukken\G *************************** 1. row *************************** Table:
bukken Create Table: CREATE TABLE `bukken` ( `id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `gaikan_01` mediumblob NOT NULL, `gaikan_02` mediumblob, `gaikan_03` mediumblob, `gaikan_04` mediumblob, `gaikan_05` mediumblob, `gaikan_06` mediumblob, `gaikan_07` mediumblob, `gaikan_08` mediumblob, `gaikan_09` mediumblob, `gaikan_10` mediumblob, `madori_01` mediumblob NOT NULL, `naiso_01` mediumblob NOT NULL, `naiso_02` mediumblob, `naiso_03` mediumblob, `naiso_04` mediumblob, `naiso_05` mediumblob, `naiso_06` mediumblob, `naiso_07` mediumblob, `naiso_08` mediumblob, `naiso_09` mediumblob, `naiso_10` mediumblob, `syuhen_01` mediumblob NOT NULL, `syuhen_02` mediumblob, `syuhen_03` mediumblob, `syuhen_04` mediumblob, `syuhen_05` mediumblob, `syuhen_06` mediumblob, `syuhen_07` mediumblob, `syuhen_08` mediumblob, `syuhen_09` mediumblob, `syuhen_10` mediumblob, `panorama` mediumblob, `gaikan_s_01` mediumblob NOT NULL, `gaikan_s_02` mediumblob, `gaikan_s_03` mediumblob, `gaikan_s_04` mediumblob, `gaikan_s_05` mediumblob, `gaikan_s_06` mediumblob, `gaikan_s_07` mediumblob, `gaikan_s_08` mediumblob, `gaikan_s_09` mediumblob, `gaikan_s_10` mediumblob, `madori_s_01` mediumblob NOT NULL, `naiso_s_01` mediumblob NOT NULL, `naiso_s_02` mediumblob, `naiso_s_03` mediumblob, `naiso_s_04` mediumblob, `naiso_s_05` mediumblob, `naiso_s_06` mediumblob, `naiso_s_07` mediumblob, `naiso_s_08` mediumblob, `naiso_s_09` mediumblob, `naiso_s_10` mediumblob, `syuhen_s_01` mediumblob NOT NULL, `syuhen_s_02` mediumblob, `syuhen_s_03` mediumblob, `syuhen_s_04` mediumblob, `syuhen_s_05` mediumblob, `syuhen_s_06` mediumblob, `syuhen_s_07` mediumblob, `syuhen_s_08` mediumblob, `syuhen_s_09` mediumblob, `syuhen_s_10` mediumblob, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8mb4 1 row in set (0.00 sec) ͑ʁ
ςʔϒϧߏ mysql> show create table bukken\G ****************** 1. row
****************** Table: bukken Create Table: CREATE TABLE `bukken` ( `id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, ⾣ʮͪΌΜͱʯ֬ೝͯ͠ΈΔ
ςʔϒϧߏ `gaikan_01` mediumblob NOT NULL, `gaikan_02` mediumblob, `gaikan_03` mediumblob,
`gaikan_04` mediumblob, `gaikan_05` mediumblob, `gaikan_06` mediumblob, `gaikan_07` mediumblob, `gaikan_08` mediumblob, `gaikan_09` mediumblob, `gaikan_10` mediumblob,
ςʔϒϧߏ `madori_01` mediumblob NOT NULL, `naiso_01` mediumblob NOT NULL,
`naiso_02` mediumblob, `naiso_03` mediumblob, `naiso_04` mediumblob, `naiso_05` mediumblob, `naiso_06` mediumblob, `naiso_07` mediumblob, `naiso_08` mediumblob, `naiso_09` mediumblob, `naiso_10` mediumblob,
ςʔϒϧߏ `syuhen_01` mediumblob NOT NULL, `syuhen_02` mediumblob, `syuhen_03` mediumblob,
`syuhen_04` mediumblob, `syuhen_05` mediumblob, `syuhen_06` mediumblob, `syuhen_07` mediumblob, `syuhen_08` mediumblob, `syuhen_09` mediumblob, `syuhen_10` mediumblob, `panorama` mediumblob,
ςʔϒϧߏ `gaikan_s_01` mediumblob NOT NULL, `gaikan_s_02` mediumblob, `gaikan_s_03` mediumblob,
`gaikan_s_04` mediumblob, `gaikan_s_05` mediumblob, `gaikan_s_06` mediumblob, `gaikan_s_07` mediumblob, `gaikan_s_08` mediumblob, `gaikan_s_09` mediumblob, `gaikan_s_10` mediumblob,
ςʔϒϧߏ `madori_s_01` mediumblob NOT NULL, `naiso_s_01` mediumblob NOT NULL,
`naiso_s_02` mediumblob, `naiso_s_03` mediumblob, `naiso_s_04` mediumblob, `naiso_s_05` mediumblob, `naiso_s_06` mediumblob, `naiso_s_07` mediumblob, `naiso_s_08` mediumblob, `naiso_s_09` mediumblob, `naiso_s_10` mediumblob,
ςʔϒϧߏ `syuhen_s_01` mediumblob NOT NULL, `syuhen_s_02` mediumblob, `syuhen_s_03` mediumblob,
`syuhen_s_04` mediumblob, `syuhen_s_05` mediumblob, `syuhen_s_06` mediumblob, `syuhen_s_07` mediumblob, `syuhen_s_08` mediumblob, `syuhen_s_09` mediumblob, `syuhen_s_10` mediumblob, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7687528 DEFAULT CHARSET=utf8mb4 1 row in set (0.00 sec)
ςʔϒϧߏ `syuhen_s_01` mediumblob NOT NULL, `syuhen_s_02` mediumblob, `syuhen_s_03` mediumblob,
`syuhen_s_04` mediumblob, `syuhen_s_05` mediumblob, `syuhen_s_06` mediumblob, `syuhen_s_07` mediumblob, `syuhen_s_08` mediumblob, `syuhen_s_09` mediumblob, `syuhen_s_10` mediumblob, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7687528 DEFAULT CHARSET=utf8mb4 1 row in set (0.00 sec) όΠφϦσʔλ อଘ༻ΧϥϜ
ͳΜͱը૾ શ෦3%#ʹ ͋ΔΜͰ͢Αʢ͑
࣮ࡍͷͱ͜Ζ ͲΜͳ։ൃ͔ͩͬͨ
ཧʢ։ൃʣͱݱ࣮ʢӡ༻ʣ ͏Μɺେৎʂ ⾣։ൃ͍ͯͨ͠ڥ 8FC %# ։ൃऀ
⾣࣮ࡍͷڥ 8FC %# ཧʢ։ൃʣͱݱ࣮ʢӡ༻ʣ
⾣࣮ࡍͷڥ ❌ ωοτϫʔΫ 8FC %# ཧʢ։ൃʣͱݱ࣮ʢӡ༻ʣ
⾣࣮ࡍͷڥ ϓϩηε 8FC %# ❌ ཧʢ։ൃʣͱݱ࣮ʢӡ༻ʣ
⾣࣮ࡍͷڥ ❌ λΠϜΞτ 8FC %# ཧʢ։ൃʣͱݱ࣮ʢӡ༻ʣ
ӡ༻Λఆ͍ͯ͠ͳ͍ ɾେ͖ͳը૾Ξοϓ͠ͳ͍ͩΖ͏ ɾ͍ͬΜʹΞοϓ͠ͳ͍ͩΖ͏ ɾେͰΞοϓ͠ͳ͍ͩΖ͏ ɾ༰ྔ͙͢ʹᷓΕͳ͍ͩΖ͏ ɾԽ͠ͳ͍͍ͯͩ͘Ζ͏ ɾࠔͬͨΒεέʔϧΞοϓ͢Εʁ
ӡ༻Λఆ͍ͯ͠ͳ͍ ɾେ͖ͳը૾Ξοϓ͠ͳ͍ͩΖ͏ ɾ͍ͬΜʹΞοϓ͠ͳ͍ͩΖ͏ ɾେͰΞοϓ͠ͳ͍ͩΖ͏ ɾ༰ྔ͙͢ʹᷓΕͳ͍ͩΖ͏ ɾԽ͠ͳ͍͍ͯͩ͘Ζ͏ ɾࠔͬͨΒεέʔϧΞοϓ͢Εʁ ❌
Ͱ Ͳ͏ͬͯ ղܾ͢Δ͔
ղܾࡦ ⾣ॲཧͰ͖ΔσʔλྔΛ੍ݶ ɹˠׂͱ͙͢ରԠͰ͖Δ͕ఆత ⾣ϢʔβʔΛ੍ݶ ɹˠαʔϏεͰ͋ΔҎ্͍͠ ⾣ࢹ͢Δ ɹˠେ͕ͩࠜຊղܾͰͳ͍ ⾣%#ॲཧΛվળ͢Δ ɹˠ໌Β͔ͳωοΫΛࠜຊղܾ
ղܾࡦ ⾣ॲཧͰ͖ΔσʔλྔΛ੍ݶ ɹˠׂͱ͙͢ରԠͰ͖Δ͕ఆత ⾣ϢʔβʔΛ੍ݶ ɹˠαʔϏεͰ͋ΔҎ্͍͠ ⾣ࢹ͢Δ ɹˠେ͕ͩࠜຊղܾͰͳ͍ ⾣%#ॲཧΛվળ͢Δ ɹˠ໌Β͔ͳωοΫΛࠜຊղܾ
ࠜຊղܾ·Ͱͷ ಓͷΓ
ࠜຊղܾ·ͰͷಓͷΓ ⾣ը૾Λ3%#͔ΒΓ͢ ⾣3%#ͷόΠφϦొഇࢭ ⾣શҠߦ·ͰͷΈߟҊ
ಓͷΓᶃ ⾣ը૾Λ3%#͔ΒΓ͢ ɾը૾ϑΝΠϧ໊Λอଘ͢Δςʔϒϧ༻ҙ ɾ3%#Ҏ֎ʹը૾อଘ͢ΔॲཧΛՃʢᶄʣ ɾϑΝΠϧ໊Λ3%#ʹอଘ͢ΔॲཧՃ ৽نొɾมߋը૾Λ 3%#Ҏ֎ʹஔ͢Δ४උ
ಓͷΓᶄ ⾣3%#ͷόΠφϦొॲཧΛഇࢭ ɾը૾อଘϧʔϧΛܾΊΔʢJEJEOBJTPKQHʣ ɾॲཧΓସ͑ͷͨΊϝϯςφϯε ɾ3%#ʹొ͍ͯͨ͠ॲཧΛશʹഇࢭ 3%#Ͱͷ ը૾૿ՃΛఀࢭ
ಓͷΓᶅ ⾣શҠߦ·ͰͷΈߟҊ ɾ3%#ը૾ΛόονͰετϨʔδ ɾετϨʔδʹແ͚Ε3%#͔ΒಡΉ ɾશʹҠߦ͕ऴΘΔ࣌ؒΛܭࢉ ܭըతʹը૾Λ શʹҠߦ
⾣අ༻ͱظ͕ؒେʹ͔͔Δ ⾣αʔϏε͕ఀࢭ͢Δ ⾣ӡ༻ޙͰࣦഊ͕ڐ͞Εͳ͍ ⾣৴༻͕ࣦ͢Δ ղܾ·ͰʹΘ͔ͬͨ͜ͱ
͍ͬͨΜղܾ ͔ͨ͠Βͦ͜ ྐʹ͠Α͏ʂ
͓͢Δ͜ͱ ▶︎ ࣗݾհ ▶︎ τϥϒϧࣄྫͱղܾํ๏ ▶︎ ϝϦοτɾσϝϦοτ ▶︎ Կ͕ϕετͳͷ͔ ▶︎
͓ΘΓʹ
ϝϦοτ
ϝϦοτ ▶︎ τϥϯβΫγϣϯͷԸܙ ▶︎ ҉߸ԽͱηΩϡϦςΟ ▶︎ όοΫΞοϓͷूੑ ▶︎ ࠪʢཤྺʣͷ౷߹తͳ࣮
τϥϯβΫγϣϯͷԸܙ ⾣ϑΝϯτϜϑΝΠϧͷճආ ɹˠSPMMCBDLͰҰൃͰͳ͔ͬͨ͜ͱʹ ϑΝΠϧͱ%#͕ ಉ͡τϥϯβΫγϣϯͰ੍ޚ
҉߸ԽͱηΩϡϦςΟ ⾣ඇৗʹηϯγςΟϒͳը૾ ɹˠΧϧςʹఴ͢Δը૾ͳͲ ҉߸ԽɾηΩϡΞʹ औΓѻ͏
όοΫΞοϓͷूੑ ⾣%#όοΫΞοϓͱಉ࣌ʹ ɹˠը૾όοΫΞοϓ͞ΕΔ %#ϦετΞผγεςϜͱͯ͠ͷ ڥߏஙָ͕
ࠪ ཤྺ ͷ౷߹తͳ࣮ ⾣ը૾ͷߋ৽ཤྺΛऔΓ͍ͨ ɹˠόʔδϣϯཧ͍ͨ͠ ύϑΥʔϚϯεΛ٘ਜ਼ʹͯ͠ ࣮͍ͨ͠ͳΒ0,
σϝϦοτ
σϝϦοτ ▶︎ ύϑΥʔϚϯεԼ ▶︎ DBͷετϨʔδѹഭ ▶︎ ωοτϫʔΫΛѹഭ ▶︎ োͷ૿Ճ ▶︎
͓·͚ɿը૾ΛDB͔Βׂ࣌ͷฐ
ύϑΥʔϚϯεԼ ⾣ը૾σʔλΛϨίʔυʹؚΉ ɹˠಡΈॻ͖͢Δσʔλྔ૿Ճ σΟεΫ*0͕ ͘ͳΔ
%#ͷετϨʔδѹഭ ⾣ఆΛ͑ͨσʔλ૿Ճ ɹˠཁ݅Ճӡ༻ઃܭΕ কདྷతʹ ετϨʔδΛѹഭ
ωοτϫʔΫΛѹഭ ⾣ը૾Λ%#͔Βऔಘ ɹˠωοτϫʔΫѹഭ 8FC%#ؒ 8FC%#ؒͷϨΠςϯγ͕ߴ͘ Ϩεϙϯε͕Լ
োͷ૿Ճ ⾣ը૾ߋ৽ॲཧ͕ෳࡶ ɹˠ༨ܭͳϓϩάϥϜɺ42-Λ௨͢ ো͕૿͑Δ
⾣੩తϑΝΠϧΛઐ༻αʔόʔ ɹˠશϨίʔυҠߦɺϑΝΠϧ໊Ճ ؆୯ʹׂɺҠಈͰ͖ͣ σʔλྔ࣍ୈͰ͕͔͔࣌ؒΔ ʲ͓·͚ʳը૾Λ%#͔Βׂ࣌ͷฐ
͓͢Δ͜ͱ ▶︎ ࣗݾհ ▶︎ τϥϒϧࣄྫͱղܾํ๏ ▶︎ ϝϦοτɾσϝϦοτ ▶︎ Կ͕ϕετͳͷ͔ ▶︎
͓ΘΓʹ
Կ͕ϕετͳͷ͔ ⾣ಛघͳཁ݅ͷ߹ʹ͏ ɹɹˠָ͔ͩΒ҆қʹಥͬࠐ·ͳ͍ ⾣ύϑΥʔϚϯεɾίετ ɹͱͷτϨʔυΦϑ ɹɹˠ։ൃɺӡ༻ίετΛਂ͘ߟྀ ⾣ઃܭɾ࣮Λ͔ͬ͠Γܭը ɹɹˠޙͰࠔΔ͜ͱ͕͘͢͝ଟ͍ ⾣3%#ͷຊདྷͷΛߟྀ ɹɹˠϦϨʔγϣφϧσʔλϕʔεͬͯͳΜ͚ͩͬʁ
͓͢Δ͜ͱ ▶︎ ࣗݾհ ▶︎ τϥϒϧࣄྫͱղܾํ๏ ▶︎ ϝϦοτɾσϝϦοτ ▶︎ Կ͕ϕετͳͷ͔ ▶︎
͓ΘΓʹ
γεςϜɾαʔϏε
ཁ݅ͱϦιʔεͷ τϨʔυΦϑ
͋ͪΒΛཱͯΕ ͪ͜Βཱ͕ͨ͵͕
ϝϦοτɾσϝϦοτ ಛघύλʔϯΛ Α͘ߟ͑ͯ
க໋తʹ ࠔΒͳ͍Α͏ʹ
ӡ༻Λߟ͑ͨ ઃܭΛ͠·͠ΐ͏ʂ
σʔλͷण໋ ΞϓϦΑΓ͍ͧ
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ