MySQL보다 Oracle을 선택해야 하는 경우
저는 MySQL 팬입니다. 하지만 어떤 상황에서 MySQL보다 Oracle을 선택하는 것이 더 나은 방법인지 알고 싶습니다.당신이 ...라고 말하게 하는 지표가 무엇인지와 같은 것."이 프로젝트를 위해 Oracle이 필요합니다."
업데이트: 다른 SOer 동료가 지적했듯이 Oracle에 대한 답변을 제한하지 마십시오.당신이 더 나은 것을 알고 있다면, 그것도 지적해 주세요.
Mysql과 관련하여 저를 괴롭히는 특정한 것들이 있습니다.
제약 조건 및 트랜잭션 적용과 전체 텍스트 색인(InnoDb vs MyISAM) 중 하나를 선택해야 합니다.이것은 저에게 정말로 가장 큰 문제입니다. (제한과 트랜잭션을 시행하는 것이 dbs를 시원하게 만드는 것이지만, 당신도 전체 텍스트 검색이 필요합니다...)
- 클라이언트 코드에서 트랜잭션을 "시뮬레이션"하는 것은 쉽지 않습니다.
- 제약 조건을 적용하지 않으면 DB의 상태가 일관되지 않을 수 있습니다.
- 전체 텍스트 검색이 없으면 ORX LIKE %y%에 열광할 수 있습니다.
- CHECK CONSTARTION에 대한 RAISE ERROR로 BEFOR 업데이트 트리거를 생성해야 합니다.
- Mysql은 데이터가 너무 커지면 성능이 저하됩니다(즉, 매우 커짐).
- Mysql은 부실한 실행 계획을 만듭니다.
- Mysql은 3개 이상의 조인에 문제가 있습니다(여러 조인이라고 하는 것이 좋습니다).
Oracle은 이러한 모든 문제를 해결하는 솔루션으로, 전체 DBMS(트랜잭션, CHECK 제약 조건, 보기에 대한 많은 옵션, 전체 텍스트 검색 등)입니다.하지만 결국 그것은 돈의 문제입니다.
저도 오라클 사람이지만, 가끔은 포스트지에 대한 사용을 논쟁하기가 어렵습니다.SQL 또 MySQL입니다.
말해, RDBMS를입니다. RDBMS는 RDBMS를 사용합니다.
특집 기사로 요약하자면, 그것은 별개의 일이지만, 어떻게 그 회사들의 성공에 반대할 수 있습니까?사실, 그들은 이것을 달성하기 위해 많은 상자를 사용하지만, 여전히 훨씬 저렴합니다.요즘 Oracle을 사용하는 대부분의 기업들이 Oracle을 정말 필요로 하는지는 의문이지만 Oracle을 필요로 하는 기업들도 분명히 있습니다.
좋은 인용구:
"데이터베이스 계층에서 애플리케이션 계층으로 CPU 집약적인 작업을 이동합니다. 참조 무결성, 조인, 애플리케이션 계층에서 정렬!이유: 앱 서버는 저렴하며 데이터베이스가 병목 현상을 일으킵니다."
많은 실제 연습을 보려면 여기를 참조하십시오.네, Oracle을 사용합니다.
네, 저는 여전히 Oracle을 사랑합니다. 제대로 된 DBMS가 있어야 하는 모습이지만 그렇다고 해서 Oracle의 입지가 어디에나 있는 것은 아닙니다. 적어도 판매 가격으로는 그렇지 않습니다.
아마도 무료(gpl 대신 BSD)인 postgresql을 고려할 가치가 있을 것입니다.
선택 사항에 대한 좋은 검토를 위해 "관계형 데이터베이스 관리 시스템의 비교"를 사용하여 위키백과를 살펴봅니다.
분석...다른 이유가 필요하십니까? ;)
분석은 모든 보고서 및 데이터 웨어하우스에 도움이 됩니다.하지만 웹 사이트를 위한 작은 데이터베이스가 필요하다면 MySQL을 고수하십시오. 그렇지 않으면 복잡한 보고와 성능이 문제가 될 경우 Oracle이 최선의 방법이라고 생각합니다.
오라클에 대해서는 아무것도 모르지만, 질문이 Postgres를 포함하도록 확대되었기 때문에...
MySQL(AFAICT)에는 실제로 존재하지 않는 Postgres에서 내가 개인적으로 사용하거나 사용한 것들!
- 트랜잭션 및 전체 텍스트 검색을 함께 수행
MySQL에는 외부 FTS가 없기 때문에 외부 FTS를 사용하는 것이 인기가 있다는 것을 알고 있습니다.개인적으로, 저는 별도의 FTS 솔루션을 사용하는 데 어려움을 겪었을 뿐입니다. 두 데이터 소스가 동기화되지 않을 수 있다면 언젠가는 그렇게 될 것이라고 장담할 수 있습니다.저는 BDB를 사용할 수도 있고 제 자신의 인덱스를 작성할 수도 있지만, 그렇지 않습니다. 왜냐하면 내장된 인덱스보다 더 나은 방법이 없고, 더 나쁜 방법이 많기 때문입니다. (좋아요, 어떤 경우에는 이상한 사용자 정의 인덱스가 필요했고, 그 때문에 좋습니다.)이상한 맞춤형 FTS가 필요하다면 스핑크스가 더 유연할 수 있습니다.하지만 저는 이상한 사용자 지정 FTS가 실제로 필요하다고 본 적이 없으며, Spink가 Postgres FTS보다 더 유연한지조차 확신할 수 없습니다.)
- 공간 쿼리(PostGIS)
MySQL에 이것을 허용하는 확장 메커니즘이 있는지는 모르겠지만, PostGIS와 같은 확장 기능은 없다고 확신합니다.데이터베이스에 공원, 매립지 및 커피숍 경계가 있는 경우 매립지에서 100m 이내가 아니라 공원에서 300m 이내에 있는 모든 커피숍을 쿼리하려고 합니다.PostGIS는 인상적으로 쉽습니다.MySQL을 사용하면 상당한 양의 작업이 가능할 것으로 생각합니다.
- 객체 관계 테이블
Rails 사람들(야, 나도 한때는 하나였어!)은 특히 STI를 사용하는 것을 좋아하고 모든 하위 클래스가 슈퍼 클래스와 거의 동일한 필드를 가지고 있는 것처럼 가장합니다.하위 클래스가 몇 개만 있거나 모두 매우 유사한 경우에는 괜찮지만 클래스 계층을 테이블에 매핑하려고 하면 매우 빠르게 미칠 수 있습니다.Postgres에서는 프로그래밍 언어의 하위 분류처럼 첫 번째 테이블에서 상속되고 필드를 추가하는 새로운 테이블을 만드는 것이 쉽습니다.내 데이터와 실제로 일치하는 데이터 모델!진짜 OODB만큼 좋지는 않지만 꽤 가깝습니다.
- 더 나은 거래
InnoDB를 고수하면 모든 데이터 조작 작업에 대한 트랜잭션을 얻을 수 있습니다.또한 Postgres에는 모든 데이터 정의 작업에 대한 트랜잭션이 있습니다.일반적인 경우:열을 추가하고 데이터를 이전 형식에서 새 형식으로 변환하고 이전 열을 제거하려면 마이그레이션이 필요합니다.Postgres에서는 한 번의 거래로 모든 것을 수행합니다. 그리고 이 거래가 부분적으로 적용될 가능성은 없습니다.MySQL에서는 트랜잭션에서 데이터 변환 단계를 수행할 수 있지만 롤백해야 하는 경우에도 새 열이 추가되므로 수동으로 정리하거나 더 복잡한 트랜잭션을 작성하여 처리해야 합니다.매일 반복하고, 고통을 즐기세요.
(여기서 제가 보는 일반적인 주제는 제가 의미하는 바를 정확히 말할 수 있는 능력이며, 따라서 더 높은 수준의 추상화에서 작업하는 것입니다.내 데이터에 대한 FTS를 원하십니까?그런 다음 FTS 인덱스를 만듭니다.공간적인 질문을 원하십니까?그런 다음 공간 질의를 작성합니다.하위 클래스 데이터를 저장하시겠습니까?그런 다음 하위 클래스 테이블을 만듭니다.완전히 원자적인 마이그레이션을 원하십니까?그런 다음 거래를 하고 오늘은 여기서 끝냅시다.물론, MySQL에서 이 모든 것을 구현할 수는 있지만, SQL 한 줄을 작성하는 것이 아니라 다른 것에 대해 생각하고 구현하고 유지해야 합니다.전문 프로그래머로서 더 높은 수준의 추상화, 완전한 정지 작업을 할 수 있는 것보다 더 가치 있는 것은 없습니다.)
저는 Postgres가 일반적으로 MySQL보다 "더 좋다"고 말할 수 있을지 모르겠습니다. MySQL이 훨씬 더 잘 하는 것들이 있고, 그래서 그것은 확실히 그 용도를 가지고 있습니다. 하지만 이것들은 제가 그것에 대해 절대적으로 좋아하는 몇 가지입니다.
Oracle은 다양한 기능을 제공하며, 일부 옵션 추가 기능은 유료이지만 대부분의 기능은 모든 에디션에 무료로 포함되어 있습니다.
http://www.oracle.com/database/product_editions.html
Flashback 쿼리는 무료 포함이며, 최근 "현재" 데이터베이스를 쿼리할 수 있습니다.
표현 필터는 프리비의 또 다른 좋은 예이며, 규칙 엔진도 강력합니다.http://www.oracle.com/technology/products/database/rules_manager/index.html
따라서 선택을 할 때는 자신이 개발하고 지원해야 하는 기능을 얻을 수 있는 어떤 기능을 활용할 수 있는지 고려해야 합니다.
Oracle은 실시간 데이터를 백업 및 복원하기 위한 매우 정교하고 복잡한 체계를 제공하여 진정한 무중단 핫 백업 기능을 제공합니다.
데이터를 집계하고 요약하기 위해 내장된 많은 분석 및 통계 기능을 제공합니다.이 작업은 mySQL로 수행할 수 있지만, 앱에서 수행할 수 있습니다.
트랜잭션 무결성(커밋/롤백)을 갖춘 대규모 트랜잭션 시스템을 실행해야 하는 경우 뛰어난 확장성을 제공합니다.많은 비용을 지출할 의사가 있다면 실제 애플리케이션 클러스터와 함께 확장할 수 있습니다.
대량의 코드와 복잡한 스키마로 잘 확장되는 임베디드 코드(패키지, 저장 프로시저, 저장된 기능)를 처리하기 위한 체계를 제공합니다.
특히 바인딩된 변수 쿼리(JDBC의 PreparedStatement 개체)를 사용할 때 높은 트랜잭션 속도(시간당 수만 개)로 작업을 잘 수행합니다.가장 중요한 것은, 이런 종류의 것에 대한 성능은 예측 가능하다는 것입니다.
그것은 매우 비싸고 제대로 작동하기 위해서는 고도로 훈련된 교관들이 필요합니다.좋은 소식은 그곳에 전문가들이 많다는 것입니다.제가 일하는 곳은 우리의 오라클을 돌보기 위해 피티안 그룹이라는 회사와 함께 돈을 씁니다. 이것은 좋은 방법입니다.
Express Edition(무료, 몇 기가바이트의 데이터로 제한됨)으로 평가할 수 있습니다.
시스템이 Oracle Standard Edition과 함께 작동할 수 있는 경우 mySQL을 대신 사용합니다.시스템에 Enterprise Edition 기능이 필요한 경우 IBM DB2도 평가해야 합니다. 두 기능 모두 스케일아웃용으로 설계되었기 때문입니다.
Oracle은 다른 rdbms보다 훨씬 우수한 다양한 기능을 제공합니다(DB2에 대해 잘 모르기 때문에 자격이 없습니다).클러스터링(RAC)은 매우 우수합니다.저장 프로시저 언어인 PL/SQL은 매우 견고하며 실제로 코딩하기에 즐겁습니다.좋은 XML 기능, GIS, 전체 텍스트 등이 있습니다.
하지만 저에게 있어 절대적인 거래 파괴자는 옵티마이저가 잘 작동한다는 것입니다.쿼리를 지정하면 결과 집합이 효율적으로 반환됩니다.가끔 여러분은 그렇지 않다는 것을 알고 그에 따라 힌트를 제공해야 하지만, 그것은 드문 예외입니다.SELECT, INSERT, UPDATE 및 DELETE 문을 발행하면 데이터베이스가 정상적으로 작동합니다.
언급URL : https://stackoverflow.com/questions/1788854/when-to-choose-oracle-over-mysql
'programing' 카테고리의 다른 글
기본 테이블이 변경될 때 구체화된 보기 업데이트 (0) | 2023.07.26 |
---|---|
결과 집합 - 커서 : rs.next() 시간이 많이 걸립니다. (0) | 2023.07.26 |
MariaDB 인덱스 비교 (0) | 2023.07.26 |
zip(*[iter(s)]*n)은 Python에서 어떻게 작동합니까? (0) | 2023.07.26 |
Angular 빌드 프로세스를 가속화하는 방법 (0) | 2023.07.26 |