๐ก ๋ณธ ๋ฌธ์๋ 'CassandraDB vs Elasticsearch vs MongoDB vs Redis ๋น๊ต'์ ๋ํด ์ ๋ฆฌํด๋์ ๊ธ์ ๋๋ค.
DB-Engines Ranking์์ 22.11.03์ผ์ ๊ธฐ์ค์ผ๋ก NoSQL์ ์ข ๋ฅ๋ณ๋ก ๊ฐ์ฅ ์ธ๊ธฐ ์๋ DB๋ฅผ ์ฐพ์ ํ ์ด๋ฅผ ์ ๋ฆฌํด์ ๋น๊ตํ ๋ฌธ์์ ๋๋ค. ์ถ๊ฐ๋ก ๋ค์ํ ์ฐธ๊ณ ๋ฌธํ์ ํตํด ๋ค์ํ ๊ด์ ์์ ๋น๊ต ๋ถ์ํ์ผ๋ ์ฐธ๊ณ ๋ถํ๋๋ฆฝ๋๋ค.
1. NoSQL ์๊ฐ ๋ฐ ์ข ๋ฅ
1.1 NoSQL(Not only SQL)์ด๋?
NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํน์ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ํด ํน์ ๋ชฉ์ ์ ๋ง์ถ์ด ๊ตฌ์ถ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก์ ํ๋์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ์ํ ์ ์ฐํ ์คํค๋ง๋ฅผ ๊ฐ์ถ๊ณ ์์ต๋๋ค. NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ฐ๋ฐ์ ์ฉ์ด์ฑ, ๊ธฐ๋ฅ์ฑ ๋ฐ ํ์ฅ์ฑ์ ๋๋ฆฌ ์ธ์ ๋ฐ๊ณ ์์ต๋๋ค.
- SQL๊ณผ NoSQL์ ๋ค๋ฅธ ์ ๋ฐ NoSQL์ ์ฌ์ฉํ๋ ์ด์ ์ ๋ํ ์์ธํ ์ค๋ช ์
1.2 NoSQL์ ์ข ๋ฅ
1.2.1 Key-Value (In-memory ์ ์ฌ)
Key๋ก Value์ ์ ๊ทผํ๋ ๊ฐ์ฅ ๋จ์ํ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์๋๊ฐ ๋น ๋ฅด๋ฉฐ ๋ถ์ฐ ์ ์ฅ์ ์ฉ์ดํฉ๋๋ค. ์ฌ๊ธฐ์ Key๋ ๋ชจ๋ ๋ฐ์ดํฐ ํ์ ์ด ๊ฐ๋ฅํ๋ฉฐ, ์ค๋ณต๋ ์ ์๊ธฐ์ ๊ฐ Key๋ ํ๋์ Value๋ฅผ ๊ฐ์ง๋๋ค.
์์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ Redis, AWS DynamoDB, Riak, LevelDB, Memcached ๋ฑ์ด ์์ผ๋ฉฐ, ๋ณดํต ๋ค์๊ณผ ๊ฐ์ ์ํฉ์ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ฑ๋ฅ ํฅ์์ ์ํด RDBMS ์์ ์บ์ฑ (Redis)
- ์ฅ๋ฐ๊ตฌ๋ ๊ฐ์ ์น์ ํ๋ฆฌ์ผ์ด์ ์์ ์ผ์์ ์ธ ์์ฑ ์ถ์
- ์ด๋ฏธ์ง๋ ์ค๋์ค ํ์ผ ๊ฐ์ ๋์ฉ๋ ๊ฐ์ฒด ์ ์ฅ
1.2.2 Document
Key, Value์์ ํ์ฅ๋ ํํ๋ก _id๋ผ๋ Key๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ ํ์ ์ธ Document(JSON, XML ๋ฑ)์ ์ ๊ทผํ์ฌ ์ฌ์ฉํฉ๋๋ค. Document ๊ธฐ๋ฐ์ด๊ธฐ์ Schema๋ฅผ ๋ฐ๋ก ์ ์ํ์ง ์๊ณ ๋ณต์กํ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ ํํํ ์ ์์ผ๋ฉฐ, HTTP๋ก ์ฝ๊ฒ ํต์ ํ ์ ์์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก ์ผ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค(mongoDB)์ ๊ฒฝ์ฐ Replica Set์ ๋์ด Master(primary)์ ์ฅ์ ๋ฐ์ ์ Slave(secondary)๊ฐ Master ์ญํ ์ ๋์ ํ๋ Failover ๋ฉ์ปค๋์ฆ์ ๊ตฌ์ถํ์ฌ ๋์ฑ ์์ ์ ์ผ๋ก ์ด์ฉํฉ๋๋ค.
์์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ MongoDB, Azure Cosmose DB, Couch DB, Amazon DocumentDB ๋ฑ์ด ์์ผ๋ฉฐ, ๋ณดํต ๋ค์๊ณผ ๊ฐ์ ์ํฉ์ ์ฌ์ฉ๋ฉ๋๋ค.
- ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋ ์น ์ฌ์ดํธ์ฉ ๋ฒก์๋ ์ง์
- JSON ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์
- ๋น์ ๊ทํ๋ ์ค์ฒฉ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์
1.2.3 Graph
๋ ธ๋์ ๊ด๊ณ๋ก ๊ตฌ์ฑ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๊ทผ์ ํ ๊ฐ์ฒด๋ฅผ ๋ชจ๋ธ๋งํ ๋ชฉ์ ์ผ๋ก ์ค๊ณํฉ๋๋ค. ์ฃผ๋ก ์์ ๋คํธ์ํน, ์ถ์ฒ ์์ง, ์ฌ๊ธฐ ๊ฐ์ง ๋ฐ ์ง์ ๊ทธ๋ํ์ ์ฌ์ฉ๋๋, ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ญ ๋๋ค.
์์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ Amazon Neptune, Neo4j, Blazegraph, OrientDB ๋ฑ์ด ์์ต๋๋ค.
1.2.4 Column-Family(= Wide Column)
Key, Value์ ์ ์ฌํ ํํ์ด๋ฉฐ, ๋ฐ์ดํฐ๊ฐ ๋ด๋ถ์ ์ผ๋ก Key๋ฅผ ๊ธฐ์ค์ผ๋ก Sorting ๋์ด ์ ์ฅ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ค. Wide Column ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ ๋งํผ ์นผ๋ผ๊ณผ ๋ก์ฐ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ์นผ๋ผ์ ์ด๋ฆ๊ณผ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋๊ณ ๋ก์ฐ๋ ๊ฐ๊ธฐ ๋ค๋ฅธ ์นผ๋ผ์ผ๋ก ๊ตฌ์ฑ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ค๋ฅธ NoSQL๊ณผ ๋ค๋ฅด๊ฒ ๊ธฐ๋ณธ์ ์ผ๋ก Order by๊ฐ ์ ์ฉ๋์ด ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ํ์ฉํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
์์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ CassandraDB, Hbase ๋ฑ์ด ์์ต๋๋ค.
1.2.5 In-Memory
๊ธฐ์กด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ค๋ฅด๊ฒ ํ๋ฐ์ฑ ๋ฉ๋ชจ๋ฆฌ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํ์ฌ ๋น ๋ฅธ I/O์ด ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ค. ์ด๋ ๋ฐ๋ฆฌ์ด์ ์๋ต ์๊ฐ์ ํ์๋ก ํ๋ฉฐ, ์ธ์ ๋ผ๋ ์์ ํธ๋ํฝ์ด ๊ธ๋ฑํ ์ ์๋ ๋ฆฌ๋๋ณด๋, ์ธ์ ์คํ ์ด, ์ค์๊ฐ ๋ถ์ ๊ฐ์ ๋ถ์ผ์ ์ฌ์ฉํฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ด๊ตฌ์ฑ(ACID): ๊ธฐ๋ณธ์ ์ผ๋ก ACI๋ ๋ณด์ฅํ๋ฉฐ, D(๋ด๊ตฌ์ฑ)์ ๋ณด์ฅํ๊ธฐ ์ํด์๋ '์ค๋ ์ท & ํธ๋์ญ์ ๋ก๊น '์ ํตํด ๋ฐ์ดํฐ๊ฐ ์ ์ค๋์ง ์๋๋ก ์ค๊ณํฉ๋๋ค.
- ์ค๋
์ท & ํธ๋์ญ์
๋ก๊น
: ๋ฐ์ดํฐ๋ฅผ ํ๋ฐ์ฑ์ ์ ์ฅํ๊ธฐ์ ์์คํ
์ฅ์ ์ ๋ฐ์ดํฐ๊ฐ ์์ค๋ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ค๋
์ต์ ์์ฑํ์ฌ ๋์คํฌ์ ์ ์ฅํ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์งํํ ๋ชจ๋ ์์ ๊ธฐ๋ก(ํธ๋์ญ์
๋ก๊น
)์ ๋์คํฌ์ ๋ณด๊ดํฉ๋๋ค.
- ๋ถ๋น ์์ฒ ๊ฑด์ ์ฐ์ฐ์ ์ํํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํธ๋์ญ์ ๋ก๊น ์ ์์คํ ์ ์ฑ๋ฅ๊ณผ ์ ์ฅ ์ฉ๋์ ๊ณผ๋ถํ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋๋ถ๋ถ์ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ค๋ ์ท์ด ๋ง๋ค์ด์ง ๋๊น์ง ํธ๋์ญ์ ๋ก๊ทธ๋ฅผ ๋ณด๊ดํ์๋ค๊ฐ ์ดํ ์ญ์ ํฉ๋๋ค.
์์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ Redis, Redis์ฉ Amazon MemoryDB, Amazon ElastiCache ๋ฑ์ด ์์ต๋๋ค.
1.2.6 Search Engine
๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ฑํ๋ ๋ก๊ทธ์ ์งํ์ ์์ธ ์์ฑ, ์ง๊ณ, ๊ฒ์์ ํตํด ์ปดํจํฐ์์ ์์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ค์๊ฐ์ ๊ฐ๊น์ด ์๊ฐํ์ ๋ถ์์ ์ ๊ณตํ๊ธฐ ์ํด ํน์ ๋ชฉ์ ์ ๋ง์ถ์ด ๊ตฌ์ถ๋ฉ๋๋ค.
์์ฉ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ Elasticsearch, Splunk, Amazon OpenSearch Service ๋ฑ์ด ์์ต๋๋ค.
2. NoSQL ๋น๊ต ์ ๋ฆฌ
2.1 NoSQL ์ข ๋ฅ ๋ณ DB ์ ์
์์ ์ดํด๋ดค๋ฏ์ด NoSQL์๋ ๋ค์ํ ๋ชฉ์ ์ ์ฌ์ฉํ๋ DB๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ข ๋ฅ๋ค ์ค ๋ํ์ ์ธ DB๋ฅผ ํ๋์ฉ ์ ์ ํ์ฌ ๋น๊ตํด๋ณด๊ธฐ๋ก ํ์ต๋๋ค. DB ์ ์ ๊ธฐ์ค์ DB-Engines Ranking์ ์ฐธ๊ณ ํ์์ต๋๋ค.
- DB-Engines Ranking์ ์ฐธ๊ณ ํ ๊ฒฐ๊ณผ 10์๊ถ ๋ด๋ถ์ NoSQL์๋ MongoDB, Redis, Elasticsearch๊ฐ ์์์ผ๋ฉฐ, NoSQL์ ์ข ๋ฅ๋ฅผ ๊ณ ๋ คํ์ฌ Cassandra๊น์ง ์กฐ์ฌํ๊ธฐ๋ก ๊ฒฐ์ ํ์์ต๋๋ค.
2.2 ๊ฐ NoSQL ์ ํน์ง ๋น๊ต
๋จผ์ DB-Engines Ranking ์ ๋น๊ต ๊ธฐ๋ฅ์ ํตํด ํฐ ํน์ง์ ์ดํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค.
Name | Cassandra | Elasticsearch | MongoDB | Redis |
Description | Wide-column store based on ideas of BigTable and DynamoDB | A distributed, RESTful modern search and analytics engine based on Apache Lucene | One of the most popular document stores available both as a fully managed cloud service and for deployment on self-managed infrastructure | Popular in-memory data platform used as a cache, message broker, and database that can be deployed on-premises, across clouds, and hybrid environments |
Primary DB model | Wide column store | Search engine | Document store | Key-value store |
Secondary DB models | Document store Spatial DBMS |
Spatial DBMS Search engine Time Series DBMS |
Document store Graph DBMS Spatial DBMS Search engine Time Series DBMS |
|
Technical documentation | cassandra.apache.org/doc/latest | www.elastic.co/guide/en/elasticsearch/reference/current/index.html | docs.mongodb.com/manual | docs.redis.com/latest/index.html redis.io/documentation |
Developer | Apache Software Foundation | Elastic | MongoDB, Inc | Redis project core team |
Initial release | 2008 | 2010 | 2009 | 2009 |
Current release | 4.0.7, October 2022 | 7.8.0, June 2020 | 6.0.1, August 2022 | 7.0.5, September 2022 |
License | Open Source : Apache 2.0 |
Open Source : ELv2 & SSPL |
Open Source : GNU AGPL v3.0. |
Open Source : 3-Clause-BSD |
Cloud-based only | no | no | no | no |
Data schema | schema-free | schema-free | schema-free | schema-free |
Typing : predefined data type |
yes | yes | yes | partial |
SQL | SQL-like SELECT, DML and DDL statements (CQL) | Elastic Query DSL | Read-only SQL queries via the MongoDB Connector for BI | no |
- License
- Elasticsearch: Elastic License v2(ELv2) & SSPL
- SSPL: AGPL-3.0์ ์ ์ฌ
- MongoDB: GNU AGPL v3.0.
- Redis: 3-Clause-BSD
- Elasticsearch: Elastic License v2(ELv2) & SSPL
- Typing: predefined data types such as float or date
- Elasticsearch: epoch_millis, epoch_second, geo_point, keyword, text, binary...
- MongoDB: string, integer, double, decimal, boolean, date, object_id, geospatial
- Redis:Supported data types are strings, hashes, lists, sets and sorted sets, bit arrays, hyperloglogs and geospatial indexes
- SQL
- Cassandra: Cassandra Query Language (CQL)
- Elasticsearch: Elastic Query DSL ([Elastic] Elasticsearch ๊ตฌ๋ฌธ ๊ฒ์: ๊ธฐ๋ณธ Query ์ ๋ฆฌ(Elastic Query DSL))
2.3 NoSQL ์ฉ์ด ๋น๊ต (vs SQL)
SQL | NoSQL | ||||
Elastic Search | MongoDB | DynamoDB | Cassandra | Couchbase | |
ํ ์ด๋ธ | ์ธ๋ฑ์ค | ์ปฌ๋ ์ | ํ ์ด๋ธ | ํ ์ด๋ธ | ๋ฐ์ดํฐ ๋ฒํท |
์ด | ๋ฌธ์ | ๋ฌธ์ | ํญ๋ชฉ | ์ด | ๋ฌธ์ |
์ปฌ๋ผ | ํ๋ | ํ๋ | ์์ฑ | ์ปฌ๋ผ | ํ๋ |
๊ธฐ๋ณธ ํค | id | ObjectId | ๊ธฐ๋ณธ ํค | ๊ธฐ๋ณธ ํค | ๋ฌธ์ ID |
์ธ๋ฑ์ค | ์ธ๋ฑ์ค | ๋ณด์กฐ์ธ๋ฑ์ค | ์ธ๋ฑ์ค | ์ธ๋ฑ์ค | |
๋ณด๊ธฐ | ๋ณด๊ธฐ | ๊ธ๋ก๋ฒ ๋ณด์กฐ ์ธ๋ฑ์ค | ๊ตฌ์ฒดํ๋ ๋ณด๊ธฐ | ๋ณด๊ธฐ | |
์ค์ฒฉ๋ ํ ์ด๋ธ ๋๋ ๊ฐ์ฒด | ๋งต | ํฌํจ ๋ฌธ์ | ๋งต | ๋งต | ๋งต |
๋ฐฐ์ด | ๋ฐฐ์ด | ๋ฐฐ์ด | ๋ชฉ๋ก | ๋ชฉ๋ก | ๋ชฉ๋ก |
๋ง๋ฌด๋ฆฌ
๋ค์ํ NoSQL์ ์ข ๋ฅ๋ฅผ ์ดํด๋ณด๊ณ ์ข ๋ฅ๋ณ DB๋ฅผ ์ค์ ํ์ฌ ํน์ง์ ์ดํด๋ณด๋ '์ ๋ค์ํ ์ข ๋ฅ์ DB๊ฐ ๋ง๋ค์ด์ก๋์ง'๋ฅผ ์ ์ ์์์ต๋๋ค. ์์ผ๋ก ๊ฐ DB์ ๋ํด ๋์ฑ ์์ธํ ์ดํด๋ณด๋ฉฐ ํน์ง์ ์ดํด๋ณผ ์์ ์ ๋๋ค.
์ฐธ๊ณ
- [DB Engine Ranking] Cassandra vs Elasticsearch vs. MongoDB vs Redis: https://db-engines.com/en/system/Cassandra%3BElasticsearch%3BMongoDB%3BRedis