MySQL에 꼭 알아야 할 8가지 함정
Mysql은 설치가 쉽고 빠르며 기능이 풍부합니다. 또한, 오픈 소스 운동의 벤치마크이기도 하며, 오픈 소스 코드를 기반으로 성공적인 회사를 구축할 수 있다는 점을 보여줍니다.
그런데 MySQL을 사용해본 사람이라면 누구나 모니터를 향해 주먹을 휘두르곤 했을 것이다. 그러나 초당 수천 행의 인터넷 데이터를 오류 없이 저장할 수 있는 기술을 개발할 수는 없습니다.
올 여름을 즐겁게 보내기 위해 오픈 소스 관계형 데이터베이스에 대해 불평해야 할 8가지 이유를 나열합니다. 아래 나열된 이유는 MySQL에만 국한되지 않으며 일부는 관계형 데이터베이스에만 해당됩니다. 관계형 데이터베이스와 MySQL을 이해하지 못한다면 우리는 항상 1990년대의 생각에 갇혀 있을 것입니다. 우리는 이것을 허물고 다시 재건해야 합니다. 또는 아래와 같은 여러 가지 이유를 정당화할 만큼 오래되지 않은 최근 인기 있는 데이터베이스를 사용합니다.
뿌리 깊은 버그
큰 패키지에는 버그가 있습니다. 하지만 조금 더 깊이 파고들어보면 MySQL과 관련된 버그들은 자립적이라는 것을 알 수 있습니다. NULL이 같은 방식으로 나타나지 않고, 외래 키 제약 조건이 생각한 대로 수행되지 않으며, 기본 키 자동 증가조차 잘못되기 때문에 갑자기 주의를 기울여야 합니다.
작은 문제는 많고 항상 해결 가능한 것은 아니기 때문에 목록을 작성하는 사람들도 있습니다. 다행스럽게도 MySQL은 아주 좋은 버그 보고 시스템을 유지하고 있기 때문에 우리는 우리가 상상할 수 없는 일들을 알 수 있고, 다른 사람들도 같은 시련을 겪고 있다는 것을 알 수 있습니다.
관계형 테이블의 경직성
관계형 테이블은 체계적으로 구성되어 있지만 구성은 양호합니다. 그러나 이로 인해 프로그래머는 열에 정의된 스키마에 일부 데이터를 구성하거나 묶어두어야 합니다. NoSQL이 점점 더 대중화되는 이유 중 하나는 프로그래머에게 데이터베이스 사용 속도를 높일 수 있는 충분한 유연성을 제공하기 때문입니다. 거리 주소에 추가 행이 필요한 경우 해당 행을 NoSQL 문서에 쉽게 삽입할 수 있습니다. 완전히 새로운 데이터 블록을 추가하려는 경우, 포함된 내용에 관계없이 문서 모델은 필요한 데이터 형식으로 변경하지 않고도 데이터를 변경하지 않고 받아들일 수도 있습니다.
모든 우편번호가 정수 형식으로 포함된 테이블을 생성한다고 상상해 보세요. 이 테이블은 매우 효율적이며 적용되는 규칙도 매우 좋습니다. 갑자기 누군가 하이픈을 사용한 9자리 우편번호를 업로드했습니다. 아니면 캐나다에 있는 고객으로부터 우편번호가 적힌 편지를 받을 수도 있습니다.
이때 모든 것이 혼란스러웠습니다. 상사는 몇 시간 내에 웹사이트를 다시 복구하고 운영할 것을 요구합니다. 그러나 데이터베이스를 다시 구축할 시간이 없습니다. 프로그래머는 무엇을 할 수 있나요? 아마도 해커를 사용하여 캐나다 우편 번호를 base64 디지털 형식에서 base 10 형식으로 변경할 수 있을까요? 아니면 실제 우편번호 등을 표시하기 위해 이스케이프 코드를 사용하는 보조 테이블을 설정하시겠습니까? 누가 알겠어요? 해커는 어디에나 있고 위험합니다. 하지만 그것을 알아낼 시간이 없습니다.
MySQL의 연관 규칙은 모든 사람을 정직하고 조심스럽게 유지하지만 공격과 속임수에 취약한 문제를 피하도록 강요합니다.
JOIN 공동 쿼리
옛날에는 데이터를 별도의 테이블에 저장하는 것은 컴퓨터 과학 역사상 큰 혁신이었습니다. 분리된 테이블은 구조가 간단할 뿐만 아니라 사용도 간편합니다. 하지만 쿼리에는 조인 문을 사용해야 합니다.
SQL은 일련의 조인을 통해 구성된 복잡한 쿼리로 개발자를 혼란과 절망의 나락으로 몰아넣습니다. 또한 스토리지 엔진은 최적의 방식으로 조인 문을 효율적으로 구문 분석해야 합니다. 개발자는 쿼리 문을 작성하기 위해 머리를 써야 하며, 그런 다음 데이터베이스가 이를 구문 분석합니다.
이것이 실행 속도에 중점을 두는 많은 개발자가 데이터 하위 테이블을 버리고 대신 비표준 데이터 테이블을 사용하는 이유입니다. 복잡한 쿼리를 방지하려면 데이터 엔터티를 구분하지 말고 모든 데이터를 하나의 큰 테이블에 저장하세요. 이것은 정말 빠르며 서버의 메모리가 부족하지 않습니다.
요즘 디스크 공간이 저렴해요. 8TB 디스크는 이미 판매 중이며 더 큰 디스크도 곧 출시될 예정입니다. 더 이상 조인을 사용하기 위해 머리를 쓸 필요가 없습니다.
브랜치의 혼란
예, 견고하고 잘 지원되는 MySQL 포크는 경쟁과 선택을 가져올 수 있지만 혼란과 혼란을 야기할 수도 있습니다. 설상가상으로 Monty Widenius가 관리하는 MariaDB라는 MySQL 포크가 있습니다. 그는 또한 MySQL 작성에도 참여하고 있습니다. 그렇다면 MariaDB는 진정으로 독립적이고 우리의 지원을 받을 가치가 있습니까? 아니면 MySQL인가요? 원래 MySQL 데이터베이스를 만든 조직에서 운영하는 핵심 코드를 고수해야 할까요? 아니면 더 똑똑하다고 여겨지는 종종 멋진 탈북자들과 합류해야 할까요?
그리고 호환성에 대한 정보는 어떻게 얻나요? 한편으로 우리는 MariaDB와 MySQL이 매우 유사하다고 확신합니다. 반면에 우리는 차이점이 있다고 믿어야 합니다. 그렇지 않으면 왜 모두가 그것에 대해 논쟁을 벌이는 걸까요? 성능과 쿼리 범위 측면에서 두 캠프 모두에서 동일한 방식으로 작동할까요? 그러나 아마도 그들은 다를 수도 있고, 미래에는 달라질 수도 있습니다.
스토리지 엔진 혼란
MySQL은 사실상 동일한 데이터베이스가 아니며, 여러 데이터베이스로 구성되어 있으며 대부분의 세부 정보는 균일한 표면에 의해 가려져 있습니다. 처음에는 MyISAM 엔진이 있었는데 속도는 빠르지만 일관성 측면에서 완전하지는 않았습니다. 때로는 속도가 필요하고 일관되지 않은 결과를 수용할 수 있는 경우에 좋습니다.
사람들이 더 필요로 할 때 완전한 트랜잭션 지원 기능을 갖춘 InnoDB가 등장했습니다. 그러나 이것만으로는 충분하지 않습니다. 이제 데이터베이스 관리자를 미치게 만들기에 충분한 20개의 스토리지 엔진 선택이 있을 수 있습니다. 물론 SQL을 다시 작성할 필요 없이 서로 다른 스토리지 엔진 간에 전환하는 것이 좋을 때도 있지만 전환 후에는 항상 혼란이 발생합니다. 이 테이블의 엔진으로 MyISAM 또는 innoDB를 선택해야 합니까? 아니면 출력하기로 결정한 데이터가 CSV 형식이 되나요?
이익 동기
MySQL은 성공적인 오픈 소스 제품이지만 여전히 이를 통해 돈을 받는 전문 개발자들로 가득 찬 사업입니다. 대부분의 사용자는 오픈 소스 라이선스가 제공하는 최고의 경험을 계속 즐기고 있지만 이 회사가 여전히 운영을 유지하기에 충분한 돈을 벌기 위해 고군분투하고 있다는 것은 의심의 여지가 없습니다. 이로 인해 "커뮤니티 에디션"과 기업에 판매되는 전체 제품 사이에 무료 코드가 이상하게 분기됩니다.
내야하나요? 여기서 돈을 얼마나 벌어요? 커뮤니티 버전에서 운영하는 것이 공정합니까? 엔터프라이즈 버전의 추가 기능은 우리가 더 많은 비용을 지불하도록 유도하기 위한 속임수에 불과합니까? 이는 적어도 대답해야 할 또 다른 질문이 있다는 것을 보여줍니다. 어떤 버전을 선택해야 할까요? 어떤 라이센스에 따라? 어떤 기능 세트를 사용해야 합니까?
최신 데이터 스토리지 계층은 JSON으로 직접 통신하는 경우가 많습니다. 이제 MySQL과 MariaDB에는 SQL의 JSON 부분을 구문 분석하는 기능이 있지만 이것만으로는 충분하지 않으며 기본 JSON 인터페이스는 이미 CouchDB, MongoDB 또는 최신 도구에서 널리 사용되고 있습니다.
폐쇄 소스 및 독점 모듈의 부상
MySQL이 오픈 소스라고 언급했나요? 일부 새로운 비오픈 소스 코드와 "오픈 소스 코어"를 중심으로 개발된 독점 모듈을 제외하고는 그렇습니다. 프로그래머는 밥을 먹어야 하고, 오라클은 노력의 결실을 돈으로 바꿔야 합니다. 이것이 비즈니스의 현실 중 하나입니다. MySQL을 사용하여 무료로 진료를 받는 병원과는 다릅니다. MySQL을 사용하여 식량을 기부하는 농부와는 다릅니다.
오픈 소스 성공이 함정이 될 수 있기 때문에 MySQL에 항상 매우 높은 표준을 유지하도록 요구하는 것은 다소 불공평합니다. 그것은 단지 처음부터 자유로울 수 있기 때문일 뿐, 그렇다고 해서 항상 그렇게 될 수 있다는 의미는 아닙니다. 기업이 많은 새로운 기능을 원한다면 어떤 식으로든 그에 대한 비용을 지불해야 합니다. 때로는 코드를 직접 작성하는 것보다 Oracle에 비용을 지불하는 것이 더 저렴할 때도 있습니다. 때로는 상업용, 비오픈 소스 코드가 의미가 있는 경우도 있습니다. 사실은 스스로를 말해줍니다.
위 내용은 꼭 말해야 할 8가지 MySQL 트랩입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











무제한 재귀 방지: 재귀 기준선을 설정하고 중지 조건을 명확히 합니다. 재귀 효율성 최적화: 심한 재귀 호출 대신 루프 또는 반복 사용을 고려하세요. 스택 오버플로 방지: 재귀 깊이를 제어하고 최적화 기술 또는 보조 데이터 구조를 사용합니다. 들어오는 매개변수의 수정은 금지됩니다. 값의 복사본을 전달하거나 전역 변수를 사용하여 재귀 결과를 저장합니다. 실제 예: fibonacci() 함수를 최적화하여 모범 사례 애플리케이션을 보여줍니다.

STL 함수 개체 사용 시 함정: 함수 개체의 상태는 수정할 수 없습니다. 그렇지 않으면 결과나 충돌이 발생할 수 있습니다. 함수 객체는 rvalue로 사용해야 하며, lvalue를 사용하면 정의되지 않은 동작이 발생합니다. 지역 변수를 캡처할 때 참조된 모든 변수를 캡처해야 합니다. 그렇지 않으면 충돌이 발생할 수 있습니다.

Go 코루틴의 일반적인 오류는 다음과 같습니다. 코루틴 누출: 잘못된 리소스 릴리스로 인한 과도한 메모리 소비 솔루션: defer 문 사용. 교착 상태: 여러 코루틴이 루프에서 대기합니다. 해결 방법: 루프 대기 모드를 피하고 채널 또는 sync.Mutex를 사용하여 액세스를 조정합니다. 데이터 경쟁: 공유 데이터는 여러 코루틴에서 동시에 액세스됩니다. 솔루션: sync.Mutex 또는 sync.WaitGroup을 사용하여 공유 데이터를 보호하세요. 타이머 취소: 코루틴이 취소된 후 타이머가 올바르게 취소되지 않습니다. 해결 방법: context.Context를 사용하여 취소 신호를 전파합니다.

함정 1: 파일 핸들이 닫히지 않음 ZipArcHive 개체를 사용하여 압축 파일을 작동하는 경우 작업을 완료한 후 항상 파일 핸들이 닫혀 있는지 확인해야 합니다. 파일 핸들을 닫지 못하면 파일이 손상되거나 리소스 누출이 발생할 수 있습니다. $zip=newZipArchive();$zip->open("file.zip");//...작업 수행...$zip->close();//파일 핸들 닫기 트랩 2: 자격이 없는 파일 처리 열려는 파일이 손상되었거나 ZIP 사양을 준수하지 않는 경우 ZipArchive는 예외를 발생시킵니다. 문서를 처리하기 전에 유효성을 확인해야 합니다. if($zip->open("file.zip")!==

Java 프레임워크 사용의 함정은 애플리케이션 성능, 유지 관리 가능성 및 보안을 방해할 수 있습니다. 이러한 함정에는 다음이 포함됩니다. 프레임워크의 남용: 프레임워크에 불필요하게 의존하는 것을 피하고 대신 간단한 팩토리 패턴이나 종속성 주입을 사용합니다. 프레임워크 제약 조건 무시: 오류로 이어지는 위반을 방지하려면 프레임워크 문서의 제약 조건과 모범 사례를 따르세요. 사용자 정의 부족: 확장 지점과 콜백 메커니즘을 사용하여 특정 요구 사항을 충족하도록 프레임워크의 특정 부분을 사용자 정의합니다. 성능 문제: 프레임워크가 성능에 미치는 영향을 이해하고 프로파일링 도구를 사용하여 병목 현상을 식별하고 해결합니다.

C++ 구문의 함정과 해결 방법 C++는 강력한 프로그래밍 언어이지만 그 구문으로 인해 프로그래머가 함정에 빠지기 쉽습니다. 이 기사에서는 C++ 구문의 몇 가지 일반적인 함정에 대해 논의하고 이를 피하거나 해결하기 위한 솔루션을 제공합니다. 함정 1: 참조 오용 문제: 포인터를 참조로 잘못 사용합니다. 코드 예: int&ref=*ptr;//오류: ptr은 포인터이며 참조로 역참조될 수 없습니다. 해결 방법: 포인터 포인터를 사용하거나 비참조 유형에 대한 포인터를 역참조하십시오. int*ptr2=&*ptr;//포인터 포인터 사용 intval=*ptr;//비참조 유형에 대한 역참조 트랩 2: 조건문의 기본 동작

일반적인 Java 기능의 함정에는 varargs를 마지막 매개변수로 사용하기, 메서드를 오버로드할 때 다른 매개변수 서명 보장하기, 기본 매개변수 값을 사용할 때 상수인지 확인하기, 메서드를 재정의할 때 매개변수 목록과 반환 유형이 일치해야 하기, 예외를 올바르게 처리하기 등이 있습니다.

일반적으로 사용되는 선택기인 is 및 where는 코드를 작성할 때 자주 접하게 되는 is 및 where 선택기 사용에 대한 팁과 함정을 자세히 설명합니다. 이들 기능은 유사하며 둘 다 데이터를 필터링하는 데 사용되지만 사용 중에 주의해야 할 몇 가지 기술과 함정도 있습니다. 먼저 is 선택기의 사용법을 살펴보겠습니다. is 선택기의 기능은 객체에서 특정 속성 값을 가진 요소를 선택하는 것입니다. 샘플 코드는 다음과 같습니다: data=[{'name':'John','age':25},{
