일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- bash
- TiDB
- Windows via c/c++
- 구조와 원리
- Preprocessor
- OS 커널
- FreeBSD
- Symbol
- SQLite
- 긴옵션
- TiKV
- go
- kernel
- DBMS
- UNIX
- newSQL
- 커널
- Pointer
- 포인터변수
- 전처리기
- 포인터
- DBMS 개발
- 컴퓨터 강좌
- 함수포인터
- Golang
- getopts
- 약어
- UNIX Internals
- Programming
- 한빛미디어
- Today
- Total
목록개발자 이야기 (97)
sonumb
개요 다수의 클라이언트 접속과 요청을 각각의 고루틴으로 처리하는 서버가 있다고 하자. 이 서버에서 고루틴이 정상적으로 종료하는 경우는 두 가지 정도가 있다. 1. 클라이언트 접속 종료 2. 관리자가 서버 애플리케이션 종료 방안 1 이 두가지를 동시에 처리하기 위해서, 서버 애플리케이션은 클라이언트 접속을 확인하는 동작과 특정 변수를 통해 애플리케이션 종료가 진행되고 있는지 확인하는 동작이 순차적으로 행해져야 한다. 서버 애플리케이션 종료는 chan 혹은 context로 제어될 수 있으며, 클라이언트 접속 여부를 확인하기 위해서 net.Conn 객체의 Read() 함수를 호출해야 한다. 다만, 이 함수는 기본적으로 동기함수로 처리되므로, 데이터가 수신되어 리턴되기 전까지 context.Done()을 읽는 ..
✅ https://tikv.org/docs/3.0/concepts/overview/ https://tikv.org/docs/3.0/concepts/architecture/ 의 번역본이다. Concepts TiKV은 원래 PingCAP 이 TiDB을 보완하기 위해 만든 분산 트랜잭션 키 - 값 데이터베이스입니다. Cloud Native Computing Foundation 의 인큐베이팅 프로젝트인 TiKV는 통합 분산 스토리지 계층의 역할을 수행하기 위한 것입니다. TiKV는 수 조개의 row에 걸친 페타바이트 규모의 배포를 지원함으로써 대규모 데이터 작업에 탁월합니다. 이는 적은 양의 메타 데이터 저장에 유용한 etcd 와 같은 다른 CNCF 프로젝트 기술을 보완하며 다른 프로토콜로 통신하는 상태 비 저..
✅ 정보: https://docs.pingcap.com/tidb/stable/architecture (v4.0) 를 번역한 문서다. TiDB 플랫폼은 TiDB 서버 PD 서버 및 TiKV 서버 의 세 가지 주요 구성 요소로 구성됩니다. 또한 TiDB는 복잡한 OLAP 요구 사항을위한 TiSpark 구성 요소 와 클라우드의 배포 및 관리 작업을 간소화하기 위해 TiDB 오퍼레이터 를 제공합니다. TiDB 서버 TiDB 서버는 다음 작업을 담당합니다. SQL 요청을 받기 SQL 관련 로직 처리 데이터 저장 및 컴퓨팅을 위해서, PD(Placement Driver)를 통해 TiKV 주소 찾기 TiKV와 데이터 교환 결과 반환 TiDB 서버는 상태를 저장하지 않습니다(stateless). 데이터를 저장하지 않으..
✅ 출처: https://github.com/ngaut/builddatabase/blob/master/f1/schema-change-implement.md 중국어로 작성된 문서라 직접 번역 못함. 구글 번역기 돌림 ㅠ 배경 이제 일반 데이터베이스는 DDL 작업을 수행 할 때 테이블을 잠 가서이 테이블의 모든 DML 작업이 온라인 대기 상태 (일부 데이터는 읽기 작업을 지원하지만 많은 메모리를 소비하는 비용)로 들어가게합니다. 차단 된 상태에서 테이블이 클수록 영향 시간이 길어집니다. 이를 통해 DBA는 이러한 유형의 작업을 수행하기 전에 충분한 준비를 한 다음 실행에 도움이되는 기간을 선택할 수 있습니다. 이러한 이유로 건축가는 전체 시스템을 설계 할 때 테이블 구조를 신중하게 고려하여 향후 수정되지 않..
https://pingcap.com/blog/tidb-internal-data-storage https://pingcap.com/blog/tidb-internal-computing https://pingcap.com/blog/tidb-internal-scheduling 의 한글 번역본 https://sonhyunwoong.tistory.com/9 번역본 내용을 참고 TiDB 소개 TiDB는 오픈 소스 분산 확장형 하이브리드 처리 및 분석 처리 데이터베이스 입니다. 수평 확장성 및 지속성, 높은 가용성을 지원한다.(ACID) TiDB는 MySQL 호환 되면 OLTP 및 OLAP 작업 부하를 처리 하는 원스톱 데이터워어 하우스 역활을 한다. 특징 Horizontal scalability TiDB는 새로운 노..
macos 용 go에서는 syscall.Gettid() 가 없음.. 따라서, Gettid() 함수를 만들어야 한다. macos는 SYS_GETTID를 이용해서 syscall()을 호출하면 -1이 리턴되므로 사용불가.. 대체할 수 있는 시스템콜은 thread_selfid()라는 시스템콜이다. (리눅스의 제공여부는 확인하지 않았다) 아래는 소스코드 // +build darwin // 다른 unix 계열은 아래 라인을 집어 넣은 후, syscall.Gettid()호출 및 반환하게 한다. ////// +build aix dragonfly freebsd linux netbsd openbsd solaris // Above OSs will call syscall.Gettid() and return. import ( ..
직접 호출 할 수 있는 함수는 제공되지 않는 듯 하다. 아래 코드를 이용하여 id를 획득하는 것으로 해결함. 간단히 설명하자면 콜스택에 ID가 기입되어 있는데, 이를 획득하여 타입변환후 반환하는 코드다. https://gist.github.com/metafeather/3615b23097836bc36579100dac376906 Get goroutine id for debugging Get goroutine id for debugging. GitHub Gist: instantly share code, notes, and snippets. gist.github.com package main import ( "fmt" "runtime" "strconv" "strings" "sync" ) func goid() i..
1. 개요 C로 개발된 애플리케이션과 go로 작성된 애플리케이션이 TCP 통신해야 할 필요가 있다. 대개 C로 작성된 기존 서버에 새롭게 작성된 go 애플리케이션이 접속하는 형태의 프로젝트가 많을 것이다. 허나 아래에 제안될 코드는 C 클라이언트가 Go로 작성된 서버로 접속하는 형태다. C 클라이언트는 연결정보 (pid, 실행인자 등등)을 구성하여 접속한 go 서버에 전송, go 서버는 수신된 연결정보를 출력하는 코드다. (바이트 오더링이 생략될 수 있도록 Handshake 프로토콜을 주고 받았다고 가정한다.) 2. 코드 Golang 서버 아래 코드는, 메시지를 읽어 헤더를 파싱하고 헤더 타입에 따라 로직을 실행한다. 현재 MSG_OPCODE_CONNECT만 있으므로 이를 처리한다. ConnHandler..
1.개요 클라이언트가 어느 주소로 접속했는지 또한 어느 NIC로 접속했는지 서버측에서 알고 싶을 때, 아래와 같은 방법으로 이 정보를 획득한다. IP 주소획득은 getsockname()으로, NIC 이름은 getifaddrs()로 아래는 이 함수들을 이용해 실제 주소를 획득하는 예제다. ref 정보 https://stackoverflow.com/questions/848040/how-can-i-get-the-interface-name-index-associated-with-a-tcp-socket 아래는 IPv4 이며, IPv6용이 있는지 확인해봐야 한다. 2.소스 서버는 클라이언트 접속후 단순히 클라이언트 접속 NIC의 IP와 이름을 출력하며 이를 반복한다. server.c #include #include..
목차 1. 문제상황 및 요구사항 1.1. 문제상황 1.2. 요구사항 2. 설계 2.1. 전체 구조 2.2. 쉘 스크립트 구현 2.2.1. 함수 목록 및 설명 2.2.2. 함수 명세 3. 구현 3.1. 코드 4. 테스트 4.1. 예제: 트랜잭션 제어 4.1.1. 코드 4.1.2. 실행 및 결과 1. 문제상황 및 요구사항 1.1. 문제상황 여러 클라이언트가 각자의 SQL을 실행하는 테스트가 있다고 가정하자. 이때, 각 클라이언트의 SQL 실행 순서를 제어해야 하는 경우가 있다. 예를 들어, Client 1 Client 2 1 create test database & test table 'tbl' 2 transaction start; 3 transaction start; 4 insert into tbl val..