dfcfw / grid

GridFS for Relational database

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

grid

SQL 导入

文件信息表

CREATE TABLE `grid_file`
(
    `id`         BIGINT AUTO_INCREMENT COMMENT '文件 ID',
    `name`       TEXT                               NOT NULL COMMENT '文件名',
    `size`       BIGINT   DEFAULT 0                 NOT NULL COMMENT '文件大小',
    `sha1`       CHAR(40)                           NOT NULL COMMENT '文件 SHA1',
    `burst`      INT      DEFAULT 0                 NOT NULL COMMENT '分片大小(单位:bytes,要和 grid_part.data 配合使用)',
    `done`       TINYINT(1) DEFAULT 0 NOT NULL COMMENT '是否上传完毕',
    `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间(一般代表上传开始时间)',
    `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '更新时间(一般代表上传结束时间)',
    CONSTRAINT grid_file_pk PRIMARY KEY (`id`)
) COMMENT '文件信息表';

文件分片表

CREATE TABLE `grid_part`
(
    `id`      BIGINT AUTO_INCREMENT COMMENT '内容分片 ID',
    `file_id` BIGINT           NOT NULL COMMENT '所属文件 ID',
    `serial`  BIGINT DEFAULT 0 NOT NULL COMMENT '分片序号 (0-n)',
    `data`    BLOB             NOT NULL COMMENT '分片内容',
    CONSTRAINT grid_part_pk PRIMARY KEY (`id`),
    CONSTRAINT grid_part_pk2 UNIQUE (`file_id`, `serial`)
) COMMENT '文件分片';

demo

package main

import (
	"database/sql"
	"os"

	"github.com/dfcfw/grid"
)

func main() {
	db := connDB()
	
	// 创建文件系统
	// gfs := grid.NewFS(db)

	// CDN 缓存目录要先创建好
	dir := "/tmp/grid"
	_ = os.RemoveAll(dir)
	_ = os.MkdirAll(dir, 0644)

	// 创建一个带 CDN 缓存的文件管理:
	// dir 为缓存目录,当文件大于 10240 bytes 才会缓存到磁盘
	gfs := grid.NewCDN(db, dir, 10240)
	file, err := gfs.OpenID(1)
	// file 已经实现了 fs.File fs.FileInfo 接口
	
	// TODO 业务逻辑
}

// connDB 连接数据库
func connDB() *sql.DB {
	// TODO 实现连接数据库
	return nil
}

About

GridFS for Relational database


Languages

Language:Go 100.0%