2010-01-09 4 views
10

나는 DBMS를 작성하는 하나의 큰 프로젝트 인 대학원 과정을 택했다.DBMS 작성을위한 팁

목표는 바퀴를 다시 만들지 않고 엔터프라이즈 DBMS를 오라클과 경쟁하게 만드는 것이 아닙니다. SQL 명령의 일부만 지원하면됩니다. 또한 멀티미디어 또는 무언가를 저장하기위한 멋진 하이브리드 모델 DBMS를 만드는 것도 목적이 아닙니다. 그것은 전통적인 RDBMS 여야합니다.

프로젝트의 주된 목표는 프로그래밍 기법을 사용하여 최신 아키텍처 (멀티 코어 프로세서)를 활용하여 고성능 데이터베이스 (속도,로드)를 구축하는 것입니다.

쿼리 평가, 최적화 프로그램, DBMS에 이상적인 데이터 구조 또는 기본적으로 탁월한 프로젝트를 만드는 데 도움이되는 자료가 있는지 궁금합니다. 교수는 예를 들어 메타 프로그래밍과 같은 용어를 던지고있었습니다.

프로젝트는 전적으로 C++로 작성되어야합니다.


답장을 보내 주셔서 감사합니다. 나는 당신이 처음부터 자신의 DBMS를 구축 할 것을 요구하기 때문에 MySQL과 같은 기존 DBMS를 최적화 할 수 없다. 예, 이것이 거의 대부분 바퀴를 재발 명하고 있음을 알고 있지만 일부 새로운 쿼리 평가 및 최적화 알고리즘의 범위가 있습니다. 이 특정 영역을 다루는 훌륭한 자료 나 책을 알고 있다면 알려주세요!

+0

DBMS와 같은 Oracle이 클래스 프로젝트 일 수있는 것처럼 :) – Anurag

+0

@stackoverflow.com/questions/1852042/developing-my-own-rdbms의 속이다 –

+0

@Anurag 아마도 프로젝트가 평가 된 후 오라클과 경쟁하도록 구축하십시오. 그러나 그것은 그의 동기가 아닙니다. –

답변

2

, 다음과 같은보고 할 수 있습니다 :

  1. WAM - 워렌 추상 기계.이것은 프롤로그 코드를 추상 기계에서 실행할 수있는 명령 세트로 컴파일합니다. 아이디어는 jvm 및 cli와 유사합니다. 이 부분을 자세하게 살펴볼 필요는 없으며 추상 기계에 대한 아이디어 만 이해하면됩니다.

  2. 위의 JVM, CLI - 동일합니다.

  3. lex, yacc, flex, bison와 같은 도구. 근본적으로 SQL 명령에 대한 인터프리터/컴파일러를 작성할 것이므로 아마도 몇 가지 도구를 사용하고 싶을 것입니다. 이것은 메타 프로그래밍의 한 형태로 볼 수 있습니다. 언어를 사용하여 도구를 작성하므로 메타 수준에서 프로그래밍하고 있기 때문입니다.

  4. 메타 프로그래밍의 개념 - SQL 컴파일러/해석기가 병렬 쿼리를 자동으로 최적화 할 수 있도록 구문을 사용하여 언어를 보강 할 수 있습니다. 이들은 컴파일러에 대한 힌트 등으로 구현 될 수 있습니다.

  5. 재 컴파일러 - 초기 쿼리를 대상 아키텍처에 대해 병렬로 실행할 수있는 컴파일러로 다시 컴파일하는 인터프리터/컴파일러를 작성하고자 할 수 있습니다. 예를 들어, N 코어 아키텍처의 경우 병렬로 실행되는 N 하위 쿼리로 쿼리를 다시 컴파일 한 다음 결과를 결합 할 수 있습니다.

표준 최적화 방법에 대한 많은 연구가 필요하다고 확신하지 못합니다. 이것들은 복잡 할 수 있으며, 연구 자체의 주제가 될 수 있습니다. 연습의 목적은 병렬 처리와 메타 프로그래밍을 이용하는 것이므로 연구의 초점이되어야합니다.

+1

안녕하세요, 감사합니다. 이런 식으로 뭔가를 찾고 있었는데, 이제이 머리 위로부터 나아갈 수 있습니다. :) – user245120

+0

당신은 환영합니다 :) –

1

독점적 인 문제를 제외하고는 그런 방식으로 MySQL을 최적화하는 것이 어떻습니까? 이것은 사소한 일이 아닙니다. 병렬 처리를 이용하는 쿼리 최적화는 전체 용어 작업 일 수 있습니다.

거인의 어깨에 서서 그 옆에서는 것보다 위로 올라가는 것이 좋습니다.

+0

그게 뉴튼인가요? – Anurag

+1

+1 - http://www.mysql.com/ 휠을 재발 명할 필요가 없습니다. 목표가 "최적화"되면 작동하는 것이 더 좋으며 특정 영역을 리팩터링하는 것이 좋습니다. 아마도 단위 테스트를 한 두 번 (MySQL의 코드 자체에 익숙하지 않은) 테스트해볼 수 있습니다. –

+0

@Anurag : 사실, 나는 잘 모른다. 재미있는 : 어구를 googling는이 페이지를 이미 보여준다! – wallyk

4

우선 관계형 미적분에 대해 배우고 컴파일러에서 SQL을 사용하여 처리해야합니다. 고맙게도 sql은 쉬운 언어이므로 나쁘지 않습니다.

그런 다음 색인에 대해 bx- 나무에 익숙해 지십시오. 그런 다음 커밋 및 롤백 공간을 만들면 거의 모든 것입니다. 로켓 공학이 아닌 다른 프로젝트와 비교할 수 있지만, 학기말이나 학기말에 좋은 결과를 원한다면 당장 시작하는 것이 좋습니다.

편집 : 오, 근대 건축물은 나무가 대개 멀티 스레딩에서 많은 도움이되지 않습니다. 디스크 읽기도하지 않습니다. 반면에 프로세스에서 정상적으로 처리 할 수있는 메모리뿐 아니라 OS 레벨 호출을 사용하여 전체 메모리를 고성능으로 사용하는 것이 중요합니다.

3

현대적인 CPU 아키텍처를 활용하려는 경우 MonetDB 프로젝트를 살펴 보는 것이 좋습니다. 이 프로젝트는 최신 CPU 아키텍처를위한 데이터베이스 최적화, 열 저장소 사용 및 메모리에 압축 된 페이지 저장 등의 많은 연구를 수행했습니다. CPU 캐시에서 압축하여 매우 큰 데이터베이스의 속도를 크게 향상시킵니다.

SQLite 엔진을 기반으로하는이 접근법 (열 기반 저장소 + 압축)과 더 일반적인 쿼리 엔진은 프로젝트의 좋은 기초가되어야합니다. 당신의 교수 메타 프로그래밍을 언급 한 이후

+0

이러한 종류의 답장을 찾고 있었는데, monetDB에 대한 감사의 말을 전했습니다. – user245120