지금으로부터 5년 전, 두 명의 젊은 IBM 연구원이 데이터를 선언적으로 쉽게 조작할 수 있다는 명제를 위해 관계형으로 고안된 새로운 언어인 데이터베이스를 개발했습니다. 돈 체임벌린과 라몬드 보이스(Ramond Boyce)가 다음과 같이 발표한 이후 몇 년 동안 SEQUEL: 구조화된 영어 쿼리 언어 관계형 모델과 SQL은 수많은 기술로 확장되고 적용되었습니다: OLTP, OLAP, 객체 데이터베이스, 객체 관계형 데이터베이스, 심지어 NoSQL까지 말이죠. SQL은 비관계형 데이터베이스를 위한 쿼리 언어 설계에 영감을 주었습니다: 객체 데이터베이스용 SQL, 객체 관계형용 SQL, XML용 SQL, 공간용 SQL, 검색용 SQL, JSON용 SQL, 시계열용 SQL, 스트림용 SQL 등이 있습니다. 모든 BI 도구는 다양한 SQL을 사용하여 데이터와 상호 작용합니다. 사실, SQL은 가장 성공적인 4세대 언어.
"SQL은 그 힘에 비하면 신비로움 그 자체인 장치입니다." 루카스 에더
최근 Don이 말했듯이 SQL은 다음과 같은 토대를 기반으로 합니다. 관계 대수 영어와 유사한 쿼리 언어를 제공하여 더 쉽게 사용할 수 있도록 하는 것을 목표로 다음과 같은 목표를 가지고 있습니다:
- 선언적 언어 및 처리(절차적 언어 대신)
- 복잡한 쿼리를 쉽게 작성할 수 있도록 언어를 구성 가능하게 만드세요.
- 다음에서 개발한 관계형 모델로 작업하세요. 에저 F 코드.
빅 데이터는 데이터 웨어하우징을 위해 관계형 시스템을 보완하고 대체하려고 했지만, 같은 언어를 사용하려고 노력했습니다: SQL입니다. Hive, Impala, drill, BigSQL은 모두 SQL에서 영감을 받은 언어와 최적화 프로그램을 사용하며, SQL의 MPP 실행과 유사하게 실행됩니다. 또한 새로운 SQL 기능도 정기적으로 추가하고 있습니다. 이 모든 것은 여러분이 생각하는 모든 유형의 데이터 저장소와 모델에 적용됩니다. SQL에서 데이터 저장 형식, 데이터 모델, 쿼리 처리를 분리함으로써 상당한 이점을 얻을 수 있었습니다. SQL이 도입된 이후 45년 동안 많은 데이터베이스가 등장했다가 사라졌고, 많은 데이터 처리 방식이 등장했다가 사라졌습니다. NoSQL 운동에 참여한 일부 사람들은 실수로라도 SQL과 SQL 데이터베이스의 죽음을 암시하기도 했습니다. SQL 진영은 이를 받아들여 돈 체임벌린은 최근 다음과 같이 말했습니다.: "어떤 언어가 너무 잘 알려져서 다른 언어가 그 언어가 아니라고 정의하기 시작하면, 그 언어는 꽤 잘하고 있는 것이 틀림없습니다."
반면에 데이터베이스는 단순히 No-SQL로 전환했습니다. 현재의 정의는 "Not Only SQL"이지만, 원래의 접근 방식은 SQL 없이 맵리듀스와 같은 대체 언어와 프레임워크를 시도하는 것이었습니다. 10년이 지난 지금, 모든 인기 있는 NoSQL 데이터베이스에는 SQL의 변형이 있습니다: Couchbase의 N1QL, Cassandra의 CQL, Elastic의 ElasticSearch SQL 등이 그것입니다. "MongoDB에는 SQL이 없어요"라고 말합니다. 저는 "스퀴즈! 매우 단순한 SQL 구현을 보게 될 것입니다." MongoDB의 단순하고 다소 절차적이며 임시방편적인 설계를 사용하면 쿼리 구성이 느슨해지고, 최적화가 이루어지며, SQL에서 수행되는 많은 혁신이 이루어집니다.
관계형 모델은 매우 성공적이었지만 데이터베이스는 다양한 데이터 모델을 지원합니다: JSON, 그래프, XML, 시계열, 공간, 와이드컬럼, 열, 문서 등 다양한 데이터 모델을 지원합니다. 이러한 데이터베이스의 전부는 아니지만 대부분의 데이터베이스에는 해당 버전의 SQL이 있습니다. N1QL은 JSON용 SQL이며, SQL/XML, InfluxDB의 SQL, SQL/Spatial, Cassandra의 CQL 등이 있습니다. NoSQL 데이터베이스조차도 SQL과 SQL에서 영감을 받은 쿼리 언어를 구현했습니다. 새롭고 멋진 '데이터 과학'의 세계에서도 마찬가지입니다, SQL 기술을 적극 권장합니다.. 루카스 에더는 꼭 봐야 할 강연에서 이 점을 강조합니다. 아래 참조 섹션에서 그의 강연 링크를 참조하세요.
이제 NOSQL 데이터베이스에는 SQL 데이터베이스보다 더 많은 SQL 프로젝트가 있습니다.
| 데이터 모델/포맷 | SQL 구현 |
| JSON | 카우치베이스 N1QL: JSON용 SQL |
| 넓은 열 | Cassandra CQL |
| 하둡/빅데이터 | Hive, 임팔라, 드릴, BigSQL |
| 시계열 | Influxdb |
| 그래프 | SQL 그래프 데이터베이스, 오라클 그래프 |
| NoSQL 데이터베이스 | Apache Phoenix |
| 공간 | 오라클 스페이셜 |
| 검색 | Elastic SQL |
SQL이 성공적인 이유는 무엇인가요?
- 선언적: 사용자가 출력을 선언하면 쿼리 엔진이 쿼리를 실행하는 최적의 방법을 알아냅니다. 최적화 도구, 특히 비용 기반 최적화 도구가 발명되었습니다. 팻 셀린저 외 1979년에 설립되어 지속적으로 성능을 개선하는 데 도움을 주었습니다. 이는 모든 신규 참가자가 충족해야 할 높은 기준을 설정했습니다. A 아파치 하이브에 관한 최근 논문 는 복잡하고 정교한 작업의 예입니다.
- SQL은 단순히 '쿼리'에만 사용되는 것이 아니라 데이터를 업데이트하고 트랜잭션을 수행하는 데에도 사용되었습니다. 저장 프로시저, UDF는 프로시저 언어와 선언적 SQL을 결합하여 그 범위를 확장했습니다.
- SQL은 가변적이었습니다. 여러 차례 표준화되어 왔으며, 그때마다 기능이 가득한 책, 구문으로 가득한 스토어, 키워드로 가득한 사전이 추가되었습니다. 물론 모든 SQL이 동일한 것은 아닙니다. RDBMS의 전통적인 SQL 구현조차도 호환되도록 주의해서 작성하지 않는 한 정확히 호환되지 않습니다. 그럼에도 불구하고 SQL의 원래 정신은 그대로 유지되고 있습니다. SQL의 진화를 보여주는 예는 다음과 같습니다. SQL++. 돈 체임벌린과 마이크 캐리 교수 복잡한 데이터 모델 지원의 필요성에 대해 논의합니다.를 사용하여 사용자와 개발자가 JSON으로 된 데이터에 쉽게 액세스할 수 있습니다. 돈의 책 SQL 사용자를 위한 SQL++: 튜토리얼 는 유연한 JSON 데이터 모델에서 데이터를 처리하기 위해 설계된 언어인 SQL++의 최신 개발 사항을 SQL과 호환되는 방식으로 알려줍니다.
- SQL은 영어에서 차용한 언어와 마찬가지로 새로운 데이터 유형, 액세스 방법, 사용 사례에 대한 새로운 아이디어와 확장에 개방적입니다.
- SQL은 데이터 표현에서 독립적이기 때문에 비관계형 데이터에도 사용할 수 있습니다: CSV, JSON 및 모든 빅 데이터 형식에 사용할 수 있습니다. 어떤 사람들은 관계형 모델 표현의 경직성을 SQL의 경직성과 혼동하기도 합니다. 사실, 주어진 스키마에서 SQL은 모든 데이터 형식을 선택-조인-그룹-집계-프로젝트할 수 있습니다.
SQL 지원 평가하기:
이제 SQL이 어디에나 있으므로 지원 수준에 대한 실사를 해야 합니다.
- 자세한 내용은 워크로드 특성 각 워크로드의 목표. 예를 들어 대화형 애플리케이션 또는 대화형 분석, 배치 분석 또는 BI 워크로드 등이 있습니다.
- 지원되는 문은 운영 기능을 반영합니다.
- 표현식(스칼라, 집계, 부울), 조인(내부, 왼쪽/오른쪽/오른쪽 전체), 하위 쿼리, 파생 테이블, 정렬 및 페이지 매김(LIMIT/OFFSET) 측면에서 언어 기능을 제공합니다.
- 인덱싱: 올바른 인덱스가 없는 SQL은 튜링 머신 프로토타입에 불과합니다.
- 최적화 도구: 쿼리 재작성, 올바른 액세스 경로 선택, 최적의 쿼리 실행 경로 생성은 SQL을 성공적인 4GL로 만드는 요소입니다. 어떤 것은 규칙 기반 최적화 도구, 어떤 것은 비용 기반 최적화 도구, 어떤 것은 두 가지를 모두 사용합니다. 최적화 도구의 품질을 평가하는 것이 중요합니다. 일반적인 벤치마크(TPC-C, TPC-DS, YCSB, YCSB-JSON)는 여기서 도움이 되지 않습니다.
- 속담에 이런 말이 있습니다: "데이터베이스에는 성능, 성능, 성능이라는 세 가지 중요한 요소가 있습니다." 워크로드의 성능을 측정하는 것이 중요합니다. YCSB 및 확장 YCSB-JSON 를 사용하면 이 평가가 더 쉬워집니다.
- SDK: 풍부한 SDK와 언어 지원으로 개발 속도를 높일 수 있습니다.
- BI 도구 지원: 대용량 데이터 분석의 경우 일반적으로 표준 데이터베이스 연결 드라이버를 통한 BI 도구의 지원이 중요합니다.
N1QL의 창시자인 제럴드 상구디는 SQL이 데이터 처리의 기본 연산을 대표하기 때문에 성공적이라고 말한 적이 있습니다. SQL은 select-조인-네스트-언네스트-그룹-집계-창-순서-페이지네이트-셋-옵스 등 다양한 연산을 지원합니다. 데이터 연산을 지정할 때 인간(또는 기계)은 이런 식으로 생각할까요? 아직은 지켜봐야 하겠지만, 파이썬이나 자바 같은 다른 언어에서도 데이터에 대한 이러한 연산을 위한 연산자를 추가하고 있습니다. 아마도 다른 언어들도 그 뒤를 따를 것입니다. SQL은 관계형 모델이 하지 못했던 일을 해냈습니다. 관계형 모델이 하지 못했던 일을 해냈다고 해도 과언이 아닙니다:
SQL은 죽었습니다. SQL 만세.
참조:
- SQL 사용자를 위한 SQL++: 튜토리얼
- 루카스 에더 - 2000줄의 자바? 아니면 50줄의 SQL? 선택은 여러분의 몫입니다!
- 불가능하다고 생각했던 10가지 SQL 트릭
- 최신 SQL 데이터베이스가 꿈도 꾸지 못했던 알고리즘을 만들어내는 방법 작성자: Lukas Eder
- SQL 기록
- 유진 위그너: 자연과학에서 수학의 불합리한 효율성
- 알론 헤일비, 피터 노르빅, 페르난도 페레이라: 데이터의 불합리한 효과
- 3GL과 4GL의 차이점