背景
最近三年,工作中很大一部分时间是写sql报表。业务很复杂,几十个表。常用的就有十几个。经常表连接达七八个。写得多了,我也很熟练了,但就是足够熟练了,我就越感觉有以下问题困扰我:
- 无法串联excel表进行关联查询,只能导入成临时表来查,这种方法其实是不可取的
- 跨库查询麻烦
- sql语句写起来麻烦,特别是不熟练的人,比如写时间,老是要写格式化语句(主要是针对新手,老手不怕这个)
- 多表关联语句写的很复杂,难以理解和复用
- 难以进行模块切分,方便复用
- 没有编程的灵活性,比如使用查询出来的数据作为入参进行下一步查询,或者进行字符串分割,拼接等更灵活的操作。
- 历史语句不利于保存和检索。保存的sql语句隔一段时间自己打开来看,也看不明白,因为sql语句结构不清晰,不明了。表连接很复杂
- 子查询不是那么的灵活,只能在一个层级里进行,多一层就无法进行子查询了
期望达到的效果
- 更灵活的查询方式,sql结合编程,尽可能用子查询替代表连接(也保留表连接的查询能力,就需要手写sql语句),结构清晰明了,方便代码的维护
- 可视化界面,大部分情况下不需要写sql语句,界面操作即可,只需要聚焦业务,降低sql查询门槛,没基础的人更容易学会查询数据
- 可以有明确的目录结构的保存写的sql语句,方便检索和复用
- 可以生成报表
- 跨平台,安装简单
- 最好还能结合数据大屏实现数据直观展示
可能遇到的困难
- 如何适配多种数据库?不知道好不好做
- 数据库账号密码的管理,安全问题
- 数据量大时的性能和效率问题
- 保存写的语句表结构设计,目前还没考虑清楚
- 数据库通常私密,存在内网。需要在不联网时使用,如果要考虑变现,如何实现授权?
- 一个优雅简洁好用的交互界面也很难设计
- 如何经营和商业变现?
设计思路(逐步补充)
程序定位
- 只做查询功能,不包含删改。因为该程序的一个重要的用户群体是非DBA人员。他们没有扎实的基础和思维,删改危害很大。
- 当然也适用于DBA人员,因为需求就是基于我自身写sql总结的困难。这个程序也应当比直接写sql效率高
- 该程序不是为了替代navicat之类的数据库可视化管理软件,毕竟仅仅只有查询功能。只是补强他们的查询能力。对于DBA人员,二者都需要。非DBA人员只需要该程序
程序架构
由于我后端主要写golang,前端写vue3,我也查了下go有没有其余好用的UI编程框架,热度最高的fyne就是依托答辩。其余热门的本质上也都是web加后端的模式,像wails又只支持Win10及以上。win7的用户量还是很大的。不能放弃。
所以根据我的技术栈,以及兼容性和跨平台的考虑,还是采用BS架构最合适。
具体方案
- golang做后端,负责逻辑处理,数据库查询操作,IO,静态资源代理等操作。
- vue3编写web界面。由go进行代理。
- 数据库保存用户数据。关系数据库搞得定,就采用mysql,搞不定就换nosql。具体还得等表结构设计明白再定
商业变现
这个我不擅长,总体两种方案:
开源模式
劣势
- 对技术能力的要求会比较高,毕竟开源了人家是要看你的代码。
- 如何防盗。就算我的开源协议选得严格点,不允许私自二开。但是架不住很多人和公司不讲武德,我也不可能有精力维权。
- 开源了如何经营变现?授权模式?
优势
- 利于宣传和推广
- 产品肯定更健壮
- 可以有其余程序员参与进来,减轻我的压力
- 安全性更被用户信任,毕竟代码经得起考验,数据库账号密码这么重要的东西是吧
不开源模式
也就是开源模式的优势劣势对调了。
个人倾向
- 我偏向于开源模式,因为我觉得我最大的困难的宣传和推广,没流量,程序再好用也是孤芳自赏,没有意义。如果能有人用,在考虑流量变现啥的也不迟。
- 也希望趁机磨练下自己的技术能力、架构设计能力和项目管理能力。毕竟没有亲自独立完成过大型项目。
- 希望全程公开写代码。然后可以开个直播,不在于赚钱,而是持续不断地曝光这个产品。从构思设计就开始,所以我才直接在博客上写这个专栏。
软件经营模式
提供两种版本:联网版和单机版
联网版
- 需要登录才能使用
- 免费版:功能全部免费使用(也许除了数据大屏展示功能,具体进一步构思)。但是不提供云端保存编程结果的功能,只能保存在本地。
- 收费版:在免费的基础上,提供云端存储功能。具体收费模式待定
- 一律不提供保存数据库密码的功能
- 包升级
单机版
- 功能全齐
- 适用于内网,没有免费版
- 收费模式按年,不包升级
- 绑定主机,一个授权码只能用于一台主机
- 单机版提供保存账号密码功能