MySQL과 다른 데이터베이스의 단점
프로그래밍(또는 거의 모든 것)을 가르치는 모든 책은 그것이 왜 (C++, MySQL, 워터스키, 스카이다이빙, 치과 등) 세상에서 가장 위대한 것인지에 대한 많은 스필로 시작합니다.그래서 저는 MySQL O'Reilly 책을 펴서 서론을 읽고 전통적인 설교를 들었습니다.이 책이 언급한 주요 내용은 다음과 같습니다.
- MySQL은 Oracle을 가장 빠르고 확장성이 뛰어난 데이터베이스 소프트웨어로 꼽았습니다.
- 그것은 자유롭고 오픈 소스입니다.
꽤 설득력 있게 들리지만, 저는 모든 이야기에는 적어도 두 가지 측면이 있다는 것을 알고 있습니다.누군가가 누군가에게 MySQL 대신 Oracle을 사용하자고 제안하는 것을 보고 "도대체 왜 그렇게 하고 싶어?!"라고 생각하는 것을 보았을 때 저는 환멸을 느낄 필요가 있다는 것을 알았습니다. 단지 제가 읽은 몇 단락의 다른 정당한 이유가 없었기 때문입니다.이제 이야기의 다른 측면을 조사해 보겠습니다.
MySQL을 사용하지 않는 이유는 무엇입니까?
여기 제 머릿속에 떠오른 것들의 무작위 목록이 있습니다.CW이니 필요에 따라 자유롭게 추가하시면 됩니다.
- Oracle은 데이터베이스에 구축된 최고의 ERP를 제공합니다.만약 당신의 회사가 Sarbanes-Oxley 규제를 받는다면, 이것은 "중요한" 것 이상의 것입니다.
- SQL Server 라이센스는 Analysis Services, Integration Services 및 Reporting Services와 함께 제공됩니다.OLAP, ETL 또는 보고 기능을 사용하려면 SQL 서버 스택을 기반으로 구축된 우수한 애플리케이션을 사용해야 합니다.
- SQL Server에는 기본 .NET 데이터 유형(2008년)이 있습니다.지리 공간 데이터셋을 다루는 .NET 상점에 매우 적합합니다.
- MySQL은 확인 제약 조건을 지원하지 않습니다.
- 에는 SQL Server가 되어 있습니다.
over
절 - "각 그룹의 상위 n개 행" 문제를 처리할 때 도움이 됩니다.기본적으로 데이터 세트에 대해 분할된 집계 기능을 원하는 방식으로 수행할 수 있습니다. - SQL Server는 Kerberos 및 Windows 인증을 기본적으로 사용합니다. MySQL은 Active Directory에 연결되지 않습니다.
- 하위 쿼리에 대한 뛰어난 성능(거의 모든 데이터베이스의 하위 쿼리 성능이 MySQL보다 높음)
- 오라클, SQL 서버, PostgreSQL 및 기타 사용자는 보다 풍부한 조인 알고리즘 집합을 사용할 수 있습니다. 이는 특히 큰 테이블이 관련된 경우 조인을 더 빨리 수행할 수 있음을 의미합니다.
MySQL은 오라클을 가장 빠르고 확장성이 높은 데이터베이스 소프트웨어로 묶은 것으로 나타났습니다.
두 개의 데이터베이스 시스템에 대해 그렇게 말하는 것은 아마도 나머지를 읽지 않고 책을 버리기에 충분할 것입니다.데이터베이스 시스템은 몇 줄의 정보와 비교할 수 있는 물품이 아니며, 가까운 미래에는 그렇지 않을 것입니다.
그 진술이 명백히 거짓인 한 가지 이유는 MySQL이 사용 가능한 계획 선택권이 매우 제한적이기 때문입니다.예를 들어 MySQL은 유용한 성능 특성을 가진 두 가지 기본 알고리즘인 병합 조인 또는 해시 조인을 사용할 수 없습니다.대부분의 쿼리 워크로드는 여기까지입니다.병합 조인을 통해 몇 배 더 빠른 합리적인 쿼리를 표시하는 것은 사소한 일입니다.
MySQL 대 XYZ에 대한 비판과 그 반대도 많습니다.제 요점은 이것은 복잡한 문제이고, 그 책은 엄청나게 지나치게 단순화되어 있다는 것입니다.데이터베이스에 참여하는 경우에는 지식을 다양화하고 기본 지식을 이해하는 데 시간을 할애해야 합니다.
저의 개인적인 의견은 MySQL과 SQLite가 시작하기에 가장 좋지 않은 곳이라는 것입니다.Oracle(많은 사람들이 깨닫지 못하는 학습/평가를 위해 무료로 다운로드할 수 있음), PostgreSQL(BSD 라이센스) 또는 MS SQL과 같은 것을 선택합니다.불새SQL도 좋을 것 같습니다.몇 가지 시스템에 익숙해지면 MySQL이 제공하는 절충안이 자신에게 적합한지 여부에 대한 정보를 바탕으로 선택할 수 있습니다.
모두가 Oracle/MS를 고수해야 하는 주요 이유 중 하나를 놓치고 있는 것 같습니다. 이미 이러한 제품을 속속들이 알고 있는 DBA로 가득 차 있습니다.
- mysql의 기본 데이터 정렬은 대소문자를 구분하지 않습니다.이것은 그 자체로는 문제가 되지 않지만, 저는 이 이상한 디폴트가 전문가가 아닌 취미 개발자들을 대상으로 했다는 것을 보여주는 것이라고 생각합니다.이것은 큰 가정이지만, 저는 어떤 전문가라도 데이터베이스가 기본적으로 신원을 위해 문자열을 비교하기를 기대할 것이라고 생각합니다(즉, 이진 데이터 정렬 사용).
- 트랜잭션 중에 테이블을 조작하면 암시적 COMMIT가 발생합니다.언뜻 보기에는 슬퍼 보이지 않을 수도 있지만, 아래에서 작업할 수 없다는 것을 알게 될 것입니다.
ACID
테이블 변경/작성이 응용프로그램의 고유한 부분인 경우 조건을 지정합니다.
MySQL은 확실히 속도 면에서 Oracle에 필적하거나 이를 수 있습니다.저도 여러 번 해봤어요.네, 그래서 딱 맞는 레이스에 블랙홀, 병합, 이노브, 마이삼 등 다양한 테이블 타입을 사용해야 했습니다.그리고 모든 것이 제대로 작동하는 데 며칠이 걸렸습니다.Oracle DBA는 1~2시간 만에 작업을 완료했습니다.
MySQL은 98%의 사이트에서 사용할 수 있습니다. 아마도 그 이상일 것입니다.하지만 자신이 무엇을 하고 있는지 모른다면 많은 데이터 없이도 쉽게 실행할 수 있습니다.Oracle은 크롤링을 실현하기가 상당히 어렵지만 여전히 가능합니다.저는 수억 개의 레코드에서 데이터셋을 모두 사용하여 작업한 적이 있습니다.MySQL은 더 많은 주의를 기울여야 합니다.
어떤 데이터베이스도 무한정 확장할 수 없기 때문에 nosql "데이터베이스"가 인기를 끌고 있습니다.진짜 문제는 MySQL이 당신이 해야 할 일을 "충분히 잘하느냐"는 것입니다.가격은 확실히 맞습니다.PHP에 대해서도 마찬가지입니다.
페이스북은 왜 MySQL을 사용합니까?충분한 Oracle 라이센스를 구입하는 데 드는 비용을 상상할 수 있습니까?충분합니다.
미래는 태양(mysql 뒤에 있는 회사)이 불분명하고 제품을 지원할 회사가 있을지도 모릅니다.
MySQL은 데이터베이스 시스템에서 원하지 않는 모호성에 매우 내성이 있습니다.여기 몇 가지 즉석에서 예를 들어보겠습니다.
- 있듯이, 다른포스말이듯했가터,이▁stated▁as듯말▁another,
CHAR
그리고.VARCHAR
열은 대/소문자를 구분하지 않으며, 이미 상당히 잘못된 기호입니다. - 넌 할 수 있다.
INSERT
합니다. 기본값은 " " " 입니다." 입니다.NOT NULL
!java, 진짜! 대신 유형을 를 들어, MySQL은 데이터 유형을 기준으로 값을 선택합니다.0
숫자에 대하여 - 를 사용할 수 있습니다.
GROUP BY
집계 일부 열집사지 않하용에에 .GROUP BY
결과는 거의 입니다.결과는 거의 무작위입니다.제 경험상 여기에도 경고나 오류는 없습니다.
MySQL은 또한 견고한 것과는 거리가 멉니다.바로 이번 달에 DreamHost에서 사용하는 MySQL 버전(오래된 것은 인정되지만 "안정적인 릴리스")에서 데이터 손실을 초래하는 버그를 발견했습니다. (변수 길이 행이 있는 테이블을 만들 때 특정 조건)
저는 MySQL을 수년 동안 사용해 왔지만 데이터 손실이 큰 문제가 되는 심각한 용도로 사용할 것이라고는 꿈에도 생각하지 못했습니다.그러나 미션 크리티컬하지 않은 웹 사이트와 블로그에 적합합니다.
누군가가 누군가에게 MySQL 대신 오라클을 사용하자고 제안하는 것을 보고 "도대체 왜 그렇게 하고 싶어?"라고 생각했을 때 저는 환멸을 느낄 필요가 있다는 것을 알았습니다.!"
귀사가 지난 10년 동안 Oracle을 사용했거나 엔터프라이즈 사용을 '좋아야 함'과 오픈 소스를 '무료 쓰레기'로 동일시했기 때문입니다.그것이 바로 유일한 이유입니다.제가 아는 모든 사람들은 오라클과 함께 일했던 사람들은 그것을 싫어합니다.MySQL을 사용한 경험이 있는 모든 사람들은 MySQL을 좋아하지 않는다고 생각합니다. 적어도 거의 모든 면에서 MySQL이 오라클을 대체할 더 나은 솔루션이라고 생각합니다.
그러나 SQL RMDB는 매우 복잡하기 때문에 거의 모든 면에서 한 DB가 수행하는 것과 다른 DB가 수행하지 않는 것이 있습니다.불행히도, 사람들이 적절하게 구성된 서버를 사용하지 않고 통계를 인용하는 것은 데이터베이스를 비교하는 사실이기도 합니다.서버에 대해 두 개의 기본 구성이 있는 경우, 하나가 다른 구성보다 더 나을 수도 있지만, 일반적으로 비교가 가능한 수준입니다.이 거대한 응용 프로그램들은 수백만 개의 작은 스위치와 토글을 가지고 있다는 사실을 반영하지 않습니다. 특정한 것들의 속도를 높이고, 신뢰성을 높이며, 일반적으로 나쁜 과학을 망치는 데 사용할 수 있습니다.
MySQL은 매우 범용적인 데이터베이스 시스템인 경향이 있으므로 Oracle, SQL Server, Postgre를 사용하는 거의 모든 용도로 사용할 수 있습니다.SQL, DB2 등의 용도.
그러나 이러한 서로 다른 시스템은 서로 다른 강점을 가지고 있으며, PostgreSQL은 MySQL보다 훨씬 더 많은 기능을 가지고 있으며 MySQL이 고군분투하는 매우 구체적인 작업을 처리할 수 있습니다.SQL Server는 일반적으로 Microsoft 제품과 매우 쉽게 통합되는 반면 MySQL은 제품이 함께 작동하도록 하기 위해 추가 작업을 수행해야 합니다.Oracle은 단순한 데이터베이스가 아닙니다. 대규모의 확장 시스템을 다룰 때 Oracle은 한 지붕 아래에서 모든 것을 처리할 수 있는 장비를 갖추고 있는 반면 MySQL이 데이터베이스 시스템을 갖추도록 하려면 여러 개의 서로 다른 시스템을 함께 묶어야 합니다.
MySQL 사용 여부는 MySQL을 사용하는 것이 타당한지 여부에 따라 결정되어야 합니다.
고지 사항:저는 2001년부터 MySQL을 사용하고 있으며 여전히 MySQL을 사랑하고 있습니다. 하지만 여기 제 충실도에 대해 의심하게 만드는 몇 가지 이유가 있습니다.
제가 읽은 답변 중 일부에는 잘못된 주장이 있습니다(몇 년 전에 사실이었습니다).선택하기 전에 MySQL 문서와 최신 기능 목록을 확인하십시오.놀라실 수도 있습니다.
각 DB 서버에는 기능이 없습니다.특별히 필요하지 않은 경우 이는 실제 차단 문제가 아닙니다.
저에게 주요 문제는 다른 곳에 있습니다.
- 안정적인 릴리스에서 버그를 수정하고 게시하는 데 필요한 시간입니다.유감입니다. (어떤 벌레들에게는...몇 년이 걸립니다. (농담이 아닙니다!)
- 안정적인 릴리스의 빈도입니다.
하지만 올해부터 새로운 이슈는 다음과 같습니다.
- 지점 수 증가(퍼코나, 구글, 페이스북 등).
- Sun은 그의 전략에 대해 명확하지 않습니다.
- 많은 MySQL 직원들이 회사를 떠났습니다.
그것은 자유롭고 오픈 소스입니다.
맞습니다. 하지만 MySQL은 상업적으로 무료로 사용할 수 없는 경우가 많습니다. MySQL과 커넥터(다양한 언어의 공식 드라이버)는 GPL 라이센스를 받았습니다.
예를 들어 커넥터/를 사용하는 경우.MySQL에 연결하려면 NET 코드가 GPL과 호환되어야 합니다.하지만 이중 라이센스이므로 다른 라이센스로 엔터프라이즈 버전을 구입할 수 있습니다. 그리고 다른 라이센스로 커넥터에 라이센스를 부여할 수 있는 (무료 또는 매우 저렴한) 프로그램이 있다고 생각합니다.
MySQL을 사용하는 내가 아는 모든 사람들은 이것을 알지 못합니다 :-)
기본적으로 데이터베이스에는 여러 가지 선택사항이 있습니다.솔직히 오늘날의 세계에서 DB 선택은 몇 년 전보다 덜 중요합니다.여기 고려해야 할 몇 가지 문제가 있습니다.
SQL Server(및 SQL Server Express), Oracle, MySQL, SQLLite 등과 같이 널리 사용되는 현재 데이터베이스 시스템의 대부분은 비교적 표준을 준수하며 어느 정도 상호 호환성 있게 사용할 수 있습니다.일부는 서로 다른 틈새 시장에 서비스를 제공합니다.예를 들어 SQL Server, MySQL 및 Oracle은 모두 대규모 엔터프라이즈 애플리케이션에 적합합니다. SQLLite는 클라이언트에 배포되고 설치 공간이 작고 구성이 최소화된 로컬 데이터베이스가 필요한 애플리케이션에 매우 적합합니다.(제 생각에는 Oracle은 매우 고가이며, 오만하고 반응이 없는 회사의 지원을 받고 있습니다.그것은 어떤 프로젝트에서도 제 첫 번째 선택이 아닐 것입니다.고객이 요구하거나 필요로 하는 경우에만 사용할 것입니다.
최상위 개발자의 높은 비율이 Hibernate(Java)/와 같은 도구를 사용하고 있습니다.NHibernate().NET) 데이터 액세스 계층을 구축합니다.최대 절전 모드 변형은 개발자가 데이터베이스 모델이 아닌 개체 모델 개발부터 시작하도록 강하게 권장합니다.그러면 최대 절전 모드 응용 프로그램이 데이터 모델을 자동으로 생성하고 데이터 모델 업데이트도 처리합니다.최대 절전 모드 변형은 모든 주요 데이터베이스 공급업체에서 사용할 수 있습니다.데이터베이스 선택 항목을 변경하는 것은 구성에서 다른 데이터베이스 유형을 선택하는 것만큼 간편하고 번거롭지 않을 수 있습니다.참고로, Hibernate와 NHibernate는 데이터베이스 간 호환성이 있지만 가장 낮은 공통분모에서는 작동하지 않습니다.이러한 응용 프로그램의 데이터 액세스 코드는 종종 지정된 데이터베이스 엔진 내의 특수 기능을 활용하도록 설계됩니다.예를 들어, NHibernate는 SQL Server에서 매우 긴 문자열을 허용하는 Nvarchar(Max) 데이터 유형에 대한 액세스를 지원합니다.
대부분의 애플리케이션에서 데이터베이스 성능 문제는 읽기 및 쓰기 속도에서 직접 발생하지 않습니다.대부분의 문제는 애플리케이션이 자주 액세스하는 데이터의 캐싱을 관리하는 방식과 관련이 있습니다.예를 들어, 온라인 블로그 사이트에서는 블로그 게시물을 읽은 후 데이터베이스에서 반복적으로 가져오지 않도록 해당 게시물을 캐시하는 것이 좋습니다.데이터베이스 서버가 일부 캐싱을 제공하지만 이 캐싱 메커니즘은 거의 항상 데이터베이스 서버가 아닌 응용 프로그램 코드에 의해 처리됩니다.Microsoft의 ASP.NET 및 ASP.NET 위에 구축된 새로운 MVC 프레임워크와 마찬가지로 Hibernate/NHIbernate는 탁월한 캐싱 지원 기능을 내장하고 있습니다.
Enterprise 데이터베이스(SQL Server, Oracle, MySQL)는 복제, 클러스터링, 대규모 데이터셋 등과 같은 기능이 필요한 상황에 가장 적합합니다.
나는 MySQL 라이선스를 좋아하지 않습니다: Firebird와 Postgre.SQL이 더 낫습니다.
MySQL by Sun에는 실제 핫 백업이 포함되어 있지 않습니다.
당신은 또한 여기서 흥미로운 링크와 댓글을 볼 수 있습니다!
MySQL은 무료이지만 유지보수를 위해서는 전문가가 필요합니다.명령 프롬프트를 자연스럽게 사용하고 실험하는 것을 두려워하지 않는 사람.경우에 따라 MySQL 문제가 너무 복잡하여 문제를 해결할 수 있는 적절한 인력이 얼마든지 제공되지 않을 수 있습니다.
SQL Server의 가격은 중간 범위입니다.매일 17:00에 집에 가서 50페이지의 HOW-TO를 자연스럽게 꺼리는 "정상적인 사람"에 의해 유지될 수 있습니다. SQL Sever는 대부분의 경우 성능이 우수하지만 특정 시나리오에서는 고장이 발생할 수 있습니다.
Oracle은 가장 비싸고 높은 급여를 받는 운영자를 필요로 합니다.돈이 있다면 Oracle은 "안전한" 선택입니다. Oracle은 돈을 위해 하지 않을 것이 없기 때문입니다.
세 개의 제품, 세 개의 시장!
gotchas(예: 이것과 이것)를 나열하는 몇 페이지는 MySQL에서 가능한 한 멀리 떨어져 있고 싶게 만듭니다.Postgres와 MySQL을 비교해 보겠습니다.
다른 사람들이 언급한 오픈 소스 측면에 대해서는, MySQL은 오픈 소스이며, 당신의 애플리케이션도 마찬가지인 경우에만 무료입니다.그렇지 않다면 상업 면허증이 필요합니다.
나의 개인적인 이야기:
약 10k 행의 테이블에 새 인덱스를 추가합니다.
내 SQL 쪽은 약 30초입니다.
1초 정도 후에 도착합니다.
저는 MySQL과 몇 년 동안만 작업했고 SQL Server는 지난 1년 동안만 작업했습니다.저는 대부분의 경우 하나가 다른 하나보다 사용하기 쉽거나 어렵다고 생각하지 않습니다.하지만 저는 MSSQL이 MySQL이 가지고 있는 몇 가지 기능(예: 단일 INSERT 문에 여러 행을 삽입할 수 있음)을 가지고 있기를 바랍니다.
또한 RDBMS를 사용할 필요가 없다면 redis를 체크아웃하십시오.기본적으로 비동기 쓰기 처리를 통해 지속성을 갖는 memchached입니다.성능은 MySQL과 동일한 규모가 아닙니다.
글쎄요... MySQL은 RDBMS가 아니기 때문에 비교가 공정하지 않은 것 같습니다...
언급URL : https://stackoverflow.com/questions/1354451/disadvantages-of-mysql-versus-other-databases
'IT' 카테고리의 다른 글
Gitrebase 치명적:단일 수정본 필요함 (0) | 2023.06.27 |
---|---|
여러 행을 하나의 열로 쉼표로 구분할 수 있습니까? (0) | 2023.06.27 |
SQL Server 파일 이름 대 버전 (0) | 2023.06.27 |
SQL Server VARBINARY 열에 바이트[]를 삽입하는 방법 (0) | 2023.06.22 |
Firebase v3.0.1+에서 로그아웃을 구현하는 가장 좋은 방법은 무엇입니까?업데이트 후 Firebase.unauth가 제거되었습니다. (0) | 2023.06.22 |