찾다
백엔드 개발GolangGo rqlite의 저자는 다음과 같이 말합니다. 데이터베이스 소프트웨어를 개발할 때 알고리즘이 얼마나 중요한지!

이 글은 golang 튜토리얼 칼럼에서 "Go rqlite 저자가 말하는 데이터베이스 소프트웨어 개발 시 알고리즘이 얼마나 중요한지!"에 대해 소개한 글입니다. 》, 도움이 필요한 친구들에게 도움이 되길 바랍니다!

그런데 정말 충격적인 것은 지난 6년 동안 데이터베이스를 대하는 나의 태도가 얼마나 변했는지입니다. 처음에는 별 관심이 없었는데 이제는 데이터베이스 시스템이 소프트웨어 공학의 정점이라는 생각이 들기 시작했습니다.

무엇이 더 나을지 모르겠습니다

내 경력의 대부분에서 데이터베이스에 대한 나의 유일한 경험은 데이터베이스에 대해 읽는 것이었습니다. 일반적으로 지루한 맥락에서 데이터베이스에 대한 학부 교과서를 열면 내가 의미하는 바를 알 수 있습니다. 일반적으로 다음 표는 관계형 데이터베이스의 일반적인 사용 사례로 표시됩니다.

ID123

더 지루한 내용을 읽을 수 있나요? 이것이 모두 데이터베이스에 관한 것이라면 나는 그들과 아무 관련이 없습니다. 요점은 무엇입니까? 소프트웨어는 이것보다 훨씬 멋지죠? 그래서 나는 오랫동안 데이터베이스와 관련된 모든 것을 완전히 피했습니다.

첫 번째 CRUD 애플리케이션을 결코 잊지 못할 것입니다.

2009년, 수년간 임베디드 소프트웨어, Linux 장치 드라이버 및 웹 소프트웨어를 작성한 후 나는 다음과 같은 팀을 이끌었습니다. 웹 기반 시스템을 구축합니다. 보시다시피 AWS 클라우드가 도래했으며 클라우드 기반 라이선스 기술 MAC 주소는 더 이상 유효하지 않습니다. 우리 팀은 새로운 EC2 기반 소프트웨어 어플라이언스를 위한 라이선스 포털을 구축해야 합니다. Python에 대한 경험이 많았기 때문에 MySQL에서 실행되는 Django를 선택했습니다. 실제로 데이터베이스 작업을 시작했습니다.

우리나라 평원에서 CRUD 애플리케이션 개발이 계속되면서 저는 데이터베이스가 얼마나 중요한지, 즉 우리 시스템에 얼마나 필수적인지 깨닫기 시작했습니다. 데이터베이스를 잃으면 소프트웨어 개발이 헛된 것입니다. 데이터베이스가 데이터를 손상시키는 경우 고객의 장치에 대한 라이선스가 취소될 수 있으며 해당 네트워크의 작동이 중단됩니다. 데이터베이스가 제대로 작동하지 않으면 수천 명의 사람들이 동시에 영향을 받게 됩니다. 하지만 이런 일은 전혀 일어나지 않았습니다. 데이터베이스 는 항상 작동합니다 . 결코 우리를 실망시키지 않습니다. 나는 감동했다.
나중에 외래 키 제약 조건, 고유 제약 조건, 참조 무결성, 인덱스 등을 발견했습니다. (당시에는 이러한 사항에 대해 아무것도 몰랐다는 점을 기억하세요.) 데이터베이스는 다양한 방식으로 더욱 강력한 시스템을 구축하는 데 도움이 될 수 있습니다. 나는 마침내 최신 데이터베이스가 놀랍다는 것을 깨달았습니다. 데이터베이스는 실제로 시스템을 구축하기 전까지는 세상에서 가장 지루한 것입니다 .

첫 번째 검색 시스템도 잊지 마세요

2012년까지 저는 탄력적 검색을 핵심으로 하는 대규모 키-값 데이터베이스를 기반으로 대규모 인덱싱 및 검색 시스템을 구축하는 팀을 이끌고 있었습니다. Elasticsearch와 같은 시스템(세계적 수준의 인덱싱을 기반으로 구축된 기술)이 테라바이트 규모의 로그 데이터를 가지고 있더라도 무엇을 할 수 있는지 보는 것은 놀라운 일입니다.
지금까지 데이터베이스와 검색 시스템이 실패하는 것을 보아왔지만 데이터베이스 기술에 매료되었습니다. 2014년에 저는 [오픈 소스 시계열 데이터베이스](github.com/influxdata/influxdb)의 핵심을 개발하는 소규모 전담 팀에 합류했습니다.

제가 배운

알고리즘은 데이터베이스 개발에만 정말 중요합니다

중국에서만 Big O 분석이 실제로 생생하게 구현되었습니다. 데이터베이스는 프로그래머가 여전히 수백만 개의 개체를 반복하고, 정렬하고, 필터링해야 하는 몇 안 되는 애플리케이션 중 하나입니다. CS 수업에서 배운 지루한 내용이 많이 중요한 몇 안 되는 곳 중 하나입니다.

다른 많은 소프트웨어 개발에서는 그렇지 않습니다. 부트 ROM 펌웨어를 작성 중이신가요? 아니요, 알고리즘은 나에게 중요한 적이 없습니다. 튜너 장치 드라이버? 아니요, 상관없습니다. 네트워크 장치 관리 소프트웨어? CRUD 애플리케이션? 이러한 모든 분야에 서로 다른 기술과 지식이 필요한 경우는 거의 없습니다. 대부분의 경우 인터뷰에서 런타임 복잡성에 대해서만 논의했습니다.
하지만 데이터베이스가 발전하면서 이 모든 것이 바뀌었습니다. 실제로 시스템이 올바른 결과를 반환하는 것을 보는 것은 놀라운 일입니다. 하지만 알고리즘 변경으로 인해 아주 짧은 시간 동안만 발생하며, 여러분이 구축한 시스템에서 이러한 일이 발생하는 것을 보는 것도 중요합니다.

성능도 중요합니다

소프트웨어에는 다음과 같은 오래된 이야기가 있습니다. 프로그래머는 이전 버전보다 10배 빠르게 실행되는 코드를 작성합니다. 보여줬는데, 누군가는 그것이 생산한 데이터가 정확한 데이터와 약간 다르다는 점을 지적했습니다. "그러나 그것은 10배 더 빠르다"고 프로그래머는 지적했다. "음, 정확할 필요가 없다면 공간을 전혀 차지하지 않고 무한히 빠르게 실행되는 버전을 만들 수 있습니다."라고 다른 사람이 대답했습니다.
이 도덕 이야기는 항상 나에게 큰 영향을 미쳤습니다. 옳은 것이 무엇보다 항상 중요합니다. 사실이에요. 그러나 그것은 또한 프로젝트가 단지 올바른 결과를 낳기 때문에 가치가 있다고 믿게 만듭니다.

데이터베이스의 경우에는 그렇지 않습니다.
성능은 단순한 기능 그 이상입니다. 요청입니다. 데이터베이스 비용을 기꺼이 지불하려는 사람들은 데이터 양이 많기 때문에 그렇게 하는 경우가 많습니다. 이 상황에서 데이터베이스가 제대로 작동하지 않으면, 즉 빠르고 효율적으로 결과를 반환하지 않으면 전혀 작동하지 않을 수 있습니다.

글쓰기 시스템이 복잡하다고 생각하시나요?

데이터베이스를 개발하면서 가장 충격을 받았던 점은 쿼리 엔진이 얼마나 복잡해졌는가 하는 점이었습니다. 저는 디스크에 데이터를 쓰고 저장하는 시스템을 구축한 경험이 많습니다. 이러한 시스템을 제대로 작동시키는 것은 중요한 과제가 될 수 있습니다.
그러나 이러한 복잡성은 일반적으로 쿼리 엔진의 복잡성보다 훨씬 적습니다. 유연한 쿼리 시스템(질문이 무엇인지 모를 때 질문에 답하는 시스템을 효과적으로 구축하려면)에는 진지한 디자인 사고가 필요합니다. 쿼리 플래너가 유효해야 합니다. 쿼리 시스템은 특정 차원별 필터링, 다른 차원별 그룹화, 여러 테이블의 데이터 조인, 때로는 외부 소스의 데이터 지원 등 다양한 직교 요구 사항을 지원해야 합니다. 마지막으로, 쿼리 시스템은 반드시 효율적이고 잘 작동해야 합니다. 이는 설계와 구현에서 추상화와 최적화 사이의 긴장으로 이어지며, 이를 잘 관리하려면 실제 기술이 필요합니다.

실제 환경에서는 운영되어야 합니다

중요한 데이터베이스라면 백업, 복구, 조각화 관리, 모니터링 등 기본 작업을 지원해야 합니다.
진지한 운영자인 내가 데이터베이스를 백업할 수 없다면 데이터베이스를 사용할 수도 없습니다. 그렇게 간단합니다. 데이터베이스가 쓰기를 얼마나 빨리 받아들이는지는 중요하지 않습니다. 쿼리 중에는 메모리 공간이 얼마나 작은지는 중요하지 않습니다. 데이터베이스를 만든 사람인 당신이 통제할 수 없는 장애로부터 데이터베이스의 데이터를 보호하지 못한다면 나는 결코 데이터베이스를 편안하게 운영할 수 없을 것입니다.
물론, 데이터베이스의 협조 없이 데이터베이스를 백업하는 방법은 여러 가지가 있습니다. 그러나 일반적으로 내장된 방법이 가장 좋습니다. 이것은 rqlite v2.0에 대한 나의 권장사항이기도 합니다. 누군가가 rqlite를 진지하게 사용하기를 원한다면 시스템이 완전히 실패하고 매우 오랫동안 데이터보다 뒤처질 수 있는 현실 세계의 문제를 해결해야 합니다.

그러므로 데이터베이스를 설계하고 구현할 때 처음부터 운영 지원을 구축하세요. 디자인의 기본 부분으로 만드세요. 사용자는 이에 대해 감사할 것입니다.

대개 대답은 "상황에 따라 다릅니다"입니다.

처음 데이터베이스 작업을 시작할 때, 특히 운영자로서 다음과 같은 질문을 자주 합니다. 시스템을 어느 속도로 인덱싱할 수 있습니까? 쿼리에 얼마나 빨리 응답합니까? 얼마나 많은 디스크 공간이 필요합니까? 잔해 조각은 얼마나 커도 여전히 작동할 수 있나요? 어떻게 속도를 높일 수 있나요? 모두 예약 없이 요청했습니다. 나는 그것을 직접 만들곤 했다.
데이터베이스 프로그래머에게 이런 질문을 할 수도 있습니다. 그리고 여러분이 자주(아마도) 얻게 될 대답은 다음과 같습니다. 그것은 여러분에게 달려 있습니다. 벤치마킹해야 하고 측정해야 합니다 . 이 말을 들으면 짜증이 날 수도 있고 책임을 회피하는 것처럼 보일 수도 있습니다.

하지만 그렇지 않습니다.
이제 이런 질문을 들으면 웃음이 나네요. 너무 순진해요.
인덱싱 속도는 문서 수나 데이터 포인트 수뿐만 아니라 데이터 크기에 따라 달라질 수 있습니다. 이는 일괄 처리, 데이터의 카디널리티, 데이터베이스가 클러스터링되었는지 여부, 데이터의 어떤 열과 필드가 인덱싱되는지, 새 데이터인지 기존 데이터에 대한 업데이트인지, 데이터베이스가 실행 중인 머신에 따라 달라질 수 있습니다. RAM, IO 성능 및 사용된 복제입니다.
성과를 좌우하는 변수는 끝이 없습니다.
쿼리의 경우 시계열 데이터의 시간 범위에 따라 달라질 수 있습니다. 적중된 레코드 수, 쿼리된 필드 수, 범위 스캔 포함 여부, 데이터 인덱싱 여부, 사용된 인덱스 유형, 액세스할 수 있는 샤드 수 및 데이터가 로컬인지 여부에 따라 달라집니다. 그리고 기계 특성. 재고가 있나요? 유지보수 중인가요? 네트워크가 바쁜가요?

그래서 대답은 항상 상황에 따라 다릅니다입니다. 데이터베이스 디자이너는 정직합니다. 그들은 자신이 구축한 시스템에 대한 모든 것을 알 수 있지만 여전히 귀하의 질문에 대한 답은 모릅니다.

프로그래밍 버킷 리스트

프로그래밍 기술을 향상시키고 싶은 개발자에게 한 가지 조언이 있다면 데이터베이스 개발팀에 합류하라는 것입니다. 데이터베이스 개발로 인해 저의 프로그래밍 기술이 엄청나게 향상되었습니다. 정말 멋진 코딩 경험이었습니다.

원본 주소: https://www.philipotoole.com/what-i-learned-from-programming-a-database/

번역 주소: https://learnku.com/go/t/64605

FIRST LAST TITLE DEPARTMENT
Robert 켈리 감독 마케팅
Tom Burke 대표 판매
John Smith 부사장 판매

위 내용은 Go rqlite의 저자는 다음과 같이 말합니다. 데이터베이스 소프트웨어를 개발할 때 알고리즘이 얼마나 중요한지!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 learnku에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
Golang vs. C : 코드 예제 및 성능 분석Golang vs. C : 코드 예제 및 성능 분석Apr 15, 2025 am 12:03 AM

Golang은 빠른 개발 및 동시 프로그래밍에 적합한 반면 C는 극심한 성능과 기본 제어가 필요한 프로젝트에 더 적합합니다. 1) Golang의 동시성 모델은 Goroutine 및 Channel을 통한 동시성 프로그래밍을 단순화합니다. 2) C의 템플릿 프로그래밍은 일반적인 코드 및 성능 최적화를 제공합니다. 3) Golang의 쓰레기 수집은 편리하지만 성능에 영향을 줄 수 있습니다. C의 메모리 관리는 복잡하지만 제어는 괜찮습니다.

Golang의 영향 : 속도, 효율성 및 단순성Golang의 영향 : 속도, 효율성 및 단순성Apr 14, 2025 am 12:11 AM

goimpactsdevelopmentpositively throughlyspeed, 효율성 및 단순성.

C와 Golang : 성능이 중요 할 때C와 Golang : 성능이 중요 할 때Apr 13, 2025 am 12:11 AM

C는 하드웨어 리소스 및 고성능 최적화가 직접 제어되는 시나리오에 더 적합하지만 Golang은 빠른 개발 및 높은 동시성 처리가 필요한 시나리오에 더 적합합니다. 1.C의 장점은 게임 개발과 같은 고성능 요구에 적합한 하드웨어 특성 및 높은 최적화 기능에 가깝습니다. 2. Golang의 장점은 간결한 구문 및 자연 동시성 지원에 있으며, 이는 동시성 서비스 개발에 적합합니다.

Golang in Action : 실제 예제 및 응용 프로그램Golang in Action : 실제 예제 및 응용 프로그램Apr 12, 2025 am 12:11 AM

Golang은 실제 응용 분야에서 탁월하며 단순성, 효율성 및 동시성으로 유명합니다. 1) 동시 프로그래밍은 Goroutines 및 채널을 통해 구현됩니다. 2) Flexible Code는 인터페이스 및 다형성을 사용하여 작성됩니다. 3) NET/HTTP 패키지로 네트워크 프로그래밍 단순화, 4) 효율적인 동시 크롤러 구축, 5) 도구 및 모범 사례를 통해 디버깅 및 최적화.

Golang : Go 프로그래밍 언어가 설명되었습니다Golang : Go 프로그래밍 언어가 설명되었습니다Apr 10, 2025 am 11:18 AM

GO의 핵심 기능에는 쓰레기 수집, 정적 연결 및 동시성 지원이 포함됩니다. 1. Go Language의 동시성 모델은 고루틴 및 채널을 통한 효율적인 동시 프로그래밍을 실현합니다. 2. 인터페이스 및 다형성은 인터페이스 방법을 통해 구현되므로 서로 다른 유형을 통일 된 방식으로 처리 할 수 ​​있습니다. 3. 기본 사용법은 기능 정의 및 호출의 효율성을 보여줍니다. 4. 고급 사용에서 슬라이스는 동적 크기 조정의 강력한 기능을 제공합니다. 5. 레이스 조건과 같은 일반적인 오류는 Getest-race를 통해 감지 및 해결할 수 있습니다. 6. 성능 최적화는 sync.pool을 통해 개체를 재사용하여 쓰레기 수집 압력을 줄입니다.

Golang의 목적 : 효율적이고 확장 가능한 시스템 구축Golang의 목적 : 효율적이고 확장 가능한 시스템 구축Apr 09, 2025 pm 05:17 PM

Go Language는 효율적이고 확장 가능한 시스템을 구축하는 데 잘 작동합니다. 장점은 다음과 같습니다. 1. 고성능 : 기계 코드로 컴파일, 빠른 달리기 속도; 2. 동시 프로그래밍 : 고어 라틴 및 채널을 통한 멀티 태스킹 단순화; 3. 단순성 : 간결한 구문, 학습 및 유지 보수 비용 절감; 4. 크로스 플랫폼 : 크로스 플랫폼 컴파일, 쉬운 배포를 지원합니다.

SQL 분류의 진술에 의한 순서 결과가 때때로 무작위로 보이는 이유는 무엇입니까?SQL 분류의 진술에 의한 순서 결과가 때때로 무작위로 보이는 이유는 무엇입니까?Apr 02, 2025 pm 05:24 PM

SQL 쿼리 결과의 정렬에 대해 혼란스러워합니다. SQL을 학습하는 과정에서 종종 혼란스러운 문제가 발생합니다. 최근 저자는 "Mick-SQL 기본 사항"을 읽고 있습니다.

기술 스택 컨버전스는 기술 스택 선택의 프로세스 일뿐입니까?기술 스택 컨버전스는 기술 스택 선택의 프로세스 일뿐입니까?Apr 02, 2025 pm 05:21 PM

기술 스택 컨버전스와 기술 선택의 관계, 소프트웨어 개발에서 기술 스택의 선택 및 관리는 매우 중요한 문제입니다. 최근에 일부 독자들은 ...

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전