planCacheSetFilter
์ด ํ์ด์ง์ ๋ด์ฉ
์ ์
planCacheSetFilter
์ปฌ๋ ์ ์ ๋ํ ์ธ๋ฑ์ค ํํฐํ๋ค ๋ฅผ ์ค์ ํฉ๋๋ค. ๊ณํ ์บ์ ์ฟผ๋ฆฌ ํํ ์ ๋ํ ์ธ๋ฑ์ค ํํฐํ๋ค ๊ฐ ์ด๋ฏธ ์๋ ๊ฒฝ์ฐ ์ด ๋ช ๋ น์ ์ด์ ์ธ๋ฑ์ค ํํฐํ๋ค ๋ฅผ ์ฌ์ ์ํฉ๋๋ค.
์ฟผ๋ฆฌ ์ค์
๋ฒ์ 8.0์ ์ถ๊ฐ ๋์์ต๋๋ค.
MongoDB 8.0 ๋ถํฐ๋ ์ธ๋ฑ์ค ํํฐ ๋ฅผ ์ถ๊ฐํ๋ ๋์ ์ฟผ๋ฆฌ ์ค์ ์ ์ฌ์ฉํฉ๋๋ค. ์ธ๋ฑ์ค ํํฐ๋ MongoDB 8.0 ๋ถํฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
์ฟผ๋ฆฌ ์ค์ ์๋ ์ธ๋ฑ์ค ํํฐ๋ณด๋ค ๋ ๋ง์ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ๋ํ ์ธ๋ฑ์ค ํํฐ๋ ์๊ตฌ์ ์ด์ง ์์ผ๋ฉฐ ๋ชจ๋ ํด๋ฌ์คํฐ ๋
ธ๋์ ๋ํ ์ธ๋ฑ์ค ํํฐ๋ฅผ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ์ฟผ๋ฆฌ ์ค์ ์ ์ถ๊ฐํ๊ณ ์์ ๋ฅผ ํ์ํ๋ ค๋ฉด setQuerySettings
๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฟผ๋ฆฌ ์ตํฐ๋ง์ด์ ์ฟผ๋ฆฌ ๊ณํ ์ค์ ์ฟผ๋ฆฌ ์ค์ ์ ์ถ๊ฐ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ๋ฉฐ, ์ด๋ ์ฟผ๋ฆฌ ๋ฅผ ์คํ ํ๊ธฐ ์ํด ์ ํํ ๊ณํ์ ์ํฅ์ ์ค๋๋ค.
์ค์ ์ ์ ์ฒด ํด๋ฌ์คํฐ ์ ์ฟผ๋ฆฌ ํํ ์ ์ ์ฉ ๋ฉ๋๋ค. ํด๋ฌ์คํฐ ๋ ์ข ๋ฃ ํ์๋ ์ค์ ์ ์ ์งํฉ๋๋ค.
find
, distinct
๋ฐ aggregate
๋ช
๋ น์ ๋ํ ์ฟผ๋ฆฌ ์ค์ ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ฟผ๋ฆฌ ์ค์ ์ ์ ๊ฑฐ ํ๋ ค๋ฉด removeQuerySettings
๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฟผ๋ฆฌ ์ค์ ์ ๊ฐ์ ธ์ค๋ ค๋ฉด ์ง๊ณ ํ์ดํ๋ผ์ธ ์์ $querySettings
๋จ๊ณ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ํธํ์ฑ
์ด ๋ช ๋ น์ ๋ค์ ํ๊ฒฝ์์ ํธ์คํ ๋๋ ๋ฐฐํฌ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
MongoDB Atlas: ํด๋ผ์ฐ๋์์์ MongoDB ๋ฐฐํฌ๋ฅผ ์ํ ์์ ๊ด๋ฆฌํ ์๋น์ค
์ค์
์ด ๋ช ๋ น์ M0, M2 ๋ฐ M5 ํด๋ฌ์คํฐ์์ ์ง์๋์ง ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์ง์๋์ง ์๋ ๋ช ๋ น์ ์ฐธ์กฐํ์ธ์.
MongoDB Enterprise: MongoDB์ ๊ตฌ๋ ๊ธฐ๋ฐ ์์ฒด ๊ด๋ฆฌ ๋ฒ์
MongoDB Community: MongoDB์ ์์ค ์ฌ์ฉ ๊ฐ๋ฅ ๋ฌด๋ฃ ์์ฒด ๊ด๋ฆฌ ๋ฒ์
๊ตฌ๋ฌธ
๋ช ๋ น์ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ๋ฌธ์ ๊ฐ์ง๋๋ค:
db.runCommand( { planCacheSetFilter: <collection>, query: <query>, sort: <sort>, projection: <projection>, collation: { <collation> }, indexes: [ <index1>, <index2>, ...], comment: <any> } )
์ธ๋ฑ์ค ํํฐํ๋ค ์ ๋ํ ๊ณํ ์บ์ ์ฟผ๋ฆฌ ํํ ๋ ๋ค์๊ณผ ๊ฐ์ ์กฐํฉ์ ๋๋ค.
query
sort
projection
collation
๋ช ๋ น ํ๋
๋ช ๋ น์๋ ๋ค์๊ณผ ๊ฐ์ ํ๋๊ฐ ์์ต๋๋ค.
ํ๋ | ์ ํ | ์ค๋ช
| ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| ๋ฌธ์์ด | ์ธ๋ฑ์ค ํํฐ์ ๋ํ collection์ ์ด๋ฆ์ ๋๋ค. | ||||||||||
| ๋ฌธ์ | ์ธ๋ฑ์ค ํํฐ์ ๋ํ ์ฟผ๋ฆฌ ์กฐ๊ฑด์์ ๋๋ค. ํ๋ ์ด๋ฆ์ ํฌํจํ ์กฐ๊ฑด์ ๊ตฌ์กฐ๋ง ์ธ๋ฑ์ค ํํฐ์ ์ฌ์ฉ๋ฉ๋๋ค. ์ฟผ๋ฆฌ ์กฐ๊ฑด์์ ํ๋ ๊ฐ์ด ์ฌ์ฉ๋์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์ธ๋ฑ์ค ํํฐ์ ์ฟผ๋ฆฌ ์กฐ๊ฑด์๋ ํ๋ ๊ฐ๋ง ๋ค๋ฅธ ์ ์ฌํ ์ฟผ๋ฆฌ์์ ์ฌ์ฉ๋ฉ๋๋ค. | ||||||||||
| ๋ฌธ์ | ์ ํ ์ฌํญ. ์ธ๋ฑ์ค ํํฐ์ ์ ๋ ฌ์ ๋๋ค. | ||||||||||
| ๋ฌธ์ | ์ ํ ์ฌํญ. ์ธ๋ฑ์ค ํํฐ์ ํ๋ก์ ์ ์ ๋๋ค. | ||||||||||
| ๋ฌธ์ | ์์ ์ ์ฌ์ฉํ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํฉ๋๋ค. ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ๋ฉด ๋์๋ฌธ์ ๋ฐ ์ ์ผํธ ํ์ ๊ท์น๊ณผ ๊ฐ์ ๋ฌธ์์ด ๋น๊ต์ ๋ํ ์ธ์ด๋ณ ๊ท์น์ ์ง์ ํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ์ ๋ ฌ ์ต์ ์ ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ ๋ ๋ฐ์ดํฐ ์ ๋ ฌ์ด ์ง์ ๋์ง ์์์ง๋ง ์ปฌ๋ ์
์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ๋ ฌ์ด ์๋ ๊ฒฝ์ฐ( ์ปฌ๋ ์ ๋๋ ์ฐ์ฐ์ ๋ํ ๋ฐ์ดํฐ ์ ๋ ฌ์ด ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ, MongoDB๋ ์ด์ ๋ฒ์ ์์ ๋ฌธ์์ด ๋น๊ต์ ์ฌ์ฉ๋ ๊ฐ๋จํ ์ด์ง ๋น๊ต๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํ ์ฐ์ฐ์ ๋ํด ์ฌ๋ฌ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํ๋๋ณ๋ก ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ง์ ํ ์ ์์ผ๋ฉฐ ์ ๋ ฌ๊ณผ ํจ๊ป ์ฐพ๊ธฐ๋ฅผ ์ํํ๋ ๊ฒฝ์ฐ ์ฐพ๊ธฐ ์ ์ ๋ ฌ์์ ๊ฐ๊ฐ ๋ค๋ฅธ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ฌ์ฉํ๋ ๊ฒ์ ํ์ฉ๋์ง ์์ต๋๋ค. MongoDB 6.0๋ถํฐ ์ธ๋ฑ์ค ํํฐ๋ ์ด์ ์ ๋ช
๋ น์ MongoDB 8.0 ๋ถํฐ๋ ์ธ๋ฑ์ค ํํฐ ๋ฅผ ์ถ๊ฐํ๋ ๋์ ์ฟผ๋ฆฌ ์ค์ ์ ์ฌ์ฉํฉ๋๋ค. ์ธ๋ฑ์ค ํํฐ๋ MongoDB 8.0 ๋ถํฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ์ฟผ๋ฆฌ ์ค์ ์๋ ์ธ๋ฑ์ค ํํฐ๋ณด๋ค ๋ ๋ง์ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ๋ํ ์ธ๋ฑ์ค ํํฐ๋ ์๊ตฌ์ ์ด์ง ์์ผ๋ฉฐ ๋ชจ๋ ํด๋ฌ์คํฐ ๋
ธ๋์ ๋ํ ์ธ๋ฑ์ค ํํฐ๋ฅผ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ์ฟผ๋ฆฌ ์ค์ ์ ์ถ๊ฐํ๊ณ ์์ ๋ฅผ ํ์ํ๋ ค๋ฉด | ||||||||||
| ๋ฐฐ์ด | ์ง์ ๋ ๊ณํ ์บ์ ์ฟผ๋ฆฌ ํํ ์ ๋ํ ์ธ๋ฑ์ค ํํฐ์ ๋ฐฐ์ด ์ ๋๋ค. ์ธ๋ฑ์ค ํํฐ๋ฅผ ๋ค์ ๋ฐฐ์ด ์ค ํ๋๋ก ์ง์ ํฉ๋๋ค:
์ฟผ๋ฆฌ ์ตํฐ๋ง์ด์ ๋ ์ฟผ๋ฆฌ ๊ณํ์ ์ํด collection ์ค์บ ๋๋ ์ธ๋ฑ์ค ๋ฐฐ์ด์ ์ฌ์ฉํฉ๋๋ค. ์ง์ ๋ ์ธ๋ฑ์ค๊ฐ ์กด์ฌํ์ง ์๊ฑฐ๋ ์จ๊ฒจ์ง ๊ฒฝ์ฐ ์ตํฐ๋ง์ด์ ๋ ์ปฌ๋ ์ ์ค์บ์ ์ฌ์ฉํฉ๋๋ค. ๋์ผํ ํค ํจํด์ ๊ฐ์ง ์ฌ๋ฌ ์ธ๋ฑ์ค์ ๊ฒฝ์ฐ ์ธ๋ฑ์ค๋ฅผ ์ด๋ฆ ๋ฐฐ์ด๋ก ์ง์ ํด์ผ ํฉ๋๋ค. | ||||||||||
| any | ์ ํ ์ฌํญ. ์ด ๋ช ๋ น์ ์ฒจ๋ถํ ์ฌ์ฉ์ ์ ๊ณต ์ฝ๋ฉํธ์ ๋๋ค. ์ค์ ๋๋ฉด ์ด ์ค๋ช ์ ๋ค์ ์์น์์ ์ด ๋ช ๋ น์ ๋ ์ฝ๋์ ํจ๊ป ํ์๋ฉ๋๋ค.
๋๊ธ์ ์ ํจํ ๋ชจ๋ BSON types (๋ฌธ์์ด, ์ ์, ๊ฐ์ฒด, ๋ฐฐ์ด ๋ฑ)์ด ๋ ์ ์์ต๋๋ค. |
์ธ๋ฑ์ค ํํฐ๋ ์๋ฒ ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ ๋์์๋ง ์กด์ฌํ๋ฉฐ ์ข
๋ฃ ํ์๋ ์ ์ง๋์ง ์์ต๋๋ค. ์ธ๋ฑ์ค ํํฐ๋ฅผ ์ง์ฐ๋ ค๋ฉด planCacheClearFilters
๋ช
๋ น์ ์ฌ์ฉํฉ๋๋ค.
ํ์ํ ์ก์ธ์ค ๊ถํ
์ฌ์ฉ์๋ planCacheIndexFilter
์กฐ์น๋ฅผ ํฌํจํ๋ ์ก์ธ์ค ๊ถํ์ด ์์ด์ผ ํฉ๋๋ค.
์์
์กฐ๊ฑด์๋ก๋ง ๊ตฌ์ฑ๋ ๊ณํ ์บ์ ์ฟผ๋ฆฌ ํํ์ ํํฐ ์ค์
๋ค์ ์์์๋ orders
collection์ ๋ํ ์ธ๋ฑ์ค ํํฐ๋ฅผ ๋ง๋ค์ด ํ๋ก์ ์
๋ฐ ์ ๋ ฌ ์์ด status
ํ๋์ ๋๋ฑ์ฑ ๋งค์น๋ก๋ง ๊ตฌ์ฑ๋ ์ฟผ๋ฆฌ์ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ ์ตํฐ๋ง์ด์ ๋ ์ง์ ๋ ๋ ์ธ๋ฑ์ค๋ง ํ๊ฐํ๊ณ ์ปฌ๋ ์
์ค์บ์ ๋ค์์ ๋ํด ์ฑ๊ณต์ ์ธ ๊ณํ:
db.runCommand( { planCacheSetFilter: "orders", query: { status: "A" }, indexes: [ { cust_id: 1, status: 1 }, { status: 1, order_date: -1 } ] } )
์ฟผ๋ฆฌ ์กฐ๊ฑด์์์๋ ํ๋ ์ด๋ฆ์ ํฌํจํ ์กฐ๊ฑด์์ ๊ตฌ์กฐ๋ง ์ค์ํฉ๋๋ค. ๊ฐ์ ์ค์ํ์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์์ฑ๋ ํํฐ๋ ๋ค์ ์์ ์ ์ ์ฉ๋ฉ๋๋ค.
db.orders.find( { status: "D" } ) db.orders.find( { status: "P" } )
MongoDB ๊ฐ ๊ณํ ์บ์ ์ฟผ๋ฆฌ ํํ ์ ์ธ๋ฑ์ค ํํฐํ๋ค ๋ฅผ ์ ์ฉ ํ ์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ค๋ฉด db.collection.explain()
๋๋ cursor.explain()
๋ฉ์๋์indexFilterSet
ํ๋ ๋ฅผ ํ์ธํฉ๋๋ค.
์ ์ด, ํ๋ก์ ์ ๋ฐ ์ ๋ ฌ๋ก ๊ตฌ์ฑ๋ ๊ณํ ์บ์ ์ฟผ๋ฆฌ ํํ์ ํํฐ ์ค์
๋ค์ ์์ ์์๋ orders
collection์ ๋ํ ์ธ๋ฑ์ค ํํฐ๋ฅผ ๋ง๋ญ๋๋ค. ์ด ํํฐ๋ ์กฐ๊ฑด์๊ฐ item
ํ๋์ ๋๋ฑ์ฑ ๋งค์น์ธ ์ฟผ๋ฆฌ์ ์ ์ฉ๋๋ฉฐ, ์ฌ๊ธฐ์ quantity
ํ๋๋ง ํ๋ก์ ์
๋๊ณ order_date
๊ธฐ์ค ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ด ์ง์ ๋ฉ๋๋ค.
db.runCommand( { planCacheSetFilter: "orders", query: { item: "ABC" }, projection: { quantity: 1, _id: 0 }, sort: { order_date: 1 }, indexes: [ { item: 1, order_date: 1 , quantity: 1 } ] } )
๊ณํ ์บ์ ์ฟผ๋ฆฌ ํํ ์ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ ์ตํฐ๋ง์ด์ { item: 1, order_date: 1, quantity: 1 }
์ธ๋ฑ์ค ๋ฅผ ์ฌ์ฉํ๋ ์ธ๋ฑ์ฑ๋ ๊ณํ๋ง ๊ณ ๋ คํฉ๋๋ค.
์กฐ๊ฑด์์ ๋ฐ์ดํฐ ์ ๋ ฌ๋ก ๊ตฌ์ฑ๋ ๊ณํ ์บ์ ์ฟผ๋ฆฌ ํํ์ ํํฐ ์ค์
๋ค์ ์์ ์์๋ orders
collection์ ๋ํ ์ธ๋ฑ์ค ํํฐ๋ฅผ ๋ง๋ญ๋๋ค. ์ด ํํฐ๋ ์กฐ๊ฑด์๊ฐ item
ํ๋ ๋ฐ ๋ฐ์ดํฐ ์ ๋ ฌ en_US
(์์ด ๋ฏธ๊ตญ)์์ ๋๋ฑ์ฑ ๋งค์น์ธ ์ฟผ๋ฆฌ์ ์ ์ฉ๋ฉ๋๋ค.
db.runCommand( { planCacheSetFilter: "orders", query: { item: "Movie" }, collation: { locale: "en_US" }, indexes: [ { item: 1, order_date: 1 , quantity: 1 } ] } )
๊ณํ ์บ์ ์ฟผ๋ฆฌ ํํ ์ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ ์ตํฐ๋ง์ด์ ์ธ๋ฑ์ค { item: 1, order_date: 1, quantity: 1 }
๋ฅผ ์ฌ์ฉํ๋ ์ธ๋ฑ์ฑ๋ ๊ณํ๋ง ์ฌ์ฉํฉ๋๋ค.
MongoDB ๋ถํฐ 6.0 ์ธ๋ฑ์ค ํํฐ๋ ๋ช
๋ น์ planCacheSetFilter
์ฌ์ฉํ์ฌ ์ด์ ์ ์ค์ ํ ๋ฐ์ดํฐ ์ ๋ ฌ ์ ์ฌ์ฉํฉ๋๋ค.
MongoDB 8.0 ๋ถํฐ๋ ์ธ๋ฑ์ค ํํฐ ๋ฅผ ์ถ๊ฐํ๋ ๋์ ์ฟผ๋ฆฌ ์ค์ ์ ์ฌ์ฉํฉ๋๋ค. ์ธ๋ฑ์ค ํํฐ๋ MongoDB 8.0 ๋ถํฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค.
์ฟผ๋ฆฌ ์ค์ ์๋ ์ธ๋ฑ์ค ํํฐ๋ณด๋ค ๋ ๋ง์ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ๋ํ ์ธ๋ฑ์ค ํํฐ๋ ์๊ตฌ์ ์ด์ง ์์ผ๋ฉฐ ๋ชจ๋ ํด๋ฌ์คํฐ ๋
ธ๋์ ๋ํ ์ธ๋ฑ์ค ํํฐ๋ฅผ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ์ฟผ๋ฆฌ ์ค์ ์ ์ถ๊ฐํ๊ณ ์์ ๋ฅผ ํ์ํ๋ ค๋ฉด setQuerySettings
๋ฅผ ์ฐธ์กฐํ์ธ์.