웹사이트 검색

SQLite vs MySQL vs PostgreSQL: 관계형 데이터베이스 관리 시스템 비교


소개

행과 열의 테이블로 데이터를 구성하는 관계형 데이터 모델은 데이터베이스 관리 도구에서 우세합니다. 오늘날 전 세계적으로 데이터를 저장하고 관리하는 데 계속 지배적인 역할을 하는 것을 포함하여 다른 데이터 모델이 있습니다.

이 기사에서는 가장 널리 구현된 세 가지 오픈 소스 RDBMS인 PostgreSQL을 비교하고 대조합니다. 구체적으로 각 RDBMS가 사용하는 데이터 유형, 장단점, 최적의 상황을 탐색합니다.

데이터베이스 관리 시스템에 대한 정보

데이터베이스는 정보 또는 데이터의 논리적으로 모델링된 클러스터입니다. 반면 데이터베이스 관리 시스템(DBMS)은 데이터베이스와 상호 작용하는 컴퓨터 프로그램입니다. DBMS를 사용하면 데이터베이스에 대한 액세스를 제어하고, 데이터를 쓰고, 쿼리를 실행하고, 데이터베이스 관리와 관련된 기타 작업을 수행할 수 있습니다.

데이터베이스 관리 시스템은 종종 "데이터베이스\라고 부르지만 두 용어는 서로 바꿔 사용할 수 없습니다. 데이터베이스는 컴퓨터에 저장된 데이터뿐만 아니라 모든 데이터 모음이 될 수 있습니다. 반대로 DBMS는 특히 다음을 허용하는 소프트웨어를 나타냅니다. 데이터베이스와 상호 작용할 수 있습니다.

모든 데이터베이스 관리 시스템에는 데이터 저장 및 액세스 방법을 구조화하는 기본 모델이 있습니다. 관계형 데이터베이스 관리 시스템은 관계형 데이터 모델을 사용하는 DBMS입니다. 이 관계형 모델에서 데이터는 테이블로 구성됩니다. RDBMS의 맥락에서 테이블은 보다 공식적으로 관계라고 합니다. 관계는 테이블의 행인 튜플 집합이며 각 튜플은 테이블의 열인 속성 집합을 공유합니다.

대부분의 관계형 데이터베이스는 구조화된 쿼리 언어(SQL)를 사용하여 데이터를 관리하고 쿼리합니다. 그러나 많은 RDBMS는 특정 제한이나 확장이 있을 수 있는 고유한 SQL 방언을 사용합니다. 이러한 확장에는 일반적으로 사용자가 표준 SQL에서 수행할 수 있는 것보다 더 복잡한 작업을 수행할 수 있는 추가 기능이 포함되어 있습니다.

참고: "표준 SQL\이라는 용어는 이 가이드 전체에서 여러 번 나옵니다. SQL 표준은 IEC(International Electrotechnical Commission)에서 공동으로 관리합니다. 이 기사에서 "표준 SQL\ 또는 "SQL 표준\을 언급할 때마다 이러한 기관에서 게시한 SQL 표준의 현재 버전으로.

전체 SQL 표준은 규모가 크고 복잡하다는 점에 유의해야 합니다. 전체 코어 SQL:2011 준수에는 179개의 기능이 필요합니다. 이로 인해 대부분의 RDBMS는 전체 표준을 지원하지 않지만 일부는 다른 것보다 완전한 준수에 더 가깝습니다.

데이터 유형 및 제약

각 열에는 해당 열에 허용되는 항목 종류를 나타내는 데이터 유형이 할당됩니다. 서로 다른 RDBMS는 항상 직접 교환할 수 있는 것은 아닌 서로 다른 데이터 유형을 구현합니다. 일부 일반적인 데이터 유형에는 날짜, 문자열, 정수 및 부울이 포함됩니다.

데이터베이스에 정수를 저장하는 것은 테이블에 숫자를 넣는 것보다 미묘한 차이가 있습니다. 숫자 데이터 유형은 양수와 음수를 모두 나타낼 수 있음을 의미하는 signed이거나 양수만 나타낼 수 있음을 의미하는 unsigned일 수 있습니다. 예를 들어 MySQL의 tinyint 데이터 유형은 8비트의 데이터를 보유할 수 있으며 이는 256개의 가능한 값과 동일합니다. 이 데이터 유형의 부호 있는 범위는 -128에서 127까지이고 부호 없는 범위는 0에서 255까지입니다.

데이터베이스에 허용되는 데이터를 제어할 수 있다는 것은 중요합니다. 경우에 따라 데이터베이스 관리자는 테이블에 입력할 수 있는 값을 제한하기 위해 테이블에 제약을 부과합니다. 제약 조건은 일반적으로 하나의 특정 열에 적용되지만 일부 제약 조건은 전체 테이블에도 적용될 수 있습니다. 다음은 SQL에서 일반적으로 사용되는 몇 가지 제약 조건입니다.

  • UNIQUE: 열에 이 제약 조건을 적용하면 해당 열의 두 항목이 동일하지 않습니다.
  • NOT NULL: 이 제약 조건은 열에 NULL 항목이 없도록 합니다.
  • PRIMARY KEY: UNIQUENOT NULL의 조합인 PRIMARY KEY 제약 조건은 열에 NULL이 있고 모든 항목이 고유합니다.
  • FOREIGN KEY: FOREIGN KEY는 다른 테이블의 PRIMARY KEY를 참조하는 한 테이블의 열입니다. 이 제약 조건은 두 테이블을 함께 연결하는 데 사용됩니다. 쓰기 프로세스가 성공하려면 FOREIGN KEY 열에 대한 항목이 상위 PRIMARY KEY 열에 이미 존재해야 합니다.
  • CHECK: 이 제약 조건은 열에 입력할 수 있는 값의 범위를 제한합니다. 예를 들어 응용 프로그램이 알래스카 거주자만을 대상으로 하는 경우 우편 번호 열에 CHECK 제약 조건을 추가하여 99501에서 99950 사이의 항목만 허용할 수 있습니다.

데이터베이스 관리 시스템에 대해 자세히 알아보려면 NoSQL 데이터베이스 관리 시스템 및 모델 비교에 대한 기사를 확인하십시오.

이제 일반적으로 관계형 데이터베이스 관리 시스템을 다루었으므로 이 기사에서 다룰 세 가지 오픈 소스 관계형 데이터베이스 중 첫 번째인 SQLite로 이동하겠습니다.

SQLite

SQLite는 메모리가 부족한 환경에서도 이식성, 안정성 및 강력한 성능으로 잘 알려진 독립형 파일 기반 완전 오픈 소스 RDBMS입니다. 트랜잭션은 시스템이 충돌하거나 정전이 발생한 경우에도 ACID를 준수합니다.

SQLite 프로젝트의 웹 사이트에서는 이를 "서버리스\ 데이터베이스라고 설명합니다. 대부분의 관계형 데이터베이스 엔진은 프로그램이 요청을 릴레이하는 프로세스 간 통신을 통해 호스트 서버와 통신하는 서버 프로세스로 구현됩니다. 반대로 SQLite는 데이터베이스에 액세스하는 모든 프로세스를 허용합니다. 데이터베이스 디스크 파일을 직접 읽고 쓸 수 있습니다. 이것은 서버 프로세스를 구성할 필요가 없기 때문에 SQLite의 설정 프로세스를 단순화합니다. 마찬가지로 SQLite 데이터베이스를 사용할 프로그램에는 구성이 필요하지 않습니다. 디스크.

SQLite는 무료 오픈 소스 소프트웨어이며 사용하는 데 특별한 라이선스가 필요하지 않습니다. 그러나 이 프로젝트는 압축 및 암호화에 도움이 되는 여러 가지 확장 기능(각각 일회성 요금)을 제공합니다. 또한 이 프로젝트는 각각 연간 요금으로 다양한 상업적 지원 패키지를 제공합니다.

SQLite의 지원되는 데이터 유형

SQLite는 다음 스토리지 클래스로 구성된 다양한 데이터 유형을 허용합니다.

Data Type Explanation
null Includes any NULL values.
integer Signed integers, stored in 1, 2, 3, 4, 6, or 8 bytes depending on the magnitude of the value.
real Real numbers, or floating point values, stored as 8-byte floating point numbers.
text Text strings stored using the database encoding, which can either be UTF-8, UTF-16BE or UTF-16LE.
blob Any blob of data, with every blob stored exactly as it was input.

SQLite의 맥락에서 "스토리지 클래스\와 "데이터 유형\이라는 용어는 상호 교환 가능한 것으로 간주됩니다. SQLite의 데이터 유형 및 SQLite 유형 선호도에 대해 자세히 알아보려면 해당 주제에 대한 SQLite의 공식 문서를 확인하세요.

SQLite의 장점

  • 작은 공간: 이름에서 알 수 있듯이 SQLite 라이브러리는 매우 가볍습니다. 사용하는 공간은 설치된 시스템에 따라 다르지만 600KiB 미만의 공간을 차지할 수 있습니다. 또한 완전히 독립적이므로 SQLite가 작동하기 위해 시스템에 설치해야 하는 외부 종속성이 없습니다.
  • 사용자 친화적: SQLite는 때때로 즉시 사용할 수 있는 \제로 구성\ 데이터베이스로 설명됩니다. SQLite는 서버 프로세스로 실행되지 않으므로 중지하거나 시작할 필요가 없습니다. 또는 다시 시작되며 관리해야 하는 구성 파일이 함께 제공되지 않습니다. 이러한 기능은 SQLite 설치에서 애플리케이션과 통합까지의 경로를 간소화하는 데 도움이 됩니다.
  • 휴대성: 일반적으로 데이터를 개별 파일의 대용량 배치로 저장하는 다른 데이터베이스 관리 시스템과 달리 전체 SQLite 데이터베이스는 단일 파일에 저장됩니다. 이 파일은 디렉터리 계층의 어느 위치에나 있을 수 있으며 이동식 미디어 또는 파일 전송 프로토콜을 통해 공유할 수 있습니다.

SQLite의 단점

  • 제한된 동시성: 여러 프로세스가 동시에 SQLite 데이터베이스에 액세스하고 쿼리할 수 있지만 주어진 시간에 하나의 프로세스만 데이터베이스를 변경할 수 있습니다. 즉, SQLite는 대부분의 다른 임베디드 데이터베이스 관리 시스템보다 더 큰 동시성을 지원하지만 MySQL 또는 PostgreSQL과 같은 클라이언트/서버 RDBMS만큼 지원할 수 없습니다.
  • 사용자 관리 없음: 데이터베이스 시스템은 종종 사용자를 지원하거나 데이터베이스 및 테이블에 대한 사전 정의된 액세스 권한이 있는 관리 연결을 제공합니다. SQLite는 일반 디스크 파일을 직접 읽고 쓰기 때문에 적용 가능한 유일한 액세스 권한은 기본 운영 체제의 일반적인 액세스 권한입니다. 이로 인해 SQLite는 특별한 액세스 권한을 가진 여러 사용자가 필요한 애플리케이션에 적합하지 않습니다.
  • 보안: 서버를 사용하는 데이터베이스 엔진은 경우에 따라 SQLite와 같은 서버리스 데이터베이스보다 클라이언트 애플리케이션의 버그로부터 더 나은 보호를 제공할 수 있습니다. 예를 들어 클라이언트의 스트레이 포인터는 서버의 메모리를 손상시킬 수 없습니다. 또한 서버는 단일 영구 프로세스이기 때문에 클라이언트-서버 데이터베이스는 서버리스 데이터베이스보다 더 정밀하게 데이터 액세스를 제어할 수 있습니다. 이렇게 하면 더 세분화된 잠금과 더 나은 동시성이 가능합니다.

SQLite를 사용하는 경우

  • 임베디드 애플리케이션: SQLite는 이식성이 필요하고 향후 확장이 필요하지 않은 애플리케이션을 위한 탁월한 데이터베이스 선택입니다. 예를 들면 단일 사용자 로컬 애플리케이션, 모바일 애플리케이션 또는 게임이 있습니다.
  • 디스크 액세스 교체: 애플리케이션이 파일을 디스크에서 직접 읽고 써야 하는 경우 SQLite를 사용하면 SQL 사용에 따른 추가 기능과 단순성을 얻을 수 있습니다.
  • 테스트: 많은 애플리케이션의 경우 추가 서버 프로세스를 사용하는 DBMS로 기능을 테스트하는 것은 과도할 수 있습니다. SQLite에는 실제 데이터베이스 작업의 오버헤드 없이 빠르게 테스트를 실행하는 데 사용할 수 있는 메모리 내 모드가 있어 테스트에 적합합니다.

SQLite를 사용하지 않는 경우

  • 많은 데이터 작업: SQLite는 디스크 드라이브와 파일 시스템이 데이터베이스의 크기 요구 사항도 지원하는 한 최대 140TB 크기의 데이터베이스를 기술적으로 지원할 수 있습니다. 그러나 SQLite 웹사이트에서는 1TB에 가까운 모든 데이터베이스를 중앙 집중식 클라이언트-서버 데이터베이스에 보관할 것을 권장합니다. 그 크기 이상의 SQLite 데이터베이스는 관리하기 어렵기 때문입니다.
  • 높은 쓰기 볼륨: SQLite는 주어진 시간에 하나의 쓰기 작업만 수행하도록 허용하므로 처리량이 크게 제한됩니다. 응용 프로그램에 많은 쓰기 작업이나 여러 동시 작성기가 필요한 경우 SQLite가 적합하지 않을 수 있습니다.
  • 네트워크 액세스 필요: SQLite는 서버리스 데이터베이스이므로 데이터에 대한 직접적인 네트워크 액세스를 제공하지 않습니다. 이 액세스는 애플리케이션에 내장되어 있습니다. SQLite의 데이터가 애플리케이션과 별도의 시스템에 있는 경우 네트워크를 통해 고대역폭 엔진-디스크 링크가 필요합니다. 이것은 비용이 많이 들고 비효율적인 솔루션이며 이러한 경우 클라이언트-서버 DBMS가 더 나은 선택일 수 있습니다.

MySQL

개발자 커뮤니티에 따르면 온라인에는 MySQL 관련 리소스가 풍부합니다.

MySQL은 표준 SQL을 완전히 준수하는 대신 속도와 안정성을 위해 설계되었습니다. MySQL 개발자는 계속해서 표준 SQL을 준수하기 위해 노력하지만 여전히 다른 SQL 구현보다 뒤떨어져 있습니다. 그러나 규정 준수에 더 가까워지는 다양한 SQL 모드 및 확장 기능이 함께 제공됩니다.

SQLite를 사용하는 애플리케이션과 달리 MySQL 데이터베이스를 사용하는 애플리케이션은 별도의 데몬 프로세스를 통해 액세스합니다. 서버 프로세스는 데이터베이스와 다른 응용 프로그램 사이에 있기 때문에 데이터베이스에 액세스할 수 있는 사람을 더 잘 제어할 수 있습니다.

MySQL은 기능을 확장하고 더 쉽게 작업할 수 있도록 도와주는 풍부한 타사 애플리케이션, 도구 및 통합 라이브러리에 영감을 주었습니다. 보다 널리 사용되는 이러한 타사 도구 중 일부는 HeidiSQL입니다.

MySQL의 지원되는 데이터 유형

MySQL의 데이터 유형은 숫자 유형, 날짜 및 시간 유형, 문자열 유형의 세 가지 광범위한 범주로 구성할 수 있습니다.

숫자 유형:

Data Type Explanation
tinyint A very small integer. The signed range for this numeric data type is -128 to 127, while the unsigned range is 0 to 255.
smallint A small integer. The signed range for this numeric type is -32768 to 32767, while the unsigned range is 0 to 65535.
mediumint A medium-sized integer. The signed range for this numeric data type is -8388608 to 8388607, while the unsigned range is 0 to 16777215.
int or integer A normal-sized integer. The signed range for this numeric data type is -2147483648 to 2147483647, while the unsigned range is 0 to 4294967295.
bigint A large integer. The signed range for this numeric data type is -9223372036854775808 to 9223372036854775807, while the unsigned range is 0 to 18446744073709551615.
float A small (single-precision) floating-point number.
double, double precision, or real A normal sized (double-precision) floating-point number.
dec, decimal, fixed, or numeric A packed fixed-point number. The display length of entries for this data type is defined when the column is created, and every entry adheres to that length.
bool or boolean A Boolean is a data type that only has two possible values, usually either true or false.
bit A bit value type for which you can specify the number of bits per value, from 1 to 64.

날짜 및 시간 유형:

Data Type Explanation
date A date, represented as YYYY-MM-DD.
datetime A timestamp showing the date and time, displayed as YYYY-MM-DD HH:MM:SS.
timestamp A timestamp indicating the amount of time since the Unix epoch (00:00:00 on January 1, 1970).
time A time of day, displayed as HH:MM:SS.
year A year expressed in either a 2 or 4 digit format, with 4 digits being the default.

문자열 유형:

Data Type Explanation
char A fixed-length string; entries of this type are padded on the right with spaces to meet the specified length when stored.
varchar A string of variable length.
binary Similar to the char type, but a binary byte string of a specified length rather than a nonbinary character string.
varbinary Similar to the varchar type, but a binary byte string of a variable length rather than a nonbinary character string.
blob A binary string with a maximum length of 65535 (2^16 - 1) bytes of data.
tinyblob A blob column with a maximum length of 255 (2^8 - 1) bytes of data.
mediumblob A blob column with a maximum length of 16777215 (2^24 - 1) bytes of data.
longblob A blob column with a maximum length of 4294967295 (2^32 - 1) bytes of data.
text A string with a maximum length of 65535 (2^16 - 1) characters.
tinytext A text column with a maximum length of 255 (2^8 - 1) characters.
mediumtext A text column with a maximum length of 16777215 (2^24 - 1) characters.
longtext A text column with a maximum length of 4294967295 (2^32 - 1) characters.
enum An enumeration, which is a string object that takes a single value from a list of values that are declared when the table is created.
set Similar to an enumeration, a string object that can have zero or more values, each of which must be chosen from a list of allowed values that are specified when the table is created.

MySQL의 장점

  • 인기 및 사용 용이성: 세계에서 가장 인기 있는 데이터베이스 시스템 중 하나로서 MySQL 작업 경험이 있는 데이터베이스 관리자가 부족하지 않습니다. 마찬가지로 MySQL 데이터베이스를 설치하고 관리하는 방법에 대한 인쇄물 및 온라인 문서가 많이 있습니다. 여기에는 데이터베이스 시작 프로세스를 단순화하는 것을 목표로 하는 phpMyAdmin과 같은 여러 타사 도구가 포함됩니다.
  • 보안: MySQL은 설치 암호 보안 수준을 설정하고, 루트 사용자의 암호를 정의하고, 익명 계정을 제거하고, 기본적으로 테스트 데이터베이스를 제거하여 데이터베이스의 보안을 향상시키는 데 도움이 되는 스크립트와 함께 설치됩니다. , 모든 사용자가 액세스할 수 있습니다. 또한 SQLite와 달리 MySQL은 사용자 관리를 지원하며 사용자별로 액세스 권한을 부여할 수 있습니다.
  • 속도: SQL의 특정 기능을 구현하지 않기로 선택함으로써 MySQL 개발자는 속도를 우선시할 수 있었습니다. 보다 최근의 벤치마크 테스트에서 PostgreSQL과 같은 다른 RDBMS가 속도 면에서 MySQL과 같거나 적어도 비슷할 수 있음을 보여주지만, MySQL은 여전히 매우 빠른 데이터베이스 솔루션이라는 명성을 유지하고 있습니다.
  • 복제: MySQL은 다양한 유형의 데이터베이스 수평 확장을 지원합니다.

MySQL의 단점

  • 알려진 제한 사항: MySQL은 완전한 SQL 준수보다는 속도와 사용 편의성을 위해 설계되었기 때문에 특정 기능 제한이 있습니다. 예를 들어 FULL JOIN 절에 대한 지원이 부족합니다.
  • 라이선스 및 독점 기능: MySQL은 이중 라이센스 소프트웨어이며, GPLv2에 따라 라이센스가 부여된 무료 오픈 소스 커뮤니티 에디션과 독점 라이센스로 출시된 여러 유료 상업용 에디션이 있습니다. 이로 인해 일부 기능과 플러그인은 전용 에디션에서만 사용할 수 있습니다.
  • 개발 속도 저하: MySQL 프로젝트가 2008년 Sun Microsystems에 인수되고 이후 2009년 Oracle Corporation에 인수된 이후 DBMS 개발 프로세스가 상당히 느려졌다는 사용자들의 불만이 있었습니다. 대행사는 문제에 신속하게 대응하고 변경 사항을 구현합니다.

MySQL을 사용하는 경우

  • 분산 작업: MySQL의 복제 지원은 기본-기본 아키텍처와 같은 분산 데이터베이스 설정에 탁월한 선택입니다.
  • 웹사이트 및 웹 애플리케이션: MySQL은 인터넷에서 많은 웹사이트와 애플리케이션을 지원합니다. 이것은 대부분 MySQL 데이터베이스를 설치하고 설정하는 것이 얼마나 쉬운지 뿐만 아니라 장기적으로 전반적인 속도와 확장성 덕분입니다.
  • 향후 성장 예상: MySQL의 복제 지원은 수평적 확장을 촉진하는 데 도움이 될 수 있습니다. 또한 또 다른 수평적 확장 프로세스인 자동 샤딩을 지원하는 MySQL 클러스터와 같은 상용 MySQL 제품으로 업그레이드하는 것은 비교적 간단한 프로세스입니다.

MySQL을 사용하지 말아야 할 때

  • SQL 준수가 필요합니다. MySQL은 전체 SQL 표준을 구현하려고 시도하지 않기 때문에 이 도구는 SQL과 완전히 호환되지 않습니다. 전체 또는 거의 완전한 SQL 규정 준수가 사용 사례에 필수인 경우 보다 완벽하게 규정을 준수하는 DBMS를 사용할 수 있습니다.
  • 동시성 및 대규모 데이터 볼륨: MySQL은 일반적으로 읽기가 많은 작업에서 잘 수행되지만 동시 읽기-쓰기는 문제가 될 수 있습니다. 애플리케이션에 한 번에 데이터를 쓰는 많은 사용자가 있는 경우 PostgreSQL과 같은 다른 RDBMS가 더 나은 데이터베이스 선택일 수 있습니다.

PostgreSQL

Postgres라고도 알려진 PostgreSQL은 "세계에서 가장 발전된 오픈 소스 관계형 데이터베이스\라고 자부합니다. 확장성이 뛰어나고 표준을 준수한다는 목표로 만들어졌습니다.PostgreSQL은 개체 관계형 데이터베이스입니다. 즉, 기본적으로 관계형 데이터베이스이지만 테이블 상속 및 함수 오버로딩과 같은 기능도 포함합니다. >개체 데이터베이스.

Postgres는 동시성이라고 하는 특성으로 동시에 여러 작업을 효율적으로 처리할 수 있습니다. ACID 준수라고도 하는 트랜잭션의 원자성, 일관성, 격리 및 내구성을 보장하는 다중 버전 동시성 제어(MVCC) 구현 덕분에 읽기 잠금 없이 이를 달성합니다.

PostgreSQL은 MySQL만큼 널리 사용되지는 않지만 Postbird를 포함하여 PostgreSQL 작업을 단순화하도록 설계된 많은 타사 도구와 라이브러리가 여전히 있습니다.

PostgreSQL의 지원되는 데이터 유형

PostgreSQL은 MySQL과 같은 숫자, 문자열, 날짜 및 시간 데이터 유형을 지원합니다. 또한 기하학적 모양, 네트워크 주소, 비트 문자열, 텍스트 검색 및 JSON 항목에 대한 데이터 유형과 여러 가지 고유한 데이터 유형을 지원합니다.

숫자 유형:

Data Type Explanation
bigint A signed 8 byte integer.
bigserial An auto-incrementing 8 byte integer.
double precision An 8 byte double precision floating-point number.
integer A signed 4 byte integer.
numeric or decimal A number of selectable precision, recommended for use in cases where exactness is crucial, such as monetary amounts.
real A 4 byte single precision floating-point number.
smallint A signed 2 byte integer.
smallserial An auto-incrementing 2 byte integer.
serial An auto-incrementing 4 byte integer.

문자 유형:

Data Type Explanation
character A character string with a specified fixed length.
character varying or varchar A character string with a variable but limited length.
text A character string of a variable, unlimited length.

날짜 및 시간 유형:

Data Type Explanation
date A calendar date consisting of the day, month, and year.
interval A time span.
time or time without time zone A time of day, not including the time zone.
time with time zone A time of day, including the time zone.
timestamp or timestamp without time zone A date and time, not including the time zone.
timestamp with time zone A date and time, including the time zone.

기하학 유형:

Data Type Explanation
box A rectangular box on a plane.
circle A circle on a plane.
line An infinite line on a plane.
lseg A line segment on a plane.
path A geometric path on a plane.
point A geometric point on a plane.
polygon A closed geometric path on a plane.

네트워크 주소 유형:

Data Type Explanation
cidr An IPv4 or IPv6 network address.
inet An IPv4 or IPv6 host address.
macaddr A Media Access Control (MAC) address.

비트 문자열 유형:

Data Type Explanation
bit A fixed-length bit string.
bit varying A variable-length bit string.

텍스트 검색 유형:

Data Type Explanation
tsquery A text search query.
tsvector A text search document.

JSON 유형:

Data Type Explanation
json Textual JSON data.
jsonb Decomposed binary JSON data.

기타 데이터 유형:

Data Type Explanation
boolean A logical Boolean, representing either true or false.
bytea Short for “byte array”, this type is used for binary data.
money An amount of currency.
pg_lsn A PostgreSQL Log Sequence Number.
txid_snapshot A user-level transaction ID snapshot.
uuid A universally unique identifier.
xml XML data.

PostgreSQL의 장점

  • SQL 준수: SQLite 또는 MySQL보다 더 많은 PostgreSQL은 SQL 표준을 밀접하게 준수하는 것을 목표로 합니다. 공식 PostgreSQL 문서에 따르면 PostgreSQL은 전체 코어 SQL:2011 준수에 필요한 179개 기능 중 160개를 지원하며, 선택 기능의 긴 목록도 제공합니다.
  • 오픈 소스 및 커뮤니티 기반: 완전한 오픈 소스 프로젝트인 PostgreSQL의 소스 코드는 헌신적인 대규모 커뮤니티에서 개발되었습니다. 마찬가지로 Postgres 커뮤니티는 PostgreSQL wiki 및 다양한 온라인 포럼을 포함하여 DBMS 작업 방법을 설명하는 수많은 온라인 리소스를 유지하고 기여합니다.
  • 확장성: 사용자는 동적 로딩을 통해 PostgreSQL을 프로그래밍 방식으로 즉시 확장할 수 있습니다. 공유 라이브러리와 같은 개체 코드 파일을 지정할 수 있으며 PostgreSQL이 필요에 따라 로드합니다.

PostgreSQL의 단점

  • 메모리 성능: 모든 새 클라이언트 연결에 대해 PostgreSQL은 새 프로세스를 포크합니다. 각각의 새 프로세스에는 약 10MB의 메모리가 할당되며, 이는 연결이 많은 데이터베이스에 빠르게 추가될 수 있습니다. 따라서 간단한 읽기 작업의 경우 PostgreSQL은 일반적으로 MySQL과 같은 다른 RDBMS보다 성능이 떨어집니다.
  • 인기: PostgreSQL은 최근 몇 년 동안 더 널리 사용되었지만 역사적으로 인기 측면에서 MySQL에 뒤쳐졌습니다. 이것의 한 가지 결과는 PostgreSQL 데이터베이스를 관리하는 데 도움이 될 수 있는 타사 도구가 여전히 적다는 것입니다. 마찬가지로 Postgres 데이터베이스 관리 경험이 있는 데이터베이스 관리자는 MySQL 경험이 있는 관리자보다 많지 않습니다.

PostgreSQL을 사용하는 경우

  • 데이터 무결성이 중요합니다. PostgreSQL은 2001년부터 완전히 ACID를 준수하고 데이터 일관성을 유지하기 위해 다중 버전 통화 제어를 구현하므로 데이터 무결성이 중요한 경우 강력한 RDBMS 선택이 됩니다.
  • 다른 도구와의 통합: PostgreSQL은 다양한 프로그래밍 언어 및 플랫폼과 호환됩니다. 즉, 데이터베이스를 다른 운영 체제로 마이그레이션하거나 특정 도구와 통합해야 하는 경우 다른 DBMS보다 PostgreSQL 데이터베이스를 사용하는 것이 더 쉬울 것입니다.
  • 복잡한 작업: Postgres는 더 빠른 속도로 쿼리에 응답하기 위해 여러 CPU를 활용할 수 있는 쿼리 계획을 지원합니다. 이것은 다중 동시 작성자에 대한 강력한 지원과 결합되어 데이터 웨어하우징 및 온라인 트랜잭션 처리와 같은 복잡한 작업에 탁월한 선택입니다.

PostgreSQL을 사용하지 않는 경우

  • 속도는 필수입니다: PostgreSQL은 속도를 희생하면서 확장성과 호환성을 염두에 두고 설계되었습니다. 프로젝트에 가능한 가장 빠른 읽기 작업이 필요한 경우 PostgreSQL이 DBMS의 최선의 선택이 아닐 수 있습니다.
  • 간단한 설정: Postgres는 방대한 기능 세트와 표준 SQL에 대한 강력한 준수 때문에 단순한 데이터베이스 설정에 과도할 수 있습니다. 속도가 필요한 읽기 중심 작업의 경우 일반적으로 MySQL이 더 실용적인 선택입니다.
  • 복잡한 복제: PostgreSQL은 강력한 복제 지원을 제공하지만 여전히 비교적 새로운 기능입니다. 기본-기본 아키텍처와 같은 일부 구성은 확장을 통해서만 가능합니다. 복제는 MySQL의 보다 성숙한 기능이며 많은 사용자는 특히 필요한 데이터베이스 및 시스템 관리 경험이 부족한 사용자를 위해 MySQL의 복제를 구현하기 더 쉽다고 생각합니다.

결론

오늘날 SQLite, MySQL 및 PostgreSQL은 세계에서 가장 널리 사용되는 세 가지 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 각각 고유한 기능과 제한 사항이 있으며 특정 시나리오에서 탁월합니다. RDBMS를 결정할 때 꽤 많은 변수가 작용하며 선택은 가장 빠른 것 또는 가장 많은 기능을 가진 것을 선택하는 것만큼 간단하지 않습니다. 다음에 관계형 데이터베이스 솔루션이 필요할 때 이러한 도구와 다른 도구를 깊이 있게 조사하여 필요에 가장 적합한 것을 찾으십시오.

SQL에 대해 자세히 알아보고 SQL을 사용하여 관계형 데이터베이스를 관리하는 방법을 알아보려면 NoSQL 데이터베이스 관리 시스템 비교를 참조하시기 바랍니다.

참조

  • DB 엔진 순위
  • SQLite 공식 문서
  • SQLite는 서버리스
  • SQLite의 적절한 사용
  • MySQL 공식 문서
  • MySQL과 Postgres 9.0 복제 비교
  • PostgreSQL 공식 문서
  • 드디어 PostgreSQL을 사용할 때가 되었습니까?