나만의 데이터베이스 시스템 만들기 언어가있는 파일

데이터베이스를보다 효율적으로 사용하기 위해 데이터베이스가 작동하는 방식을 배워야하며 학습 방식이 필요합니다.

내 데이터베이스 시스템을 만들고 싶습니다. 쿼리를 사용하여 파일을 구문 분석하는 의사 데이터베이스를 만드는 것은 아닙니다. 이것은 단순히 쿼리 언어가있는 파일 시스템 인터페이스 일 것입니다. 데이터베이스 엔진의 실제 구조에 대해 이야기하고 있습니다. 그리고 내가 생각하는 것은 관계형이거나 문서 지향적이지 않기 때문에 (가능한 경우 “노드 지향”입니다) 가능한 한 추상적이고 높은 수준의 리소스가 필요합니다.

그럼 어떻게 만들까요? 이해할 수있는 자료 / 자습서 / 책은 무엇입니까?

언어는 가장 중요하지 않습니다. 이상적으로, 코드는 특정 언어에 묶여 있지 않고 개념을 설명하기 위해 의사 코드 일 것입니다. Google에서 문제에서 아무것도 찾을 수 없었습니다 (제가 주제에 대해 글을 읽지 못했기 때문에 올바른 검색에 들어 가지 않을 수도 있습니다).

이러한 리소스를 사용할 수 없으면 클라이언트를 만드는 방법에 대한 것이 적어도 올바른 방향으로 나아가는 것 같습니다.



답변

(존재하는 경우 “노드 지향”)

여기서 시작하십시오. 데이터베이스와 같은 복잡한 응용 프로그램을 처리 할 때 (단순한 데이터베이스는 복잡한 응용 프로그램 임에도 불구하고) 도메인 히스토리와 적절한 용어에 익숙해야하며 아키텍처에 대한 최소한의 개념을 가지고 있어야합니다. Database 의 Wikipedia 기사에서 시작할 수 있습니다. 며칠 동안 관련 개념과 다른 데이터베이스 유형에 대한 모든 기사를 읽었습니다.

그리고 내가 생각하는 것은 관계형이거나 문서 지향적이지 않기 때문에

다음으로 Relational 또는 NoSQl을 선택합니다. NoSQL을 선택하면 한 가지 유형의 NoSQL을 선택해야합니다. 그것은 매우 중요합니다. 모든 다른 데이터베이스 제품군에 대해 논의하는 건축 문서는 찾을 수 없습니다. 어느 것을 선택하든 상관 없습니다. 하나만 골라서 붙이십시오.

언어는 가장 중요하지 않습니다.

데이터베이스 제품군을 선택한 후에는 해당 제품군의 오픈 소스 데이터베이스에서 코드를 탐색해야하기 때문에 (불행히도) 그렇습니다. 찾아야 할 사항에 대한 몇 가지 일반적인 지침이 있습니다.

  • 비교적 작은 코드베이스
  • 건축 문서 또는 최소한 개발 블로그
  • 선택한 데이터베이스는 제품군에서 일반적으로 고려되는 것과 비슷해야하며 고도로 전문화되어 있으면 배우기가 더 어렵습니다.

적합한 몇 가지 예 :

소스를 가져 와서 컴파일하고 사용하십시오. 패치 나 멋진 것을 제출할 필요는 없습니다. 코드를 탐색하고 여기저기서 약간만 변경하면 어떤 일이 발생하는지 확인할 수 있습니다. 점진적인 프로세스이므로 코드를 더 많이 사용하면 코드의 기능을 더 쉽게 이해할 수 있습니다. 첫 번째로 선택한 프로젝트를 이해하기가 매우 어려워 보인다면 다음 프로젝트로 넘어가십시오.

@NB가 이전 답변 에서 제안한 것처럼 또 다른 좋은 옵션은 MySQL 엔진을 구축하는 데 집중하는 입니다.

코드베이스에서 유용한 작업을 수행 할 수있는 시점에 도달하면 프로젝트 커뮤니티에 참여하십시오. 이것이 관련 개념에 대한보다 자세한 자료를 찾는 가장 쉬운 방법입니다.

그런 다음 마지막으로 데이터베이스 작업을 시작하십시오. 처음에는 탐색했던 코드의 축소 된 복제본을 작성할 수 있습니다. 독창적 일 필요는 없으며 아주 훌륭한 프로젝트가 클론이나 포크로 시작되었습니다.

이해할 수있는 자료 / 자습서 / 책은 무엇입니까?

꽤 많은 책들이 있습니다 :

또한 수백 개의 다른 문서와 Google을 통해 쉽게 추적 할 수있는 수많은 학술 논문이 있습니다. 먼저 할 일을 정의한 다음 책을 검색해야합니다. 동료 데이터베이스 작성자 커뮤니티에 참여하면 책 목록을 좁히고 위의 것보다 훨씬 더 나은 제안을 얻을 수 있습니다.

행운을 빕니다! 완료되면 리포지토리에 대한 링크가있는 주석이 필요합니다. 그리고 당신이 한 번도하지 않았다면, 2001 년에 작성하기 시작한 컴파일러를 아직 끝내지 않았다는 것을 알려주는 의견을 남기십시오.


답변

그냥하고 너무 많이 생각하지 말아야합니다. 학습 과정과 열정을 즐기는 것은 선물입니다.

좋은 아이디어인지 다른 사람들에게 묻는 것은 확실히 좋은 전략이 아닙니다 . 내가 모든 개구리의 말을 들었다면 오늘도 이케아에서 쇼핑 카트를 주차장에서 창고로 밀고갔습니다.

Ayende가 그 흥미로운 게시물 에서 한 것처럼 자신을 정당화 할 필요는 없습니다 . 문제는 :

그러나 실용적인 개발자로서 CouchDB, MongoDB, Tokyo, Redis 등과 같은 매우 성숙한 대안이있는 포화 시장 에서이 프로젝트가 무엇을 제공하는지 궁금합니다. 이러한 제품 중 상당수는 플랫폼 간이며 C 속도로 입증 된 기록을 가지고 있으며 샤딩 기능과 내결함성이 멀리 떨어진 매우 큰 웹 사이트에서 사용됩니다.

당신이 과정에서 기쁨을 가져 가면 목표에 대해 걱정하지 마십시오. 이미 이겼습니다.


답변

“(존재하는 경우”노드 지향 “)”. -이것이 당신이 많이 찾지 못하는 이유 일 수 있습니다!

버전 0.1로 뛰어 들어 어디서 얻을 수 있는지 확인하십시오. “해야 할 일”을 묻는 것으로부터 원하는 것을 만들어내는 것에서 더 많은 것을 배울 수 있습니다. 며칠을 내고 어디를 가졌는지 검토하십시오.

약 18 년 전에 저는 btree 인덱스를 사용하여 기본 데이터베이스 시스템 (재미를 위해 그림을 작성)을 작성하고 끔찍한 것을 배웠습니다.


답변

MySQL은 플러그 가능한 스토리지 엔진 구조를 가지고 있으며, MySQL에서 작동하도록 엔진이 어떻게 생성되는지 확인하는 것이 좋습니다 .


답변

훌륭한 프로젝트처럼 들립니다. 분명히 당신의 목표는 프로덕션 소프트웨어를 만드는 것이 아니라 데이터베이스와 데이터베이스 시스템을 만드는 과정에 대해 배우는 것입니다.

정말 많은 연구가 필요하다고 생각하지 않습니다. 노드 기반 데이터베이스 시스템을 만드는 데 경험을 얻는 것이 목적인 것 같습니다.

시작하는 방법은 다음과 같습니다.

  1. 좋아하는 언어 나 개선하려는 언어를 선택하십시오.
  2. 노드 객체 (또는 언어에서 가장 가까운 것)를 만듭니다. 그것들을 연결하는 방법을 알아 내십시오.
  3. 먼저 구현할 짧은 SQL 문 목록을 작성하십시오.
  4. 데이터 저장 방법을 결정하십시오. 한 가지 확실한 해결책은 모든 노드를 직렬화하고 프로그램이 시작될 때로드 한 다음 프로그램이 끝날 때 저장하는 것입니다.

기본 사항을 익힌 후에는 어렵거나 문제가있는 것에 대해 훨씬 더 많은 통찰력을 얻게됩니다. 그런 다음 그것에 대해 조사하고 개선점을 찾은 다음 통합 할 수 있습니다.


답변

데이터베이스가 “어떻게 작동하는지 이해하기 위해”자신 만의 데이터베이스를 작성하는 것이 그렇게하는 유일한 이유입니다 (데이터베이스가 제대로 이해하기 어렵고 올바른 것으로 증명하기 어렵 기 때문에). 당신은 미쳤지 만 좋은 방법으로!

어떻게 수행되는지 보려면 SQLite를 살펴 보는 것이 좋습니다. SQLite는 소스는 1.3MB 압축 약이며, 그것은 완전히 ACID 호환 트랜잭션 데이터베이스입니다. 또한 공개 도메인 이며 주요 저자는 귀하의 질문에 기꺼이 답변 할 것입니다. (정보를 디스크에 실제로 커밋하는 방법에 가장 까다로운 부분이 있다고 생각합니다. OS와 하드웨어가 거짓말을 멈추고 트랜잭션을 지금 작성하도록 설득하는 것은 놀랍게도 어려운 일이며 DB를 작성할 필요가없는 이유는 무엇입니까?)


답변

책 구매 :

http://www.springer.com/computer/database+management+%26+information+retrieval/book/978-1-84628-394-9

인덱스는 오늘날 데이터베이스의 가장 중요한 측면입니다. 이진 트리처럼 존재하는 대안을 연구하십시오.

또한 복잡한 결합이 계산되는 방법 인 직교 곱 에 대해 읽어보십시오 .