일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- TiKV
- OS 커널
- Pointer
- Windows via c/c++
- 커널
- UNIX
- DBMS
- 컴퓨터 강좌
- Programming
- kernel
- FreeBSD
- DBMS 개발
- 구조와 원리
- go
- Preprocessor
- UNIX Internals
- 함수포인터
- newSQL
- TiDB
- 포인터
- 약어
- Golang
- bash
- Symbol
- 전처리기
- 포인터변수
- getopts
- 긴옵션
- 한빛미디어
- SQLite
- Today
- Total
목록전체 글 (127)
sonumb
출처: https://stackoverflow.com/questions/25927660/how-to-get-the-current-function-name How to get the current function name For tracing purpose, I'd like to print out current function name, like the __FUNCTION__ macro in gcc. So that when I have a function func foo () { trace() } it will automatically print out En... stackoverflow.com // 반환: 파일이름, 현재라인, 함수이름 func trace() (string, int, string, err..
개요 및 문제 상황. Go언어에서 동기화 툴로 제공하는 것중 하나가 채널이다. 다만, 채널의 특성으로 인해, 사용할 때 문제 혹은 불편한 사실들이 있다. 다른 누군가가 쓰기 전까지, 읽는 것은 반환되지 않는다.(단, 채널 용량에 따라 반환여부가 결정 된다) 다른 누군가가 읽기 전까지, 쓰는 것은 반환되지 않는다. close(ch)을 하면, 위 두가지 문제(반환되지 않음)이 해결되는가 싶어서, 이를 시도한다. 닫힌 채널에 쓰는 행위는 panic이 발생한다 그런데, 닫힌 채널을 읽는 행위는 잘 실행된다(!) 해결방법 3-1번 상황을 해결하기 위해, 채널을 구성할 때는 full-duplex로 구성한다. 즉 쓰기/읽기를 전용 채널을 각각 선언하고, 닫히는 시점을 잘 정의해야 한다.(대개 다수의 생산자 쓰레드가 ..
개요 다수의 클라이언트 접속과 요청을 각각의 고루틴으로 처리하는 서버가 있다고 하자. 이 서버에서 고루틴이 정상적으로 종료하는 경우는 두 가지 정도가 있다. 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..