SQLiteFileMana
SQLiteFileMana copied to clipboard
将硬盘中数千万零碎资源文件存储到 SQLite 的 BLOB 类型字段中,并能对外发布 HTTP 服务供访问。
SQLiteFileMana
> v2.2(发行版) — 望山010 — 2023年 03 月 31 日
版本新特性:
:star: Server 程序新增适配了 Windows Server 2008、Windows 7、Linux
:star: Server 程序使用 TypeScript 进行重构
:star: 新增资源库的文件搜索功能
:star: 支持了 temp/fileDB 包含子文件夹
:star: 新增高级管理工具,允许对数据库悬空文件进行清理
:star: WinUI-win32-x64 程序,可免费使用至 2023年 05月 01日
信息 | 描述 |
---|---|
国内镜像 | https://gitee.com/WangShan010/SQLiteFileMana.git |
GitHub | https://github.com/WangShan010/SQLiteFileMana.git(没有实时维护,可能会有版本滞后) |
最新版本 | v2.2 2023 年 03 月 31 日 |
交流群 | QQ交流群:199800258 |
作者 | WangShan010(QQ:2394837320) |
一、🐯 项目简介
将硬盘中【数千万零碎文件】存储到 SQLite 的 BLOB 类型字段中,并能对外发布 HTTP 服务供访问。主要用于 WebGIS 运维,是一款易用的 GIS 资源存储分发程序。
项目包括两个子程序:
- 服务端核心程序:源码完全开源,个人与企业可 100%免费使用,但需保留原作者署名
- WinUI 用户操作程序:简单易用便于运维人员进行数据管理
有任何问题,或者想要的功能,可以在 加 QQ 群:199800258 提给作者。
欢迎白嫖!欢迎试用程序,提交 BUG!欢迎扒源码交流学习!
😜 给项目点点 Star 吧,这对我真的很重要!
功能:
- 可取代 Nginx、Tomcat、Wamp;在本机启动一个轻量级 Web 服务器,可以将 Web 项目的静态页面资源部署到 【http://localhost:3000/】。
- 管理上千万的零碎的 GIS 静态文件资源,包括:img瓦片资源、.terrain地形资源、.b3dm 倾斜模型等
软件特点:
- 可通过操作面板扫描本地文件夹,导入数以千万的文件数据,进行统一压缩,以 BLOB 类型存储在一个 SQLite 数据库文件中,迁移(备份)数据时能极大提升文件复制速度。
- 支持将资源数据库中的文件数据发布成 HTTP 服务,为文件的分发提供便利。
- WinUI.exe程序,通过友好的操作界面,使用纯 HTML ,仿 window 10 的资源管理器 。
软件界面:
![主界面](https://sqlite-file-mana.oss-cn-hangzhou.aliyuncs.com/Release/Doc/demo.gif)
下载地址:
文件名 | 下载地址 | 版本号 |
---|---|---|
Server-win-x64 | https://sqlite-file-mana.oss-cn-hangzhou.aliyuncs.com/Release/Server-win-x64.rar | v2.2(发行版) |
Server-linux-x64 | https://sqlite-file-mana.oss-cn-hangzhou.aliyuncs.com/Release/Server-linux-x64.rar | v2.2(发行版) |
WinUI-win32-x64 | https://sqlite-file-mana.oss-cn-hangzhou.aliyuncs.com/Release/WinUI-win32-x64.rar | v2.2(发行版) |
Windows 使用指南:
- 第一步:双击启动:Release\Server-win-x64\app.exe
- 第二步:双击启动:Release\WinUI-win32-x64\WinUI.exe
linux 使用指南:
- 执行命令:【./app】
二、🚀愿景
前言:我是GIS行业的一名普通程序🐶,喜欢追逐新鲜的技术,渴望做一些好玩、有用的东西。这项目是我开源的第一个作品,虽然技术能力有限,但很高兴有这么多人能 Start 我的项目,非常欢迎有时间有精力的小伙伴能与我一起构建这个项目。
1、管理 GIS 海量数据
① 有人问:为什么不使用【mongodb】或者其他更高级的【分布式文件系统】管理数据 ?
答:这些技术方案的性能当然非常强大,但还需要进行大量的环境部署工作。而我只希望能有一个轻量级的资源托管程序,把我的 WebGIS 项目直接存放在我的 U 盘里,无需部署环境和安装程序,一点击就能启动。点击拷贝,仅需要10分钟,很快就能部署到云服务器上。甚至可以把这个程序直接部署到 【安卓平板】上,在断网环境下使用 Cesium Web应用。
② CesiumLab 也有散列文件转紧凑文件的功能,甚至有能一站式发布 HTTP 服务等强大的功能,这个项目是重复造轮子吗?
答:我也有过这个困惑,但一步步完善这个项目后。我的编程技能是还是有了成长的。至于重复造轮子的问题,我发现网上还是 没有好用 的资源托管程序(开源)。而 JunFang 、BaoMi 项目更看重的是 数据安全性以及程序 源码的可控性 。至少我的领导是不会允许我把 CesiumLab 软件安装到内网 BaoMi 机的服务器上。而这个 SQLiteFileMana 项目,可以作为一个方案补充。
2、技术路线
③ 项目采用的 Sqlite 存储方案是 MbTiles 吗?
答:不是。MBTiles 仅支持矢量或图像瓦片数据,其通用性较差。本项目借鉴其数据库结构,另设计了一套简易的表结构规范(具体参见源码),新的存储方案性能与 MbTiles 无区别。
④ 关于全平台
答:开发初衷是这个服务程序是可以的兼容运行在【Windows、Linux、安卓】上的。
NodeJS 技术体系中的【PKG】和【Electron】是两个令人激动的工具,他们使 JavaScript 能运行在多平台的系统上,甚至构建出:
在 Windows 系统上,能直接访问磁盘的 win 窗体程序
在 Android 系统上可运行的 arm 程序包 >
3、使用说明
⑤ 这个程序目前还有什么缺陷吗?
答:有的,这个项目目前是个人独立开发做的,整体架构略显粗糙。其中,WinUI 程序基于 Election 开发,即便里面也没有多少业务代码,打包后的程序仍然有 200MB 的大小。后期再想办法优化这个问题吧。
⑥ 软件是免费使用吗?
答:本项目于2021年8月发起,作者耗费大量业余的时间、精力进行开发。软件免费使用,包含两个独立的程序:服务端程序、操作面板程序,如下:
Server-win-x64.exe
应用程序的核心服务程序,包含了:数据库访问、文件管理、权限管理、发布 HTTP 静态资源等后端功能模块。代码完全开源,允许其他开发者基于主版本进行二次开发、业务功能拓展、数据安全模块拓展,但需保留作者署名。
WinUI-win32-x64.exe
为运维人员开发的一个管理资源库的操作面板,基于 Election 开发,可直接弹起系统自带的 【选择文件】、【选中文件夹】对话框,更便于用户操作,需要在本机上使用。后续会继续进行新功能的开发、修复BUG,不定期升级,代码闭源,每 2个月发布一版免费使用的发行版,也可购买专业版。
备注:如果您是具备基本的开发能力的程序员,阅读源码后完全可以使用服务端暴露出的接口调用全部功能。
三、🐨技术选型
技术 | 名称 | 官网 |
---|---|---|
PKG | NodeJs 程序跨平台打包工具 | https://www.npmjs.com/package/pkg |
NodeJs | NodeJS V16.14.2+ | http://nodejs.cn/ |
Koa2 | web 后台开发框架 | https://koa.bootcss.com/ |
SQLite3 | 是一款轻型的本地数据库 | http://www.sqlite.org/ |
五、🐷 开发指南
1、开发指南
cnpm install pkg -g
2、测试平台
性能测试:SQLiteFileMana\Projects\Server
平台
系统:windows 10
硬件:i7-10875H、M2 1T固态
素材:
- DEM-wordHeights (3.11GB;2,800,297文件)
- DOM-google (1.39GB;3086文件)
3、建库性能测试
我们在代码层面对 SQLite【数据建库】操作做了非常多的优化。包括:SQL 语句聚合、开启事务、多线程优化等。单线程 insert 平均速度为【1千个文件 / 秒】,多线程 insert 【6千个文件 / 秒】的极致优化。
目前制约性能的瓶颈主要是计算机物理硬盘的读写速度
测试平台 | 测试项 | 结果 |
---|---|---|
WinRAR | 131,584 个 .terrain 地形文件;.rar 格式,存储方式压缩 | 81s |
Server | 131,584 个 .terrain 地形文件;开启4线程,建库 | 32s |
4、读取性能测试
将文件存入 Sqlite 再读出来,当文件总数特别大时,会不会有性能损失呢?这里直接与业界公认最强 HTTP 服务器 Nginx 做对比。
数据库已经对常用字段建立索引了,经测试,相比于直接将海量散列文件放在 nginx 等服务器目录的传统方式,性能相差无几
因此完全无需担心系统的性能问题
测试平台 | 测试项 | 结果 |
---|---|---|
nginx | 单线程,循环 get 请求 1W 次,2kb .terrain地形数据 | 9.1s |
Server | 单线程,循环 get 请求 1W 次,2kb .terrain地形数据 | 10.8s |
测试平台 | 测试项 | 结果 |
---|---|---|
nginx | 50并发,循环 get 请求 200 次,2kb .terrain地形数据 | 6.1s |
Server | 50并发,循环 get 请求 200 次,2kb .terrain地形数据 | 5.2s |
测试平台 | 测试项 | 结果 |
---|---|---|
Server | 全球 0-12 级MapBox 卫星瓦片,83.2 GB共计 2236 万零碎文件的资源库,随机读出某个瓦片 | 7ms |
六、❓ 应用场景
1、GIS 数据托管
在 Cesium 开发开发过程中,地理资源大都以切片的方式显示地图:
(1)影像地图:预生成一定规格的地图切片【.png】缓存在服务器,用于响应客户端的地图请求。
(2)地形数据:将原始【.tif】地形数据,加工为【.terrain】文件
(3)3Dtile:三维场景中模型的 LOD 格式
软件系统开发完成后,都面临着一个残酷的现实:
将这些数以千万的零散地理数据文件向服务迁移、备份是一件很痛苦的一件事。
例如:迁移一份2.5GB的全球【.terrain】地形数据,零散文件共计
2, 800, 297个文件,平均每个文件8kb大小,直接拷贝,则需要大约65分钟,
即便使用 WinRAR 软件压缩后再迁移,压缩也最快至少需要 38分钟,
移动压缩包之后仍需解压。
// 硬件环境:金士顿 M.2 SSD,最大传输速度:1.2GB/s
使用 SQLiteFileMana 程序,你可以花费 38分钟,进行散列文件的建库, 得到一个 2.6GB 的单文件资源包,然后可以花费 5秒 的时间,将你的数据迁移和部署到任何机器。
2、数据安全加密
在很多中小型公司的 WebGIS 项目部署时,常将 高精度地图瓦片、3Dtiles 的散列文件直接放到 Nginx,经常很多个项目的资源数据都放到一台云服务器上,运维人员可直接访问原始数据,这时数据安全性无法得到保证。
sqlite 数据库是可以加上密码的,如果将 数据库密码 和 服务器机器码 进行绑定,即便资源包直接被拷贝走了,也不用担心数据泄露丢失。
七、🤝 其他
- WangShan010 代码贡献者,项目创建者
如果您觉得还不错请在右上角点一下 star,帮忙转发,谢谢 🙏🙏🙏 大家的支持是开源最大动力