๐ก ๋ณธ ๋ฌธ์๋ ๋ํ์ ์ธ NoSQL ์ค ํ๋์ธ 'mongoDB'์ ๋ํ ๊ฐ๋ ์ ์ ๋ฆฌํ๋ฉฐ ๊ฐ์ Document DB์ธ Elasticsearch์ ๋น๊ตํด๋์ ๊ธ์ ๋๋ค.
ํ์์ NoSQL์ ๊ด์ฌ์ด ์๊ฑฐ๋ mongoDB๋ฅผ ์ ๋ฌธํ๊ณ ์ถ์ผ์ ๋ถ๋ค์ ์ฐธ๊ณ ๋ถํ๋๋ฆฝ๋๋ค.
1. mongoDB ์๊ฐ
1.1 mongoDB ์๊ฐ
mongoDB๋ NoSQL DBMS ์ ํ๋๋ก, ๋ฐ์ด๋ ํ์ฅ์ฑ๊ณผ ์ฑ๋ฅ์ ์๋ํฉ๋๋ค. ๋ํ, ํ์กดํ๋ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค ์ธ์ง๋ 1์, ์ ์ฒด DB ์ธ์ง๋ 5์๋ฅผ ์ ์งํ๊ณ ์์ต๋๋ค(DB-Engines Ranking). mongoDB๋ง์ผ๋ก๋ mongoDB๋ง์ ์ฅ์ ์ ์ฐพ๊ธฐ ์ด๋ ค์ฐ๋ ๊ฐ์ Document DB์ธ Elasticsearch์ ๋น๊ตํ๋ฉฐ ์ ๋ฆฌํ๋๋ก ํ๊ฒ ์ต๋๋ค.
1.2 Elasticsearch vs mongoDB ํน์ง ๋น๊ต
Name | Elasticsearch | MongoDB |
Description | 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 |
Primary database model | Search engine | Document store |
Secondary database models | Document store Spatial DBMS |
Spatial DBMS Search engine Time Series DBMS |
Technical documentation | www.elastic.co/guide/en/elasticsearch/reference/current/index.html | docs.mongodb.com/manual |
Developer | Elastic | MongoDB, Inc |
Initial release | 2010 | 2009 |
Current release | 7.8.0, June 2020 | 6.0.1, August 2022 |
License | Open Source (License: Apache 2.0) | Open Source (License: GNU AGPL v3.0) |
Cloud-based only | no | no (MongoDB Atlas: Cloud Service) |
DBaaS offerings (sponsored links) | ScaleGrid for MongoDB Database: Fully managed hosting for MongoDB Database on a wide variety of cloud providers and On-Premises. Automate your management, scaling and backups through one centralized platform. | |
Implementation language | Java | C++ |
Data scheme | schema-free (์ ํ) - Document ๋ด ๊ฐ์ ํ๋๋ ๋ฐ์ดํฐ ํ์ ์ด ๊ฐ์ - mapping ๊ตฌ์กฐ ํ์ธ๊ฐ๋ฅ |
schema-free (๋น์ ํ) - Document ๋ด ๊ฐ์ ํ๋๋ผ๋ ๋ฐ์ดํฐ ํ์ ์ด ๋ค๋ฅผ ์ ์์ - mapping ๊ตฌ์กฐ๊ฐ ์ ํด์ง์ง ์์ |
Typing | yes - epoch_millis, epoch_second, geo_point, keyword, text, binary... |
yes - string, integer, double, decimal, boolean, date, object_id, geospatial |
Secondary indexes | yes | yes |
SQL | SQL-like query language | Read-only SQL queries via the MongoDB Connector for BI |
APIs and other access methods | Java API RESTful HTTP/JSON API |
Bson(Binary + Json) ๋ฌธ์ ๊ธฐ๋ฐ ์ ์ฅ ๋ฐ ๊ฒ์ |
Supported Languages | .Net, Groovy, Community Contributed Clients, Java, JavaScript, Perl, PHP, Python, Ruby | Actionscript info, C, C#, C++, Clojure info, ColdFusion info, D info, Dart info, Delphi info, Erlang, Go, Groovy info, Haskell, Java, JavaScript, Lisp info, Lua info, MatLab info, Perl, PHP, PowerShell info, Prolog info, Python, R info, Ruby, Rust, Scala, Smalltalk info, Swift |
3rd parties | Elastic ์์ฒด์ ์ผ๋ก ๋ค์ํ ์๋น์ค ์ ๊ณต. | MongoDB Charts: ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์
๋ฐ์ดํฐ์ ์๊ฐํ + Chart Type CData: Connect to Big Data & NoSQL through standard Drivers. » more Percona: Database problems? Not on your watch. Databases run better with Percona. » more Navicat for MongoDB gives you a highly effective GUI interface for MongoDB database management, administration and development. » more |
- ๋์ฑ ์์ธํ ๋ด์ฉ์ DB-Engines Ranking: Elasticsearch vs. MongoDB ๋ถ๋ถ์ ์ฐธ๊ณ ํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
2. mongoDB ๊ฐ๋
2.1 mongoDB ์ ์ฅ ๊ตฌ์กฐ
RDB | table | row | column | schema |
Elasticsearch | index | document (Json) | field | mapping |
mongoDB | collection | document (Bson) | field | ์คํค๋ง์ ๋ํ ๋ฉํ ๋ฐ์ดํฐ๊ฐ ์์ |
2.1.1 collection
- ๋ค์ ๋น์ทํ ํน์ฑ์ ๊ฐ์ง document์ ๋ชจ์
- ์๋์ '2.3 Collection ์ปฌ๋์ '์์ ์ถ๊ฐ ์ค๋ช
2.1.2 document (= ๋ฌธ์)
- ๋ฐ์ดํฐ ์
์ถ๋ ฅ ์์๋ JSON ํ์์ ๋ํ๋จผํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฅ ์์๋ ์ด์ง ํฌ๋งท์ผ๋ก ์ธ์ฝ๋ฉํ BSON(Binary JSON) ํ์์ ๋ํ๋จผํธ๋ก ๋ณํ๋์ด ์ ์ฅ๋ฉ๋๋ค. ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๋ฐ๋ฅธ ์ฑ๋ฅ ๊ฐ์ ์ ์ํด ์ฌ์ฉํฉ๋๋ค.
- ์ฌ์ค BSON์ผ๋ก ์ธ์ฝ๋ฉ(encoding)ํ๊ฑฐ๋ ๋์ฝ๋ฉ(decoding)ํ๋ ๊ฒ์ mongoDB๊ฐ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ฏ๋ก ์ฌ์ฉ์๊ฐ ๋ชฐ๋ผ๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
- ๊ด๊ณ๋ฅผ ๊ฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋จ์ผ ๋ํ๋จผํธ์ ์ ์ฅํ ์ ์์ผ๋ ๋ํ๋จผํธ์ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ์์ผ ๋์คํฌ I/O ์ฑ๋ฅ ์ ํ ๋ฐ ๋ํ๋จผํธ ์ต๋ ํฌ๊ธฐ(16MB)๋ฅผ ์ด๊ณผํ ์ ์์ด ์ฌ์ฉ์ ์ฃผ์๊ฐ ํ์ํจ
- ํธ๋์ญ์ ์ ์ง์ํ์ง ์๊ณ ๊ฐ๊ฐ์ ๋ํ๋จผํธ ๋จ์๋ก ์ฒ๋ฆฌ๋๋ฉฐ Commit ๋๋ Rollback ๊ฐ๋ ์ด ์์ด ๋ชจ๋ Auto Commit์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
- ์๋์ '2.2 Document ๋ฐ์ดํฐ ๋ชจ๋ธ'์์ ์ถ๊ฐ ์ค๋ช
2.1.3 schema
- ์คํค๋ง ์ ์ธ ์์ด ๋ํ๋จผํธ์ ํ๋๋ฅผ ์์ ๋กญ๊ฒ ์ถ๊ฐ ๋ฐ ์ญ์ ํ ์ ์๋ ์ ์ฐํ ๊ตฌ์กฐ
- ๋ํ ์ปฌ๋ ์ ๋ด ๋ชจ๋ ๋ํ๋จผํธ๋ค์ ํ๋ ์งํฉ์ด ๋์ผํ์ง ์๊ณ ๊ฐ์ ํ๋๋ผ๋ ๋ฐ์ดํฐ ํ์ ์ด ๋ค๋ฅผ ์ ์๋ ๋น์ ํ ์คํค๋ง
- ๋ฐ๋ผ์ ๋ฐ์ดํฐ ๊ด๋ฆฌ ์ฃผ์ฒด๊ฐ ๋ถ๋ช ํํด์ ธ ์คํค๋ง๊ฐ ์ค๊ตฌ๋๋ฐฉ ์์ฑ๋๊ฑฐ๋ ๋ถ์ฃผ์ํ๊ฒ ์ญ์ ๋ ์ ์๋ ๋ฑ ๊ด๋ฆฌ์ ์ด๋ ค์ฐ๋ฉฐ, schema ๊ตฌ์กฐ๋ฅผ ํ์ธํ๊ธฐ ์ด๋ ค์
2.2 mongoDB ์ฃผ์ ๊ธฐ๋ฅ
2.2.1 ๋ฐ์ดํฐ ๋ณต์ (Replication)
- MongoDB ๋ ๋ณต์ ์ธํธ(Replica Set) ๋ผ๊ณ ๋ถ๋ฅด๋ ๊ตฌ์ฑ์ ํตํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณต์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณต์ ๋ฐฉ์ญ๊ณผ ์ ์ฌํ๊ฒ ํ๋ผ์ด๋จธ๋ฆฌ ๋ ธ๋์์๋ง ์ฝ๊ธฐ์ ์ฐ๊ธฐ๊ฐ ๋ชจ๋ ๊ฐ๋ฅํ๋ฉฐ, ์ฌ๋ฌ ์๋ฒ์ ๋ถ์ฐ๋ ์ธ์ปจ๋๋ฆฌ ๋ ธ๋๋ ์ฝ๊ธฐ๊ฐ ๊ฐ๋ฅํ์ฌ read์ HA(๊ณ ๊ฐ์ฉ์ฑ)์ ํ๋ณดํฉ๋๋ค.
- ์๋ ์ฅ์ ์กฐ์น(Failover)์ผ๋ก ํ๋ผ์ด๋จธ๋ฆฌ ๋ ธ๋์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ํด๋ฌ์คํฐ๋ ์๋์ผ๋ก ์ธ์ปจ๋๋ฆฌ ๊ฐ์ด๋ฐ ํ๋๋ฅผ ์ ํํด์ ํ๋ผ์ด๋จธ๋ฆฌ๋ก ์ค์ (์น๊ฒฉ) ํฉ๋๋ค.
2.2.2 ๋ฐ์ดํฐ ๋ถ์ฐ (Sharing / Partitioning)
- ํ๋์ ๋ ธ๋๋ฅผ ์ ๊ทธ๋ ์ด๋ ํ๋ ๊ฒ์ด ์๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ๋ฌ ๋์ ์๋ฒ์ ๋ถ์ฐ์ํค๋ ๊ฒ์ ์๋ฏธ ํฉ๋๋ค.(scaling horizontally)
- ์ค๋ฉ(sharding)์ผ๋ก ์๋ ค์ง ๋ฒ์ ๊ธฐ๋ฐ(range-based) ํํฐ์ ๋ฉ์ปค๋์ฆ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ ธ๋์ ๊ฑธ์ณ ๋ถ์ฐํ๋ ๊ฒ์ ์๋์ผ๋ก ๊ด๋ฆฌํด์ค๋๋ค.
- ์ค๋ฉ ์์คํ ์ ์ค๋ ๋ ธ๋๋ฅผ ์ถ๊ฐํด์ ์ฉ๋์ ํ์ํ ๋งํผ ๋๋ฆฌ๊ณ ์๋ ์ฅ์ ์กฐ์น ๊ธฐ๋ฅ๋ ์ ๊ณตํฉ๋๋ค.
2.2.3 ์๋์ ๋ด๊ตฌ์ฑ
- MongoDB์ ๊ฒฝ์ฐ ์ฐ๊ธฐ ์๋งจํฑ์ค(Write semantics)์ ์ ๋๋ง(journaling) ์ ํตํด ์ฐ๊ธฐ ์๋์ ๋ด๊ตฌ์ฑ ์ฌ์ด์์ ํํํฉ๋๋ค.
- ์ฐ๊ธฐ ์๋๋ ๋ฏธ๋ฆฌ ์ ํด์ง ์๊ฐ ๋ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ผ๋ง๋ ๋ง์ ์์ ์ฝ์ , ์์ , ์ญ์ ์ฒ๋ฆฌ ํ ์ ์๋ ์ง๋ฅผ ์๋ฏธ ํฉ๋๋ค.
- ๋ด๊ตฌ์ฑ์ ์ด๋ฌํ ์ฐ๊ธฐ ์ฐ์ฐ์ด ๋์คํฌ์ ์ ๋๋ก ๋ฐ์ ๋จ์ ํ์ ํ ์ ์๋ค ์ ๋๋ฅผ ์๋ฏธํฉ๋๋ค.
- ์ฐ๊ธฐ ์๋์ ๋ด๊ตฌ์ฑ(์์ ์ฑ) ์ฌ์ด๋ ์ญ๊ด๊ณ ๋๋ ์์ถฉ๊ด๊ณ(trade-off)๋ฅผ ๊ฐ์ง๋๋ค.
- ํธ๋ ์ ์
- MongoDB ๋ฅผ fire-and-forget ๋ชจ๋๋ก ์ค์ ํ๋ฉด ํ์ธ์ ๊ธฐ๋ค๋ฆด ํ์ ์์ด ์๋ฒ์ ์ฐ๊ธฐ ์์ ์ ์ ์กํ ์ ์์ต๋๋ค. ๋ํ ์ปค๋ฐ์ด ๋์๋์ง ํ์ธ ํ๊ธฐ ์ ์ ๋ค์์ ๋ณต์ ์๋ฒ๋ค์ด ์ฐ๊ธฐ ์์ ์ ํ ์ ์์ต๋๋ค.
- ๋จ์ ๋ฐ์ดํฐ๋ ์์ง๋ง ์์ ๋ฐฉ๋ํ ๋ฐ์ดํฐ(๊ฐ๋ น ํด๋ฆญ์คํธ๋ฆผ ์ด๋ ๋ก๊ทธ ์ ๊ฐ์)์ ๋ํด์๋ fire-and-forget ๋ชจ๋ ์ฐ๊ธฐ๊ฐ ์ ํฉํ๊ณ , ์ค์ํ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ์๋ ์์ ๋ชจ๋ ์ฐ๊ธฐ(safe=True)๊ฐ ๋ ๋ซ์ต๋๋ค.
- ๋ฐ์ดํฐ ์ ์ฅ(์ ๋๋ง)
- MongoDB v2.0 ์ดํ๋ก ์ ๋๋ง์ด ์ฌ์ฉ ๊ฐ๋ฅ ์ํ๋ก ์ค์ ๋๋ฉฐ, ์ ๋๋ง์ ๋ชจ๋ ์ฐ๊ธฐ์ ๋ํ ๋ก๊ทธ๋ฅผ 100ms ๋ง๋ค ํ ๋ฒ์ฉ ์ ๋ ํ์ผ์ ๊ธฐ๋ก ํ๊ฒ ํฉ๋๋ค.
- ์ฐ๊ธฐ ๋ถํ์ ๋ํ ์ฑ๋ฅ์ ํฅ์ ์ํค๊ธฐ ์ํด ์ ๋๋ง์ ํ์ง ์์ ์ฑ ์คํํ ์๋ ์์ต๋๋ค. ๋ค๋ง ์ด๋ ๊ฒ ํ ๊ฒฝ์ฐ, ์๋ฒ๊ฐ ์ ง๋ค์ด ๋ ๋ ๋ฐ์ดํฐ ํ์ผ์ด ์์๋ ์๋ ์์ต๋๋ค. ์ ๋๋ง์ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ์๋ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ์์๋์ง ์์ ๋ฐ์ดํฐ ๋ณต์ฌ๋ณธ์ ๊ฐ์ง ๊ฐ๋ฅ์ฑ์ ๋์ด๊ธฐ ์ํด์ ๋ค๋ฅธ ๋ฐ์ดํฐ ์ผํฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ณต์ ๋ฅผ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
2.3 Document ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง
JSON(JavaScript Object Notation) ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ฏ๋ก NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค Document ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ถ๋ฅ๋ฉ๋๋ค. ๋ฐ๋ผ์ Document ๋ฐ์ดํฐ๋ชจ๋ธ ๋ฐ mongoDB์ ํน์ฑ์ ๊ณ ๋ คํ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ํด์ผ ํฉ๋๋ค.
mongoDB ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ๋ํ๋จผํธ ์ค๊ณ ํ ์ปฌ๋ ์ ์ ์ค๊ณํ๋ ์์๋ก ์งํ๋ฉ๋๋ค. ๋ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ๋ฆฌ๋ฐฉ์์ ๊ณ ๋ คํ ๋ํ๋จผํธ ๊ตฌ์กฐ๋ฅผ ์ด๋ป๊ฒ ์ค๊ณํ๋๋์ ๋ฐ๋ผ ๋ฐ์ดํฐ ์ ํฉ์ฑ๊ณผ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ์ฃผ๊ฒ ๋๋ฏ๋ก ์ด์ ๋ํ ์ ํํ ์ดํด๊ฐ ํ์ํฉ๋๋ค.
2.3.1 Document ๊ตฌ์กฐ๋?
๋ํ๋จผํธ๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ก์ฐ(Row)์ ๊ฐ์ ๊ฐ๋ ์ด๋ฉฐ, mongoDB์์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ต์ ๋จ์์ ๋๋ค. ๋ค์์ ๊ทธ๋ฆผ์ ๋ํ๋จผํธ ๊ตฌ์กฐ๋ฅผ ๋ํ๋ธ ๊ฒ์ผ๋ก ๋ฐ์ดํฐ์ ๊ด๊ณ๋ฅผ ํํํ๋ ๋ฐฉ์์ ๋ฐ๋ผ ํฌ๊ฒ ์๋ฒ ๋๋ ๋ฐฉ์๊ณผ ๋ ํผ๋ฐ์ค ๋ฐฉ์์ผ๋ก ๋๋๋ฉฐ, ๋ ํผ๋ฐ์ค ๋ฐฉ์์ ์ธ๋ถ์ ์ผ๋ก ์์ ์ฐธ์กฐ, ๋ถ๋ชจ ์ฐธ์กฐ, ์ํธ ์ฐธ์กฐ ๋ฐฉ์์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- ์๋ฒ ๋๋ ๋ฐฉ์: ๊ด๊ณ๋ฅผ ๊ฐ๋ ๋ฐ์ดํฐ๋ฅผ ๋จ์ผ ๋ํ๋จผํธ์ sub-document๋ก ์ ์ฅ
- ๋ ํผ๋ฐ์ค ๋ฐฉ์: ๊ด๊ณ๋ฅผ ๊ฐ๋ ๋ํ๋จผํธ์ ์ฐธ์กฐํค๋ฅผ ์ ์ฅํ๋ฉฐ, ์ฐธ์กฐํค๋ฅผ id๋ก ๊ฐ๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ์ฐธ์กฐ
+ ObjectId
ObjectId๋ RDBMS์ Primary Key์ ๊ฐ์ด ๊ณ ์ ํ ํค๋ฅผ ์๋ฏธํ๋๋ฐ, ์ฐจ์ด์ ์ Primary Key๋ DBMS๊ฐ ์ง์ ๋ถ์ฌํ๋ค๋ฉด ObjectId๋ ํด๋ผ์ด์ธํธ์์ ์์ฑํฉ๋๋ค. ํด๋ผ์ด์ธํธ์์ ์์ฑํ๋ ์ด์ ๋ MongoDB ํด๋ฌ์คํฐ์์ Sharding๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๊ฐ์ ธ์ค๊ธฐ ์ํจ์ธ๋ฐ Router(mongos)๋ ObjectId๋ฅผ ๋ณด๊ณ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ Shard์์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ ์ ์์ต๋๋ค. ์์ํ๊ฒ๋ MongoDB ์๋ฒ์์ ์์์ ObjectId๋ฅผ ๋ถ์ฌํด์ ์ ์ฅํด๋ ๋ ๊ฒ ๊ฐ์๋ฐ ๋ฑํ ์ง์ํด์ฃผ์ง ์์ต๋๋ค. ์ฐธ๊ณ ๋ก ObjectId๋ฅผ ๋ฃ์ง์๊ณ ์ ์ฅํ๋ค๋ฉด ๋ฐ์ดํฐ๊ฐ ๊ทธ๋๋ก ์ ์ฅ๋ฉ๋๋ค.
2.3.2 Collection ์ปฌ๋์
์ปฌ๋ ์ ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ(Table)๊ณผ ๊ฐ์ ๊ฐ๋ ์ผ๋ก ์ฉ๋๊ฐ ๊ฐ๊ฑฐ๋ ์ ์ฌํ ๋ํ๋จผํธ๋ค์ ๊ทธ๋ฃน์ ๋ฌถ๋ ๋จ์๋ฅผ ์๋ฏธํ๋ฉฐ, 4๊ฐ์ง ์ข ๋ฅ์ ์ผ๋ฐ ์ปฌ๋ ์ , ์บก๋ ์ปฌ๋ ์ , TTL ์ปฌ๋ ์ , ์์คํ ์ปฌ๋ ์ ์ผ๋ก ๋๋ฉ๋๋ค.
์ข ๋ฅ | ๋ด์ฉ |
์ผ๋ฐ ์ปฌ๋ ์ | ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ปฌ๋ ์ ์ |
์บก๋ ์ปฌ๋ ์ | ์บก๋ ์ปฌ๋ ์
์ ๊ณ ์ ๋ ํฌ๊ธฐ๋ฅผ ๊ฐ๋ ์ปฌ๋ ์
์ผ๋ก ๋์ ์ฑ๋ฅ์ ๋ก๊น
๊ธฐ๋ฅ์ ์ํด ์ค๊ณ๋จ - ๋ช ๋ น์ด : db.createCollection( "log"\, { capped : true, size : 100000, max : 100 } ) 1) "log" ์ปฌ๋ ์ ์์ฑ ์ ์บก๋ ์ต์ ์ ์ค์ ํ๊ณ ์ต๋ ์ฌ์ด์ฆ์ ์ต๋ ๋ํ๋จผํธ ์๋ฅผ ์ค์ ํจ 2) size : ์ต๋ ์ ์ฅํฌ๊ธฐ๋ก ๋จ์๋ Byte์ 3) max : ์ต๋ ๋ํ๋จผํธ ์๋ก ์ต์ ์๋ต์ด ๊ฐ๋ฅํจ - ๋ํ๋จผํธ ์ถ๊ฐ ์ ๋์คํฌ ๊ณต๊ฐ์ด ์๋ ๊ฒฝ์ฐ ๊ฐ์ฅ ์ค๋์ ์ ์ถ๊ฐ๋ ๋ํ๋จผํธ๋ถํฐ ๋ฎ์ด์ฐ๊ธฐํ๊ธฐ์ ๋ฐ์ดํฐ ๊ด๋ฆฌ๊ฐ ํธ๋ฆฌํจ - ๋ก๊น ์ ์ํด ๋ง๋ค์ด์ ธ ์ฌ์ฉ์๊ฐ ์์๋ก ์ญ์ ํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ ์ ์์ |
TTL ์ปฌ๋ ์ | TTL ์ปฌ๋ ์
์ ํน์ ์๊ฐ์ด ๊ฒฝ๊ณผํ ๋ํ๋จผํธ๋ฅผ ์๋์ผ๋ก ์ญ์ ํ๋ ์ปฌ๋ ์
์ผ๋ก TTL ์ธ๋ฑ์ค์ ์ํด ์ง์๋๋ ๊ธฐ๋ฅ์ - ๋ช ๋ น์ด : db.member.createIndex( { modify_date : 1 }\, { expireAfterSeconds : 3600 } ) 1) modify_date ํ๋์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ์ฌ 1์๊ฐ(3600/60/60)์ด ์ง๋ ๋ํ๋จผํธ๋ ์ญ์ ํจ 2) expireAfterSeconds : ๋ํ๋จผํธ์ ์ ์ง์๊ฐ์ ์ด ๋จ์๋ก ์ค์ ํจ - "_id" ํ๋ ๋๋ ์ด๋ฏธ ๋ค๋ฅธ ์ธ๋ฑ์ค๊ฐ ์๋ ํ๋๋ TTL ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง ์ ์์ - ์บก๋ ์ปฌ๋ ์ ์ธ ๊ฒฝ์ฐ TTL ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง ์ ์์ - ๋จ์ผ ์ธ๋ฑ์ค๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ ๋ณตํฉ(Compound) ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง ์ ์์ |
์์คํ ์ปฌ๋ ์ | mongoDB ๋ด๋ถ์์ ์ฌ์ฉ๋๋ ์ปฌ๋ ์ ์ผ๋ก ์ฌ์ฉ์๊ฐ ์ง์ ํ์ฌ ์ฌ์ฉํ ์ ์์ |
2.3.2 ์ปฌ๋์ ๋ถ๋ฆฌ
- ๋จ์ผ ์ปฌ๋ ์ ์ ์ฐ๊ธฐ ์์ ์ด ๋ง์ ๊ฒฝ์ฐ ์ปฌ๋ ์ ๋ถ๋ฆฌ๋ฅผ ๊ณ ๋ คํจ
- ๋จ์ผ ์ปฌ๋ ์ ์์ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์ญ์ ํ๋ ๊ฒฝ์ฐ ์ปฌ๋ ์ ๋ถ๋ฆฌ๋ฅผ ๊ณ ๋ คํจ
- ๋จ์ผ ์ปฌ๋ ์ ์ ์ ์ฅ๋๋ ๋ํ๋จผํธ๋ค์ ์ก์ธ์ค ํจํด์ด ๋ค์ํ ๊ฒฝ์ฐ ์ปฌ๋ ์ ๋ถ๋ฆฌ๋ฅผ ๊ณ ๋ คํจ
- ์์ฃผ ์กฐํ๋๊ฑฐ๋ ๋ํ๋จผํธ ์๊ฐ ์ ์ ์ปฌ๋ ์ ์ ๋ฉ๋ชจ๋ฆฌ์ ์บ์ ๋ ์ ์๋๋ก ์ปฌ๋ ์ ๋ถ๋ฆฌ๋ฅผ ๊ณ ๋ คํจ
3. ๋ง๋ฌด๋ฆฌ
์ฃผ๋ ์ฐจ์ด์ ์ด๋ผ ๋๊ปด์ง๋ ๊ฒ์...
Elasticsearch | MongoDB | |
Data Schema | schema-free (์ ํ) - Document ๋ด ๊ฐ์ ํ๋๋ ๋ฐ์ดํฐ ํ์ ์ด ๊ฐ์ - mapping ๊ตฌ์กฐ ํ์ธ๊ฐ๋ฅ |
schema-free (๋น์ ํ) - Document ๋ด ๊ฐ์ ํ๋๋ผ๋ ๋ฐ์ดํฐ ํ์ ์ด ๋ค๋ฅผ ์ ์์ - mapping ๊ตฌ์กฐ๊ฐ ์ ํด์ง์ง ์์ |
APIs and other access methods | Java API RESTful HTTP/JSON API |
Bson(Binary + Json) ๋ฌธ์ ๊ธฐ๋ฐ ์ ์ฅ ๋ฐ ๊ฒ์ |
Supported Languages | .Net, Groovy, Community Contributed Clients, Java, JavaScript, Perl, PHP, Python, Ruby | Actionscript info, C, C#, C++, Clojure info, ColdFusion info, D info, Dart info, Delphi info, Erlang, Go, Groovy info, Haskell, Java, JavaScript, Lisp info, Lua info, MatLab info, Perl, PHP, PowerShell info, Prolog info, Python, R info, Ruby, Rust, Scala, Smalltalk info, Swift |
3rd parties | Elastic ์์ฒด์ ์ผ๋ก ๋ค์ํ ์๋น์ค ์ ๊ณต. | MongoDB Charts: ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์
๋ฐ์ดํฐ์ ์๊ฐํ + Chart Type CData: Connect to Big Data & NoSQL through standard Drivers. » more Percona: Database problems? Not on your watch. Databases run better with Percona. » more Navicat for MongoDB gives you a highly effective GUI interface for MongoDB database management, administration and development. » more |
์ฐธ๊ณ
- [book] MongoDB in Action(๋ชฝ๊ณ ๋๋น ์ธ ์ก์ ) 2nd Edition : ์นด์ผ ๋ฑ ์ปค, 2018, ์ ์ดํ
- [book] NoSQL ์ฒ ์ ์ ๋ฌธ : ๋ ์ค๋ฆฌ๋ฒ, 2015, ๊ธธ๋ฒ
- [book] ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ Real MongoDB : ์ด์ฑ์ฑ, 2018, ์ํค๋ถ์ค
- [mongoDB] official manual: https://docs.mongodb.com/manual/
- [wiki] NoSQL: https://ko.wikipedia.org/wiki/NoSQL
- mongoDB Story 2: mongoDB ํน์ง๊ณผ ๊ตฌ์ฑ์์: https://meetup.toast.com/posts/275
'Study: DeveloperTools(DevTool) > DevTool: NoSQL(Elastic, Mongo)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[NoSQL] Apache Cassandra ์ ๋ฆฌ: NoSQL Column-Family DB (0) | 2022.11.17 |
---|---|
[NoSQL] Redis(vs Memcached) ์ ๋ฆฌ: NoSQL Key-value DB (0) | 2022.11.16 |
[NoSQL] NoSQL ๋น๊ต ์ ๋ฆฌ: CassandraDB vs Elasticsearch vs MongoDB vs Redis (22.11.03. ๊ธฐ์ค) (0) | 2022.11.14 |
[NoSQL] NoSQL์ ์ฌ์ฉํ๋ ์ด์ : RDBMS(SQL) VS NoSQL (0) | 2022.11.13 |
[Elastic] Elastic Common Schema (ECS) Guideline ๋ฒ์ญ (0) | 2022.10.10 |