Repository navigation
설치
| 파일 | 대상 |
|---|---|
bangdb-*-windows-amd64.exe / -windows-arm64.exe |
Windows (이름을 bangdb.exe로 바꿔 PATH에 두기) |
bangdb-*-darwin-arm64 / -darwin-amd64 |
macOS (Apple Silicon / Intel). chmod +x 후 처음 실행 시 "확인되지 않은 개발자" 경고가 나오면 xattr -d com.apple.quarantine <파일> |
bangdb-*-linux-amd64 / -linux-arm64 |
Linux (chmod +x) |
bangdb-*-android-arm64 |
안드로이드 Termux: cp 로 홈에 복사 → chmod +x → ~/bangdb -version |
bangdb-*.aar |
안드로이드 앱 내장 라이브러리 (docs/ANDROID.md) |
SHA256SUMS |
무결성 확인: sha256sum -c SHA256SUMS --ignore-missing |
실행 파일 하나로 셸·서버(-listen)·HTTP API와 웹 콘솔(-http)이 모두 들어 있습니다. BangDB Manager는 "BangDB (Go)" 종류로 -http 주소에 연결합니다.
0.7 — 실 프로젝트 적용 보완 (2026-11-03)
- BangDB Manager 연결: HTTP API에
/v1/*(health·tables·query·stats) 추가 — Manager의 "BangDB (Go)" 연결 종류가 그대로 동작. Basic 인증은 아무 사용자 +-password값도 허용,/v1/stats에 API 요청·인증 거부 수 - CLI: Termux(안드로이드)에서 모든 명령이 "database file is corrupt"로 실패하던 문제 수정(링커가 넘기는 실행 파일 경로를 DB로 오인). 열기 오류에 파일 경로 표시, DB가 아닌 파일을 열 때
-wal을 만들지 않음 - 안드로이드 앱 내장:
mobile/래퍼(gomobile) →.aar, Kotlin/Javacom.knoxxr.bangdb(Database,Tx,Rows,Args,Migrations). CI가.aar를 만들고 예제를 컴파일.scripts/build.sh aar,all에 android/arm64 CLI 추가 (docs/ANDROID.md) - Windows 파일 잠금(
LockFileEx): 두 프로세스가 같은 파일을 여는 것을 막음. 모든 OS에서 두 번째 열기는ErrLocked - 3개 OS CI (테스트·경합 검사·크래시 토처·퍼징·빌드)
- CLI 설정 파일·
BANGDB_*환경 변수·키/비밀번호 파일,-print-config - 서버 모드 기본 쿼리 타임아웃 60초, HTTP 타임아웃·동시 실행 제한, 비밀번호 없는 서버 경고
PRAGMA(user_version,table_info,index_list,index_info,table_list,integrity_check,foreign_keys,journal_mode,page_count,page_size),DB.Migrate- 파일 포맷 호환 픽스처 테스트, 호환성 정책 문서
- 정확한
DECIMAL(p,s)/NUMERIC(p,s)(최대 18자리, 반올림·자릿수 검사, 정확한 합계·평균, 인덱스 지원),CAST(x AS DECIMAL(p,s)) - 계정·역할(read/write/admin, PBKDF2 해시 계정 파일,
-add-user)을 서버·HTTP에 적용 /metrics(Prometheus), 구조화 로그(log_format,log_level), 웹 콘솔(/)- 정기 백업 + 백업 검증(
StartBackups,VerifyBackup,backup_dir/backup_interval/backup_keep) - 트리거(BEFORE/AFTER, INSERT/UPDATE OF/DELETE, WHEN, NEW/OLD, RAISE), 덤프·SQLite 덤프 가져오기에 포함
- 부분 인덱스
CREATE [UNIQUE] INDEX ... WHERE 조건(예: 삭제되지 않은 행만 이메일 유일). 질의 조건이 인덱스 조건을 포함할 때만 플래너가 사용 - 복제본이 받은 프레임을 묶어 fsync 1회로 적용(느린 디스크에서 지연 감소)
- 메모리보다 큰 트랜잭션: 쓰기 트랜잭션이 바꾼 페이지가
Options.TxMemory(CLItx_memory, 기본 64 MiB)를 넘으면 임시 파일로 옮기고 커밋 때 WAL로 스트리밍. 이전에는 1천만 행 표에서DELETE10%(100만 행) 한 문장이 메모리 14 GB를 써 OOM으로 종료됐음./metrics에tx_spills_total - 체크포인트·WAL 복구를 4,096페이지 단위로 스트리밍: 큰 커밋이나 VACUUM 뒤 WAL 전체를 메모리에 올리던 문제 수정(2M 행 VACUUM 최대 RSS 1.7 GB → 0.5 GB). 큰 WAL을 남기고 비정상 종료한 DB도 적은 메모리로 열림
- 1,000만 행
UPDATE/DELETE가 대상 행 전체를 메모리에 모으지 않음(앞의 4,096행만 보관, 나머지는 rowid로 다시 읽음) - VACUUM 후에도 누적 통계(커밋·체크포인트·페이지 읽기 수)가 0으로 돌아가지 않음
- 대용량·장시간 시험(
TestScale1천만 행,TestSoak), 단계별 최대 메모리 보고. 결과는 docs/ROADMAP.md 7절 - Windows: 데이터 밖 1바이트 잠금(다른 프로그램이 파일을 읽을 수 있음), 디렉터리 fsync 생략, 파일 교체 재시도