불변 파일 스토리지
8869 단어 programmingdatabasesqlnode
많은 개발자들이 보안 문제를 해결하기 위해 블록체인 기술로 눈을 돌리고 있다고 생각합니다. 프로젝트의 모멘텀은 가파른 학습 곡선과 블록체인 트랜잭션 운영 비용으로 인해 곧 느려집니다.
데이터베이스와 같은 기존 기술의 보안을 개선함으로써 개발자는 익숙한 스택을 계속 사용할 수 있습니다. 변경 불가능한 데이터베이스는 중요한 파일을 저장하는 데 적합합니다. bSQL 언어를 사용하면 변경할 수 없는 파일을 쉽게 저장할 수 있습니다.
Immutable data is stored in "pen" not "pencil" and you wouldn't sign a contract in pencil.
데모
이 게시물은
Node
를 사용하여 bSQL에서 불변 파일 저장소를 설정하는 방법을 보여줍니다. 전체 코드는 GitHub에서 찾을 수 있습니다.예제 애플리케이션의 기본 워크플로를 정의해 보겠습니다.
면책 조항: 저는
Node
에 비교적 익숙하지 않아 코드를 개선하는 데 도움이 되는 의견과 제안을 자유롭게 할 수 있습니다.데이터베이스 설정
파일을 불변으로 저장하려면 불변 데이터베이스가 필요합니다. bSQL 커뮤니티 슬랙 채널은 설정을 도와줄 엔지니어에게 직접 액세스할 수 있게 해주며, slack에 가입하면 무료 bSQL 인스턴스에 대한 액세스 코드를 받게 됩니다.
연결 설정
우리는 데이터베이스와 직접 작업할 것입니다. 그렇게 하려면 node connector 이 필요합니다. 현재 버전은
3.20.0
이지만 최신 버전을 설치해야 합니다. 패키지에는 protobuf가 필요하므로 수동으로 설치하는 경우 npm install google-protobuf grpc
AND npm install mdb-server
를 실행해야 합니다.이제 패키지를 가져올 수 있습니다.
import * as mdb from "mdb-server";
연결을 설정합니다.
let conn = await mdb.CreateConnection(
{
username: "your_username",
password: "your_password",
serverAddress: "0.0.0.0",
serverPort: 5461,
databaseName: "master",
parameters: new Map([["interpolateParams", true]])
}
)
// Connect to the database
await conn.connect()
컨테이너 구축
설명과 해당 파일을 저장하기 위해 우리create a new database와 블록체인은 설명을 파일에 연결합니다.
await conn.exec(`CREATE DATABASE ${dbName}`)
bSQL에서 블록체인은 SQL 테이블과 같습니다. 다양한 블록체인 유형이 있으며, 우리는
HISTORICAL PLUS
를 사용할 것입니다. CREATE BLOCKHAIN 명령으로 생성된 블록체인에는 다음 열이 있습니다.id는 삽입할 때마다 증가하는 기본 키입니다.
file_id는 파일 저장소에 저장된 해당 파일을 참조합니다.
description은 파일을 설명하는 묶음 문자열입니다.
await conn.exec(`CREATE BLOCKCHAIN ${dbName}.${blockchainName} HISTORICAL PLUS (
id UINT64 AUTO INCREMENT PRIMARY,
file_id UINT64 FOREIGN KEY [document_store.sys_file, sys_file_id],
description STRING PACKED)`)
데이터베이스에 로컬 파일 저장
bSQL에는 파일 저장소가 내장되어 있습니다. 이렇게 하면 파일을 저장하기가 매우 쉽습니다. 일단 저장된 기존 파일을 삭제하거나 업데이트할 방법이 없습니다. 이렇게 하면 중앙 기관이 중요한 문서를 불법적으로 수정할 수 없습니다.
이 명령은
blockpoint.png
디렉토리에 있는 파일app
을 저장합니다. 응답을 사용하여 file_id
및 despcription
를 참조 테이블에 저장합니다.let resp = await conn.storeFile(imageName, "app/blockpoint.png", "png")
await conn.exec(`INSERT ${dbName}.${blockchainName} (file_id, description) VALUES
(?, ?)`,
[resp.getLastInsertId(), description])
데이터베이스의 유효성 확인
bSQL의 데이터는 해시되고 함께 연결됩니다. 재계산 해시를 확인하고 CHECK VALIDITY을 실행하여 삽입 시 저장된 해시와 비교할 수 있습니다.
resp = await conn.exec("CHECK VALIDITY")
파일 내보내기 및 로컬 디렉토리에 저장
파일 내보내기는 2단계 프로세스입니다. 파일은
app/exports/out_image.png
가 호출되면 resp.saveFile()
에 저장됩니다.resp = await conn.exportFile(imageName, "app/exports/out_image.png", "png")
await resp.saveFile()
파일 버전 관리
문서에 수정 사항이 있는 경우 파일 업데이트를 위해 이 애플리케이션을 어떻게 확장할 수 있습니까?
사용 사례:
새 파일을 저장하고 참조 블록체인의 AMEND 명령문을 실행하기만 하면 됩니다. 이렇게 하면 새 버전과 이전 버전에도 액세스할 수 있습니다.
이전 버전에 어떻게 액세스합니까?
이전 버전의 데이터베이스와 함께 작동하도록 데이터베이스 세션을 설정할 수 있습니다. 확인하는 것이 좋습니다.
Reference
이 문제에 관하여(불변 파일 스토리지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/cassidymountjoy/immutable-file-storage-4lk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)