DB๋ฅผ ์ค๊ณํ๊ณ ๋ถํ์ ๋ํด ๊ณ ๋ฏผํ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
In-world | Voxels
Visit this Voxels Parcel!
www.voxels.com
์ ๋งํฌ๋ ์จ๋ผ์ธ ๊ธฐ๋ฐ์ ๊ฑด์ถ ๊ฒ์ ์ฌ์ดํธ์ ๋งํฌ ์ ๋๋ค.
๋ง์ธํฌ๋ํํธ ๊ฐ์ ํํ๋ก ๋ธ๋ก๋ค์ ๋ฐฐ์นํ๊ณ ๋์์ธ ํ๋ ๊ฒ์์ ๋๋ค.
์ ๊ฒ์์ ๋๋ฌ๋ณด๋ ์ค ๊ถ๊ธํ ์ ์ด ์๊ฒผ์ต๋๋ค.
๊ฒ์๋ด ์๋์๋ ์๋ง์ ๋ธ๋ก๋ค์ด ์์ ํ
๋ฐ ์ด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด๋ป๊ฒ ์ ์ฅํ๊ณ ์์๊น ํ๋ ๊ถ๊ธ์ฆ ์ด์์ต๋๋ค.
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
๋ธ๋กํ๋๋ฅผ ํ๋์ ROW๋ก ์ฒ๋ฆฌ
์ฐ์ ํํ๋ค ์ฌ์ฉํ๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ์์ ์๊ฐ ํด๋ดค์ต๋๋ค.
์์ฑํ ๋ธ๋ก ํ๋๋น ํ๋์ Row๋ฅผ ๊ฐ์ง๊ณ , ํด๋น ๋ธ๋ก์ xyz ์์น๋ฅผ ๊ธฐ๋กํ๋ ํํ์ ๋๋ค.
| ๋ธ๋กA | 6 | -5 | -1 |
๊ฐ์ ํํ์
๋๋ค.
๊ฐ์ฅ ๊ฐ๋จํ๊ณ ์ฝ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๊ณ ์ถํ ์กฐํํ ๋ ์ฟผ๋ฆฌ๊ฐ ๋ณต์กํด์ง ์ผ๋ ค๋ ์์ด๋ณด์
๋๋ค.
์ถ๊ฐ๋ก ๊ธฐ๋ณธ๋ธ๋ก ์ด๋ผ๋ ํ
์ด๋ธ์ ์์ฑํด์ ๊ธฐ๋ณธ ๊ฐ์ ์ ์ํ๊ณ ํด๋น ๋ธ๋ก์ id๋ง ์ฐธ์กฐํ๋ ์์ผ๋ก ์ฒ๋ฆฌํ์ฌ
์ค๋ณต ๋ฐ์ดํฐ๋ฅผ ๋ณ๋์ ํ ์ด๋ธ๋ก ๋ถ๋ฆฌํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฌธ์
์ ๋ฐฉ์์ ๋ณ ๊ณ ๋ฏผ ์์ด ์ฝ๊ฒ ์ฝ๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ ์ ์์ง๋ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋ธ๋ก ํ๋๋น Row๊ฐ ํ๋์ฉ ์๊ธด๋ค๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๊ฐ ๊ณผํ๊ฒ ๋ง์ด ์์ผ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ญ๋๋ค.
์๋ ์์์์๋ ๋๋ต 100๋ง ๋ธ๋ก์ ์ฌ์ฉํ๋ค๊ณ ํ๋๋ฐ
๊ทน๋จ์ ์ธ ์์ ์ผ ์ ์์ง๋ง ๊ฑด์ถ๋ฌผ ํ๋๋๋ฌธ์ row๊ฐ 100๋ง๊ฐ๊ฐ ์๊ธธ ์๋ ์๋ ์ํฉ์ ๋๋ค.
๋๋์ ๋ฐ์ดํฐ๊ฐ ๋ฌด์์๋ก ์์ฌ์๊ธฐ ๋๋ฌธ์ ์กฐํํ ๋๋ ๋ถํ๊ฐ ์๋นํ ๊ฒ ๊ฐ์ต๋๋ค.
user_id ํน์ block_id ๋ฑ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ๊ฑธ์ด ๋๋ฆ๋๋ก ์ฑ๋ฅ ์ด์๋ฅผ ํผํด๊ฐ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
https://www.youtube.com/watch?v=CrdjKuedDs0
๋ธ๋ก ์์ฑ์์๋ ๋ธ๋ก ๊ฐฏ์์ ํ ๋ฑ์ผ๋ก ์ด๋์ ๋ ์๋ฐฉ์ด ๊ฐ๋ฅํ๊ธด ํฉ๋๋ค.
ํ๋์ Object์๋ ๋ธ๋ก์ n๊ฐ ๊น์ง๋ง ์ฌ์ฉ ๊ฐ๋ฅ ํ๋ค๋ ์กฐ๊ฑด์ ๊ฑธ์ด๋๋ฉด ๋ฉ๋๋ค.
๊ฐฏ์์ ํ์ผ๋ก ์๋ฐฉ์ ํ๋ค๊ณ ํ๋ค, ๋ธ๋ก์ ์ญ์ ํ ๋๋ ์ด์ฉ ์ ์์ด ๋ ๋ฌธ์ ๊ฐ ์๊น๋๋ค.
๋ ผ๋ฆฌ์ ์ผ๋ก ์ญ์ ์ฒ๋ฆฌ ํ ์๋ ์์ง๋ง ์ด๋๋ ๊ฒฐ๊ตญ์ ๋ชจ๋ Row์ ๋ํด์ isDelete๋ฅผ Update ํด์ค์ผ ํ๋ ๊ฒ ์ ๋๋ค.
๋ฌผ๋ก Asset ์ด๋ผ๋ ํ ์ด๋ธ์ด ๋ธ๋ก๋ค์ ์งํฉ ์ญํ ์ ํ๊ณ Asset ํ ์ด๋ธ์์ isDelete true ์ฒ๋ฆฌ ํด๋ ํฐ ๋ฌธ์ ๋ ์์ต๋๋ค.
ํ์ง๋ง ์ฌ์ฉ๊ฐ๋ฅํ ๋ธ๋ก ๊ฐฏ์์ ๊ฐ์ ์ ๋ณด๋ฅผ ๋ฐํํด์ผ ํ๋ API๊ฐ ์๋ค๋ฉด,
Asset์ด ์ญ์ ๋์๋์ง ํ์ธํ๊ณ ์ญ์ ๋์๋ค๋ฉด ํด๋น ์์ ์์ ์ฌ์ฉํ ๋ธ๋ก์ ๊ฐฏ์๋งํผ ๋ํด์ค๋ค.
๋ผ๋ ๋ถํ์ํ ๋ก์ง์ด ์ถ๊ฐ๋์ด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค.
์ค์ ๋ชจ๋ ๋ธ๋ก์ด isDelete true๋ก Update๋์ด์์๋ค๋ฉด ๋จ์ํ isDelete true์ธ ๊ฐ์ ๋ณด์ ๋์์ ๋นผ์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๋ ์ผ์ ๋๋ค.
์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ ์๋ ์์ ๊ฒ ๊ฐ์ง๋ง, ๊ทผ๋ณธ์ ์ธ ํด๊ฒฐ์ ์๋ ๊ฒ ๊ฐ์ ์ฌ์ ํ ์ฐ์ฐํฉ๋๋ค.
๋ธ๋ก๋ค์ ์์น์ ์ ๋ณด๋ฅผ ํ๋์ ์ปฌ๋ผ์ผ๋ก ์ฒ๋ฆฌ
์ด์ ์ ํ๋์ Row๋ก ๋ธ๋กํ๋๋ฅผ ์ฒ๋ฆฌํ๋ค๋ฉด ์ด๋ฒ์ ํ๋์ Row๋ ํ๋์ ์์ฑ๋ Object๋ฅผ ์๋ฏธํ๋๋ก ์ค๊ณํ๋ ํํ์ ๋๋ค.
๋ธ๋ก 100๋ง๊ฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฑด์ถ๋ฌผ์ ํ๋ ๋ง๋ค์๋ค๋ฉด ์ด๋ user_object ๋ผ๋ ํ ์ด๋ธ์ Row๊ฐ ํ๋ ์๊ธฐ๋ ํํ์ ๋๋ค.
์ ์์์ position ์ด๋ผ๋ ์ปฌ๋ผ์ด ๋ธ๋ก๋ค์ ์์น์ ์ ๋ณด๋ฅผ ๋ด๋นํ๋ ์ปฌ๋ผ์ ๋๋ค.
๋ฏธ๋ฆฌ ์ ํด๋ ํํ์ ๋ฐ์ดํฐ๋ฅผ JSON์ผ๋ก ์ง๋ ฌํํ์ฌ String ํํ๋ก ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
์ ์ ๋ค์ด ์์ฑํ user_object ํ ์ด๋ธ์ ํ๋์ Row๊ฐ ์๊ธธ ๋ ๋ง๋ค ํ๋์ ๊ฑด์ถ๋ฌผ์ด ์๊ธฐ๋ ๊ฒ์ด๋ ์ง๊ด์ ์ด๊ธฐ๋ ํฉ๋๋ค.
๋ํ object ์ญ์ ์์๋ ํด๋น Rowํ๋๋ง ์ญ์ ์ฒ๋ฆฌ ํ๋ฉด ๋๋ ๊ฒ์ด๊ธฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฑธ๋ฆฌ๋ ๋ถํ๋ ํฌ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฌธ์
์ ๋ฐฉ๋ฒ๋ ๋ฌธ์ ๋ ์์์ต๋๋ค.
์ฐ์ ์ฌ๋ฌ๊ฐ์ง ๊ฐ๋ค์ JSON์ผ๋ก ํต์ผ๋ก ์ ์ฅํ๊ณ ์์ด์ Join์ด ์ด๋ ต์ต๋๋ค.
x,y,z ๊ฐ๋ค์ด์ผ Joinํ ์ผ์ด ๋ง์ด ์์ ๊ฒ ๊ฐ์์ ๋ฌธ์ ๊ฐ ์๋๊ฒ ์ง๋ง,color, type ๋ฑ ๋ธ๋ก๋ค์ ์ ๋ณด ๊ด๋ จ ๋ถ๋ถ์ ์กฐ์ธ์ด ํ์ํ ๊ฒ ๊ฐ์ต๋๋ค.
์ ์์์์๋ color๋ผ๋ ํ๋๋ฅผ ๋ฐ๋ก ๋์์ง๋ง ์ ๊ทํ๋ฅผ ์ํด "๊ธฐ๋ณธ๋ธ๋ก" ์ด๋ผ๋ ํ
์ด๋ธ์ ์์ฑํด๋์๋ค๋ฉด id๊ฐ๋ง ์ฐธ์กฐํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์์ ๊ฒ ์
๋๋ค.
์ด๋ ์ด๋ฏธ JSON์ผ๋ก ๋์ด์๋ position ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์์ ์ญ์ง๋ ฌํ ํ๊ณ ์ด ๊ฐ์ for๋ฌธ์ผ๋ก ๋๋ ค ๋ธ๋ก ์ ๋ณด๋ฅผ ๊ฐ ์ธ๋ฑ์ค์ ๊ฐ์ฒด๋ง๋ค ์ง์ด๋ฃ์ด์ค์ผํ๋ ๊ฐ๊ณต์์
์ด ํ์ํฉ๋๋ค.
๋ง์ฝ ๊ธฐ๋ณธ๋ธ๋ก ํ ์ด๋ธ์ด ๋ค๋ฅธ ํ ์ด๋ธ๊ณผ ๊ด๊ณ๊ฐ ๋งบ์ด์ ธ ์๋ค๋ฉด ์ ๋ฐฉ๋ฒ์ผ๋ก๋ ์ฒ๋ฆฌํ๊ธฐ๊ฐ ์ด๋ ค์ธ ์๋ ์์ต๋๋ค.
๋ํ ์์์๋ ๋งํ๋ ๋ด์ฉ์ด์ง๋ง ์ฌ์ฉ๊ฐ๋ฅํ ์๋ ์กฐํ ๊ฐ์ API๊ฐ ์๋ค๋ฉด JSON์ผ๋ก ๋์ด์๋ ๋ฐ์ดํฐ ํน์ฑ์ Sql๋ก ์ฒ๋ฆฌํ๊ธฐ๊ฐ ํ๋ค ๊ฒ ๊ฐ์ต๋๋ค.
๋ํ ์ง๋ ฌํ์ ์ญ์ง๋ ฌํ๋ ๋ฆฌ์์ค ์๋ชจ๊ฐ ํฐํธ์ด๋ผ๊ณ ์๊ณ ์์ต๋๋ค.
๋ฐ๋ณต ์์ฒญ์ ๋ํด์๋ ์บ์ฑ์ฒ๋ฆฌ ํด์ ์๋ชจ๋ฅผ ์กฐ๊ธ ์ค์ผ ์ ์๊ฒ ์ง๋ง ๊ทผ๋ณธ ์ ์ธ ํด๊ฒฐ์ฑ
์ ์๋ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ญ๋๋ค.
NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค
์ด ๊ฒฝ์ฐ์๋ RDBMS ๋ณด๋ค๋ ๋์ ์ํฉ์ ๋๋ค.
์ ํํ๋ ๊ตฌ์กฐ๊ฐ ์์ผ๋ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ๊ธธ์ด์ ํ ์์ด ๊ฐ์ ์ ์ฅํ ์ ์์ต๋๋ค.
์๋๋ NBT ( Named Binary Tag )๋ผ๋ ํํ์ ๋ฐ์ดํฐ์ด๊ณ , ๋ง์ธํฌ๋ํํธ ๋ด์ ๊ฐ์ข ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๋ฐ ์ฐ์ด๋ ํ์์ ๋๋ค.
{
"Chunk": {
"x": 0, "y": 0, "z": 1,
"Blocks": [
{
"Position": { "x": 0, "y": 0, "z": 1 },
"Type": "Stone",
"State": "Intact"
}
// ๊ธฐํ ๋ธ๋ก ์ ๋ณด
]
}
}
Chunk๋ผ๋ ๋ธ๋ก๋ค์ ์งํฉ์ ๋ธ๋ก๋ค์ ๋ฐฐ์นํ๋ ํํ์
๋๋ค. Blocks๋ผ๋ ๋ฐฐ์ด์ ๋ชจ๋ ๋ธ๋ก๋ค์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ ์ ์ฅํฉ๋๋ค.
ํ๋์ Object๊ฐ ๋ง๋ค์ด์ง๋ฉด ํ๋์ ๋ํ๋จผํธ( RDBMS ๋ ์ฝ๋ )๊ฐ ์๊น๋๋ค.
JSON ํํ์ด๋ฉฐ ๋ฐฐ์ด ๋ฑ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ ์์ ๋ก์ด ๋ฉด์์ ๋ณด๋ฉด ํ์ฌ ๊ฐ์ฅ ์ข์ ๋ฐฉ์์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๋ค๋ง ๋ฐ์ดํฐ๋ฅผ ์ ๊ทํ ํ์ง ๋ชปํด์ ์ค๋ณต๋ฐ์ดํฐ๊ฐ ์
๋ ฅ๋ ์ ์์ต๋๋ค.
๊ทธ๋์ RDBMS์ NoSQL์ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ์ด๋จ๊น ๋ผ๋ ์๊ฐ์ ํด๋ณด์์ต๋๋ค.
NoSQL์๋ Blocks ์ ๊ฐ์ ๋น์ ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ user_uuid, block_uuid ์ ๊ฐ์ด ์ฐธ์กฐ๋ฐ์ดํฐ๋ฅผ uuid ํํ๋ก ์ ์ฅํด๋๋ฉด ๋๊ฐ์ง ํํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด์ ์ ๋ชจ๋ ์ฑ๊ธธ ์ ์์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์
๋๋ค.
๋ค๋ง, RDBMS๋ฅผ ์ฐธ์กฐํ๊ณ ์๋ ๋ฐ์ดํฐ์ ์ข ๋ฅ๊ฐ ๋ค์ํด์ง๋ฉด DB์ ์ฟผ๋ฆฌ๋ฅผ ๊ทธ๋งํผ ์ฌ๋ฌ๋ฒ ๋ ๋ ค์ผ ํ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ญ๋๋ค.
ํด๊ฒฐ๋ฐฉ์
1. ์บ์ฑ
๊ธฐ๋ณธ ๋ธ๋ญ ๊ฐ์ ๊ฒฝ์ฐ๋ ์กฐํ๊ฐ ์๋นํ ์ฆ๊ณ ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ด ํ์ ํ ๋ฎ๊ธฐ ๋๋ฌธ์ ์บ์ฑ ์ฒ๋ฆฌํ๋ฉด ๋ฆฌ์์ค๋ฅผ ๋ง์ด ์ ์ฝ ํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
2. Sql IN์
SELECT * FROM table WHERE block_id IN (1, 2, ..., N);
IN ์ ์ Row์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ํ์ธํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ด์๊ฐ ๋ฐ์ ํ ์ ์์ต๋๋ค.
JOIN๋ฌธ์ด ๋ง์ด ์๋ ๊ฒฝ์ฐ ์ ํ ํ ์ด๋ธ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋์ ๊ณ ๋ คํด์ผํฉ๋๋ค.
์ฌ์ค ๋๋ถ๋ถ์ ํ ์ดํ๋ก์ ํธ ์์ค์์๋ ๋ณ ๋ฌธ์ ๊ฐ ์๊ธฐ์ง ์์ต๋๋ค.
์ธ์งํ๊ณ ์๋ค๊ฐ ์ค์ ๊ท๋ชจ๊ฐ ์ปค์ ธ ์ฑ๋ฅ์ด์๊ฐ ์กฐ๊ธ์ฉ ์๊ธฐ๋ฉด ์ต์ ํ ํ๋ฉด ๋๋ ์ผ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ง์น๋ฉฐ
์ด๋ฐ์ ๋ฐ ์ํฉ์ ๋ฏธ๋ฆฌ ๋์ํด๋๋ ๊ฒ๋ ์ข์ง๋ง ๋๋ฌด ๋ง์ ๊ฒ์ ์๊ฐํ๋ค๋ณด๋ฉด
์์นซ ์ค๋ฒ์์ง๋์ด๋ง์ด ๋ ์๋ ์์ต๋๋ค.
ํ๋ก์ ํธ๋ฅผ ์ธํ ํ๊ฑฐ๋, ๊ธฐํ ํ๋ค๋ณด๋ฉด ์ด๊ฒ๋ ํ์ํ ๊ฒ ๊ฐ๊ณ ์ ๊ฒ๋ ํ์ํ ๊ฒ ๊ฐ์๋ฐ?
๋ผ๋ ์๊ฐ์ด ๋ค๊ธฐ ๋ง๋ จ์ ๋๋ค.
์ด๋ฐ ์๊ฐ์ด ๋ค๋๋ฉด ๋ณธ์ธ์๊ฒ ๋ค์ํ๋ฒ ๋ฌผ์ด๋ณด์ธ์.
๊ทธ๊ฒ ์ง๊ธ ์ง์ง๋ก ํ์ํด?