Apache Software Foundation์ noSQL ์์คํ ํด๋์ค์ ์ํ๋ฉฐ ์ฐ๊ด ๋ฐฐ์ด(ํด์) ํ์์ผ๋ก ์ ์ฅ๋ ์์ฒญ๋ ์์ ๋ฐ์ดํฐ๋ฅผ ํ์ฅ์ฑ์ด ๋ฐ์ด๋๊ณ ์์ ์ ์ผ๋ก ์ ์ฅํ๋๋ก ์ค๊ณ๋ ๋ถ์ฐํ DBMS Apache Cassandra 4.0์ ์ถ์๋ฅผ ๋ฐํํ์ต๋๋ค. Cassandra 4.0 ๋ฆด๋ฆฌ์ค๋ ํ๋ก๋์ ๊ตฌํ ์ค๋น๊ฐ ์๋ฃ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋๋ฉฐ ์ด๋ฏธ 1000๊ฐ ์ด์์ ๋ ธ๋๋ก ๊ตฌ์ฑ๋ ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ถ Amazon, Apple, DataStax, Instaclustr, iland ๋ฐ Netflix์ ์ธํ๋ผ์์ ํ ์คํธ๋์์ต๋๋ค. ํ๋ก์ ํธ ์ฝ๋๋ Java๋ก ์์ฑ๋์์ผ๋ฉฐ Apache 2.0 ๋ผ์ด์ผ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค.
Cassandra DBMS๋ ์๋ Facebook์์ ๊ฐ๋ฐ๋์์ผ๋ฉฐ 2009๋ ์ Apache Foundation์ ํ์์ผ๋ก ์ด์ ๋์์ต๋๋ค. Cassandra ๊ธฐ๋ฐ ์ฐ์ ์ฉ ์๋ฃจ์ ์ Apple, Adobe, CERN, Cisco, IBM, HP, Comcast, Disney, eBay, Huawei, Netflix, Sony, Rackspace, Reddit ๋ฐ Twitter์ ๊ฐ์ ํ์ฌ์ ์ ๋ ฅ ์๋น์ค์ ๋ฐฐํฌ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Apple์ด ๋ฐฐํฌํ Apache Cassandra ๊ธฐ๋ฐ ์คํ ๋ฆฌ์ง ์ธํ๋ผ์๋ 160๋ง ๊ฐ์ ๋ ธ๋๋ฅผ ํฌํจํ์ฌ 100ํํ๋ฐ์ดํธ ์ด์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ 300๊ฐ๊ฐ ๋๋ ํด๋ฌ์คํฐ๊ฐ ์์ต๋๋ค. Huawei๋ 30๊ฐ์ ๋ ธ๋๋ฅผ ํฌํจํ์ฌ 100๊ฐ ์ด์์ Apache Cassandra ํด๋ฌ์คํฐ๋ฅผ ์ฌ์ฉํ๊ณ , Netflix๋ 10๊ฐ ์ด์์ ํด๋ฌ์คํฐ๋ฅผ ์ฌ์ฉํ์ฌ XNUMX๊ฐ์ ๋ ธ๋๋ฅผ ์ฒ๋ฆฌํ๊ณ ํ๋ฃจ์ XNUMX์กฐ ๊ฐ๊ฐ ๋๋ ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค.
Cassandra DBMS๋ ์์ ํ ๋ถ์ฐ๋ Dynamo ํด์ ์์คํ ์ ๊ฒฐํฉํ์ฌ ๋ฐ์ดํฐ ์์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ๊ฑฐ์ ์ ํ์ ์ธ ํ์ฅ์ฑ์ ์ ๊ณตํฉ๋๋ค. Cassandra๋ ์ฌ๋ฌ ์์ค์ ์ค์ฒฉ์ผ๋ก ํด์ ์ ์ฅ์๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค๋ ์ ์์ ํค/๊ฐ ์ฒด์ธ์๋ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ memcachedb์ ๊ฐ์ ์์คํ ๊ณผ ๋ค๋ฅธ ์ด ํจ๋ฐ๋ฆฌ(ColumnFamily) ๊ธฐ๋ฐ ๋ฐ์ดํฐ ์ ์ฅ์ ๋ชจ๋ธ์ ์ฌ์ฉํฉ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ ์์ฉ์ ๋จ์ํํ๊ธฐ ์ํด SQL์ ์ฐ์์ํค์ง๋ง ๊ธฐ๋ฅ์ด ์ถ์๋ ๊ตฌ์กฐ์ ์ฟผ๋ฆฌ ์ธ์ด CQL(Cassandra Query Language)์ด ์ง์๋ฉ๋๋ค. ๊ธฐ๋ฅ์๋ ๋ค์์คํ์ด์ค ๋ฐ ์ด ํจ๋ฐ๋ฆฌ์ ๋ํ ์ง์๊ณผ "CREATE INDEX" ํํ์์ ์ฌ์ฉํ ์ธ๋ฑ์ค ์์ฑ์ด ํฌํจ๋ฉ๋๋ค.
DBMS๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๋ฅ ๋ฐฉ์ง ์ ์ฅ์๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๋ฐ์ดํฐ๋ ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ ์ผํฐ์ ๊ฑธ์ณ ์์ ์ ์๋ ๋ถ์ฐ ๋คํธ์ํฌ์ ์ฌ๋ฌ ๋ ธ๋์ ์๋์ผ๋ก ๋ณต์ ๋ฉ๋๋ค. ๋ ธ๋์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ํด๋น ๊ธฐ๋ฅ์ ๋ค๋ฅธ ๋ ธ๋์ ์ํด ์ฆ๊ฐ์ ์ผ๋ก ์ ํ๋ฉ๋๋ค. ํด๋ฌ์คํฐ์ ์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๊ณ Cassandra ๋ฒ์ ์ ์ ๋ฐ์ดํธํ๋ ์์ ์ ์ถ๊ฐ์ ์ธ ์๋ ๊ฐ์ ์ด๋ ๋ค๋ฅธ ๋ ธ๋ ์ฌ๊ตฌ์ฑ ์์ด ์ฆ์ ์ํ๋ฉ๋๋ค. CQL์ ์ง์ํ๋ ๋๋ผ์ด๋ฒ๋ Python, Java(JDBC/DBAPI2), Ruby, PHP, C++ ๋ฐ JavaScript(Node.js)์ฉ์ผ๋ก ์ค๋น๋์ด ์์ต๋๋ค.
์ฃผ์ ํ์ :
- ์ฑ๋ฅ๊ณผ ํ์ฅ์ฑ์ด ํฅ์๋์์ต๋๋ค. ๋ ธ๋ ๊ฐ SSTable(Sorted Strings Table) ํ์์ ๋ฐ์ดํฐ ๊ตํ ํจ์จ์ฑ์ด ํฅ์๋์์ต๋๋ค. ๋ ธ๋ ๊ฐ ๋ฉ์์ง ํ๋กํ ์ฝ์ด ์ต์ ํ๋์์ต๋๋ค. ๋ ธ๋ ๊ฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ ์ ์ก ์๋๊ฐ ์ต๋ 5๋ฐฐ ์ฆ๊ฐํ์ผ๋ฉฐ(์ฃผ๋ก Zero Copy ๊ธฐ์ ์ฌ์ฉ ๋ฐ ์ ์ฒด SSTable ์ ์ก์ผ๋ก ์ธํด) ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ ์์ ์ฒ๋ฆฌ๋์ด 25%๋ก ์ฆ๊ฐํ์ต๋๋ค. ์ฆ๋ถ ๋ณต๊ตฌ ํ๋ก์ธ์ค๊ฐ ์ต์ ํ๋์์ต๋๋ค. ๊ฐ๋น์ง ์์ง ์ผ์ ์ค์ง๋ก ์ธํ ์ง์ฐ ์๊ฐ์ด ๋ช ๋ฐ๋ฆฌ์ด๋ก ๋จ์ถ๋ฉ๋๋ค.
- ์ฌ์ฉ์ ์ธ์ฆ ์์ ๊ณผ ์คํ๋ ๋ชจ๋ CQL ์ฟผ๋ฆฌ๋ฅผ ์ถ์ ํ ์ ์๋ ๊ฐ์ฌ ๋ก๊ทธ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์ ์ฒด ๋ฐ์ด๋๋ฆฌ ์์ฒญ ๋ก๊ทธ๋ฅผ ์ ์ง ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์ด ๋ชจ๋ ์์ฒญ ๋ฐ ์๋ต ํธ๋ํฝ์ ์ ์ฅํ ์ ์์ต๋๋ค. ๊ด๋ฆฌ๋ฅผ ์ํด โnodetool ํ์ฑํfullquerylog|disablefullquerylog|resetfullquerylogโ ๋ช ๋ น์ ์ ์ํ๊ณ , ๋ก๊ทธ ๋ถ์์ ์ํด fqltool ์ ํธ๋ฆฌํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ก๊ทธ๋ฅผ ์ฝ์ ์ ์๋ ํ์์ผ๋ก ๋ณํ(Dump)ํ๊ณ , ํ๋ ์ฌ๋ผ์ด์ค๋ฅผ ๋น๊ต(Compare)ํ๊ณ , ์ค์ ๋ถํ์ ๋ด์ฌ๋ ์กฐ๊ฑด์ ์ฌํํ๋ ๋ถ์์ ์ํด ์ฌ์คํ(Replay)ํ๋ ๋ช ๋ น์ด ์ ๊ณต๋ฉ๋๋ค.
- SSTable์ ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ์๋ API๋ฅผ ํตํด ์ถ๋ ฅ๋๋ ์ ๋ณด(์ฑ๋ฅ ์งํ, ์ค์ ์ ๋ณด, ์บ์ ์ฝํ ์ธ , ์ฐ๊ฒฐ๋ ํด๋ผ์ด์ธํธ์ ๋ํ ์ ๋ณด ๋ฑ)๋ฅผ ๋ฐ์ํ๋ ๊ฐ์ ํ ์ด๋ธ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์์ถ๋ ๋ฐ์ดํฐ ์ ์ฅ์ ํจ์จ์ฑ์ด ํฅ์๋์ด ๋์คํฌ ๊ณต๊ฐ ์๋น๊ฐ ์ค์ด๋ค๊ณ ์ฝ๊ธฐ ์ฑ๋ฅ์ด ํฅ์๋์์ต๋๋ค.
- ์์คํ ํค์คํ์ด์ค(system.*)์ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ ์ด์ ๋ชจ๋ ๋ฐ์ดํฐ ๋๋ ํฐ๋ฆฌ์ ๋ถ์ฐ๋๋ ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฒซ ๋ฒ์งธ ๋๋ ํฐ๋ฆฌ์ ๋ฐฐ์น๋๋ฏ๋ก ์ถ๊ฐ ๋์คํฌ ์ค ํ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํด๋ ๋ ธ๋๊ฐ ๊ณ์ ์๋ํ ์ ์์ต๋๋ค.
- ์์ ๋ณต์ ๋ฐ ์ ๋ ดํ ์ฟผ๋ผ์ ๋ํ ์คํ์ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. ์์ ๋ณต์ ๋ณธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง ์์ผ๋ฉฐ ์ ์ฒด ๋ณต์ ๋ณธ๊ณผ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด ์ฆ๋ถ ๋ณต์์ ์ฌ์ฉํฉ๋๋ค. ๋ผ์ดํธ ์ฟผ๋ผ์ ์ถฉ๋ถํ ์ ์ฒด ๋ณต์ ๋ณธ ์งํฉ์ ์ฌ์ฉํ ์ ์์ ๋๊น์ง ์์ ๋ณต์ ๋ณธ์ ์ฐ๊ธฐ๊ฐ ์ด๋ฃจ์ด์ง์ง ์๋ ์ฐ๊ธฐ ์ต์ ํ๋ฅผ ๊ตฌํํฉ๋๋ค.
- Java 11์ ๋ํ ์คํ์ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ๋ชจ๋ ๋จธํด ํธ๋ฆฌ๋ฅผ ๋น๊ตํ๋ ์คํ ์ต์ ์ด ์ถ๊ฐ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ ๊ฐ์ ๋ณต์ ๋ณธ์ด ๋์ผํ๊ณ ํ๋๊ฐ ์ค๋๋ ๋ณต์ ๋ณธ์ด ์๋ 3๋ ธ๋ ํด๋ฌ์คํฐ์์ ์ต์ ์ ํ์ฑํํ๋ฉด ํ์ฌ ๋ณต์ ๋ณธ์ ํ ๋ฒ์ ๋ณต์ฌ ์์ ๋ง ์ฌ์ฉํ์ฌ ์ค๋๋ ๋ณต์ ๋ณธ์ด ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
- ์๋ก์ด ๊ธฐ๋ฅ currentTimestamp, currentDate, currentTime ๋ฐ currentTimeUUID๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
- CQL ์ฟผ๋ฆฌ์ ์ฐ์ ์ฐ์ฐ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- "ํ์์คํฌํ"/"๋ ์ง" ๋ฐ "๊ธฐ๊ฐ" ์ ํ์ ๋ฐ์ดํฐ ๊ฐ์ ์ฐ์ ์ฐ์ฐ์ ์ํํ๋ ๊ธฐ๋ฅ์ด ์ ๊ณต๋ฉ๋๋ค.
- ๋ณต๊ตฌ์ ํ์ํ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ํ ๋ชจ๋(nodetool ์๋ฆฌ - ๋ฏธ๋ฆฌ๋ณด๊ธฐ)์ ๋ณต์๋๋ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ํ์ธํ๋ ๊ธฐ๋ฅ(nodetool ์๋ฆฌ - ์ ํจ์ฑ ๊ฒ์ฌ)์ ์ถ๊ฐํ์ต๋๋ค.
- ์ด์ SELECT ์ฟผ๋ฆฌ์๋ Map ๋ฐ Set ์์๋ฅผ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
- ๊ตฌ์ฒดํ๋ ๋ทฐ์ ์ด๊ธฐ ๊ตฌ์ฑ ๋จ๊ณ ๋ณ๋ ฌํ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค(cassandra.yaml:concurrent_materialized_view_builders).
- "nodetool cfstats" ๋ช ๋ น์ ํน์ ์งํ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๊ณ ํ์๋๋ ํ ์๋ฅผ ์ ํํ๋ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- ์ฌ์ฉ์์ ์ฐ๊ฒฐ์ ํน์ ๋ฐ์ดํฐ ์ผํฐ๋ก๋ง ์ ํํ๋ ์ค์ ์ด ์ ๊ณต๋ฉ๋๋ค.
- ์ค๋ ์ท ์์ฑ ๋ฐ ์ญ์ ์์ ์ ๊ฐ๋(์๋ ์ ํ)๋ฅผ ์ ํํ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค.
- cqlsh ๋ฐ cqlshlib๋ ์ด์ Python 3์ ์ง์ํฉ๋๋ค(Python 2.7์ ๊ณ์ ์ง์๋จ).
- Windows ํ๋ซํผ์ ๋ํ ์ง์์ด ์ค๋จ๋์์ต๋๋ค. Windows์์ Cassandra๋ฅผ ์คํํ๋ ค๋ฉด WSL2 ํ์ ์์คํ (Linux 2์ฉ Windows ํ์ ์์คํ ) ๋๋ ๊ฐ์ํ ์์คํ ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋ Linux ํ๊ฒฝ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ถ์ฒ : opennet.ru