반업주부의 일상 배움사
[요약] 개발시 데이터베이스 선택 가이드 (총정리) :: with AI 본문
[ 요약 ]
이 기사는 다양한 데이터베이스를 비교 분석하여 어디에 어떻게 사용하는지 설명합니다.
키-밸류 데이터베이스는 단순하고 캐싱용으로 사용되며, 레디스는 램에 저장하여 빠른 서비스를 제공하는 경우에 사용됩니다.
관계형 데이터베이스는 SQL을 사용하여 데이터를 저장하며, 정규화로 인해 입출력이 복잡해질 수 있지만, 안전하게 중요한 기능을 구현할 수 있습니다.
분산 데이터베이스는 데이터 입출력이 많은 서비스에서 사용되며, 칼럼 패밀리 데이터베이스는 유연한 사용을 가능케 합니다.
시계열 데이터 저장과 검색용 인덱스 보관 등 다양한 용도로 데이터베이스가 활용될 수 있습니다.
선택한 데이터베이스로 적절하게 사용하여 원하는 서비스나 개발 목적을 달성하시길 바랍니다.
A guide to choosing a database for development (in a nutshell)
https://www.youtube.com/watch?v=ZVuHZ2Fjkl4
[ 한글 전체 ]
여러분이 새로운 서비스를 만들거나, 개발자 취업용으로 공부하거나, 데이터베이스를 하나 고르려는 경우가 있습니다.
그러나, 너무 많아서 뭘 고를지 모르겠다면, 이번 기회에 다 정리해 보도록 합시다.
자, 가장 쉽고 간단한 데이터베이스부터 알아볼게요.
키-밸류 데이터베이스란 데이터를 키-밸류 형태로 저장하는 데이터베이스입니다.
예를 들어, 여러분들의 이름과 나이를 저장하고 싶으면 이렇게 기록하시면 됩니다.
그러나, 너무 간단해 보여서 실용성은 딱히 없을 것 같죠?
그래서 서브 용도로 사용하거나 그게 다입니다.
그러나, 좀 특수한 기능을 가진 데이터베이스 하나가 있는데, 레디스입니다.
이걸 쓰면, 그냥 똑같이 키-밸류 형태로 데이터를 저장할 수 있습니다.
그러나, 얘는 되게 많이 씁니다.
이유가 뭐냐면, 데이터를 하드디스크에 저장하지 않고 일차적으로 램에다가 저장을 해줍니다.
왜냐하면, 램이 하드보다 몇십 몇백 배에는 빠르니까요.
그래서, 레디스를 어떤 식으로 활용하느냐면, 메인 DB 같은 걸 하나 두고, 그 다음에 거기서 사람들이 자주 쓰는 데이터들이 있습니다.
이런 것들은 레디스에도 추가로 복사해 두는 거예요.
그 다음에, 그 데이터가 필요하면, 여기 말고 메인에서 꺼내서 보여주는 경우들이 있습니다.
그러면, 되게 빠른 서비스를 만들 수 있으니까요.
그래서, 이런 식으로 캐싱용, 또는 법석 구역자 이런 용도의 서브 DB로 활용하는 경우들이 있습니다.
그러나, 요즘은 Redis 하나로 모든 걸 다 할 수 있는 레디스 업그레이드 버전도 나와 있긴 한데, 아무도 안 쓰는 거 같아요.
자, 내가 각잡는 걸 좋아해서 데이터도 표 형태로 저장하고 싶으면, 역사와 전통이 있는 관계형 데이터베이스를 쓰시면 됩니다.
데이터베이스는 일단 테이블을 하나 만들고, 그 위에다가 어떤 데이터를 저장할지 이렇게 이름을 써 두고, 그 다음에 하나의 행마다 이렇게 데이터를 보관하는 식으로 데이터를 저장할 수 있습니다.
자, 엑셀도 관계형 데이터베이스라고 할 수 있겠는데, 그러나 대량의 데이터를 저장하려면 Oracle, MySQL, PostgreSQL 등의 DBMS를 사용하는 경우들이 많습니다.
그리고 환경TV는 일반적으로 다양한 곳에서 사용할 수 있어 데이터베이스 점유율 같은 것을 보면 상위권들은 대부분 관계형 DB이고, 데이터를 저장하고 싶다면 SQL이라는 문법을 사용해야 합니다.
SQL은 쉽기 때문에 세 살짜리 아이도 할 수 있습니다.
그러나 관계형 DB를 사용할 때 집착하는 것 중 하나가 정규화입니다.
데이터 중복을 너무나 싫어하는 나머지, 데이터가 중복이 되면 다른 테이블로 쪼개버립니다.
이것을 전문 용어로 정규화라고 하는데, 이것 때문에 나중에 데이터 입출력하는 문법 같은 것이 복잡해지거나 길어질 수 있습니다.
하지만 기본적으로 트랜잭션 기능이 들어 있어 돈 거래 같은 중요한 기능을 구현할 때 안전하게 구현할 수 있고, 데이터 정확도가 매우 중요하기 때문에 일반적으로 관계형 DB를 쓰는 경우가 많습니다.
많은 사람들이 이름 때문에 관계형 데이터베이스가 관계를 잘 표현한다고 생각하지만, 실은 관계라는 표현은 수학 용어인 "relation"이라는 행렬을 배울 때 쓰는 용어를 그대로 따온 것입니다.
실제로 데이터 관계 표현은 가능하지만, 관계 자체를 저장하기에는 좀 귀찮은 점들이 있습니다.
그래서 관계를 DB에 저장하고 싶으면 브렉스 데이터베이스를 사용합니다.
이것들 중에 가장 유명한 것은 네오폴제이라고 하는데, DBMS는 노드라는 것을 만들고, 노드 안에 데이터들을 저장할 수 있습니다.
노드끼리 어떤 관계인지도 이렇게 기록을 해둘 수 있고, 이러한 데이터를 입출력할 때는 그래프 쿼리 언어를 사용합니다.
그러면 이제 신기하게 방향 같은 것도 표현할 수 있습니다.
자, 그래서요, DB를 어디다 쓰냐고요?
그냥 자료간의 관계 방향 같은 걸 중점적으로 저장하고 싶을 때 사용하면 되는데요.
뭐, 비행기 노선 같은 거, 아니면 SNS에 친구 관계 같은 거, 아니면 여러분들이 어떤 사람한테 코로나를 전염시켰는지 이런 거, 아니면 대기업들은 가끔 가다가 추천 공간을 염두에 두고 이렇게 만들어진 데이터베이스들이기 때문에 데이터베이스를 이렇게 분산시켜 놓는 게 되게 쉬워요.
그래서 데이터 입출력이 되게 많은 뭐 이런 서비스들의 주로 활용하는 경우들이 있습니다.
자, 근데 분산에 놓으면 당연히 단점도 있습니다.
자요, DB간의 정확도 같은 게 떨어질 수 있습니다.
뭐, 이런 것들이 중요하지 않으면 그냥 분산시켜 놓아도 전혀 상관없고요.
자, 나는 관계형 DB가치 표 형식으로 데이터를 저장하고 싶은데요.
자, 근데 조금 유연하게 쓰고 싶다 그러면은 컬럼 패밀리 데이터베이스들을 사용하면 됩니다.
자, 대표적으로 카산드라, 구글의 빅테이블, 뭐 이런 것들이 있는데요.
자요, DB들은 똑같이 테이블을 만들고 로우를 하나 만들고, 그 다음에 거기다가 자유롭게 칼럼을 만들어서 데이터를 기입하는 식으로 자료를 저장합니다.
표랑 똑같아요.
자, 근데요, DB에다가 데이터를 출력하려면 SQL이 아니라 자기들이 만든 언어를 쓰셔야 돼요.
카산드라의 경우에는 CQL 이런 것들을 갖다 쓰시면 되고요.
자, 그리고요, DB들은 정규화 이런 거 안 해요.
중복 제거 이런 것들을 안 한다는 소리에요.
그래서 이제 훨씬 더 데이터 입출력 문법이 쉽고요, 분산처리 이런 것들도 매우 잘 해주기 때문에, 많은 입출력을 감당해야 된다 이러면 요런 DVD를 쓰는 경우들이 있습니다.
물론, 분산처리해 놓으면 단점도 있다고 했죠.
참고하시면 되고요.
그리고 가끔 데이터 저장을 할 때, 시간 기록 같은 거를 되게 쉽게 해주는 기능 같은 게 있어 가지고요, 시계열 데이터 저장하고 분석할 때 DB를 쓰는 경우들도 있고요, 검색용 인덱스를 보관하기 위한 데이터베이스들도 있습니다.
일라스틱서치, 아마존의 클라우드 서치 등과 같은 데이터 검색을 위한 도구들은 일반적으로 데이터베이스로도 사용 가능하지만, 실제로는 주로 인덱스 보관용으로 사용됩니다.
인덱스란, 데이터 검색을 빠르게 할 수 있도록 도와주는 색인 목차입니다.
데이터를 가져와 인덱스를 생성하고 보관해주는 역할을 합니다.
검색 요청이 들어오면 인덱스를 이용해 쉽게 자료를 검색할 수 있으며, 부가적인 서비스로는 실시간 검색어 추천, 검색어 오타 교정 등이 있습니다.
검색이 중요한 사이트를 만들 때는 이러한 도구들을 사용하는 경우가 많으며, 일반적으로 관계형 DB 또는 도큐먼트 DB 중 하나를 선택하여 사용하면 됩니다.
데이터의 정확도보다는 입력과 출력이 많은 경우에는 도큐먼트 DB를 사용하면 좋습니다.
[ English Summary ]
This article compares and analyzes different databases and explains where and how to use them.
Key-value databases are simple and are used for caching, while redis is used when storing in RAM to provide fast service.
Relational databases use SQL to store data, and while normalization can complicate input and output, they can safely implement critical functions.
Distributed databases are used in services with a lot of data input and output, and column-family databases allow for flexible use.
Databases can be utilized for a variety of purposes, including storing time series data and keeping an index for searching.
We hope that you will use the database you choose appropriately to achieve the desired service or development purpose.
[ English Full Text ]
Maybe you're building a new service, studying for a developer job, or trying to pick a database.
But if there are so many that you don't know what to choose, let's take this opportunity to organize them all.
Let's start with the easiest and simplest database.
A key-value database is a database that stores data in a key-value format.
For example, if you wanted to store everyone's name and age, you could do this.
But that sounds so simple that it's not really practical, right?
So you use it for a sub-use and that's it.
However, there is one database that has a little more specialized functionality, and it's called Redis.
With it, you can store data in a key-value format just like you would with any other database.
However, it uses a lot of data.
The reason is that it doesn't store the data on the hard disk, it stores it primarily in RAM.
That's because RAM is tens or hundreds of times faster than hard.
So, how we utilize Redis is we have a main DB, and then we have data that people use frequently.
And then you'll have additional copies of those in Redis.
Then, when you need that data, you pull it out of the main and show it instead of here.
That way, we can have a really fast service.
So, there are cases where you can use it as a sub-DB for caching, or as a legal zone, or something like that.
But nowadays, there are upgraded versions of Redis where you can do everything with Redis, but I don't think anybody uses them.
Now, if you're like me and you want to store your data in tables as well, you can use a relational database, which has a history and a tradition.
Databases can store data by first creating a table, and then writing a name on top of it, like, what data you want to store, and then for each row, you store data like this.
Now, I guess you could say that Excel is a relational database, but if you want to store large amounts of data, you'll often use a DBMS like Oracle, MySQL, PostgreSQL, etc.
And since E-TV is generally available in various places, if you look at things like database share, the top ones are mostly relational DBs, and if you want to store data, you need to use a syntax called SQL.
SQL is so easy that a three-year-old can do it.
But one of the things that relational DBs are obsessed with is normalization.
It hates duplicate data so much that when it sees it, it splits it into different tables.
This is called normalization in the jargon, and it can make things like the syntax for getting data in and out of it complicated or long later on.
But basically, it's transactional, so when you're implementing something important like money transactions, you can do it safely, and data accuracy is very important, so that's why relational DBs are typically used.
Many people assume that relational databases are good at representing relationships because of the name, but the term "relation" comes from the math term "relation" when you learn about matrices.
While it is indeed possible to represent data relationships, it is a bit cumbersome to store the relationships themselves.
So when we want to store relationships in a DB, we use a brex database.
The most famous of these is called Neopol, where the DBMS creates something called a node, and you can store data inside the node.
We can keep a record of how the nodes are related to each other, and we use a graph query language to get that data in and out.
And then we can express things like direction, which is interesting.
Okay, so, what do we use the DB for?
Well, you use it when you want to store things like the direction of relationships between things.
Well, like airplane routes, or friendships on social media, or who you gave the coronavirus to, or things like that, and it's really easy for big companies to spread their databases out like this because they're built with the recommendation space in mind.
So there's a lot of data inputs and outputs, and that's the main use case for these services.
Okay, but of course, there are downsides to having them distributed.
Well, things like accuracy between DBs can decrease.
Well, if these things aren't important, it doesn't matter at all if you just decentralize it.
Now, I want to store my data in a relational DB value table format.
Now, if I want to be a little bit more flexible, I can use a column family database.
Now, some examples are Cassandra, Google's BigTable, and things like that.
Now, they store data exactly the same way, by creating a table, creating a row, and then creating any number of columns in there to fill in the data.
It's just like a table.
Now, the thing is, if you want to output data to a DB, you have to use their own language, not SQL.
In Cassandra's case, it's CQL or something like that.
Okay, and, you know, they don't do normalization.
They don't do deduplication and stuff like that.
So it's a much easier data input/output syntax now, and it's also very good at distributed processing, so if you need to handle a lot of input/output, you can buy a DVD like this.
Of course, I said there are downsides to distributed processing.
You can see that.
And sometimes when you're storing data, there are features that make it really easy to do things like timekeeping, and there are databases for storing and analyzing time series data, and there are databases for storing indexes for searching.
Tools for searching data, such as Elasticsearch and Amazon's Cloud Search, can generally be used as databases, but they're actually primarily used for storing indexes.
An index is an indexed table of contents that helps you find data quickly.
It takes your data, creates an index, and stores it for you.
When a search request comes in, the index can be used to easily retrieve material, and additional services include real-time search term suggestions and typo correction.
You'll often use these tools when building a site where search is important, and you can typically choose to use either a relational DB or a document DB.
If you're more concerned with input and output than the accuracy of your data, you'll want to use a document DB.