今天跟大家唠唠我最近在搞的“stefano”项目,也没啥高大上的,就是个小尝试,跟大家分享一下我的折腾过程。
我看到“stefano”这个词,第一反应就是想到Dolce & Gabbana的设计师,我这个项目跟时尚没啥关系。纯粹是因为当时我在研究意大利语,觉得这个名字挺顺口,就拿来当项目代号了。
这项目起源于我一直想搞一个个人知识库,市面上那些笔记软件,要么功能太复杂,要么界面太花哨,总觉得差点意思。我想要的,就是一个简单、纯粹、能够快速记录和检索信息的地方。我就决定自己动手撸一个。
第一步:需求分析。
我把自己的需求一条条列出来:
- 必须支持Markdown格式,方便编辑和排版。
- 要有全文搜索功能,能够快速找到需要的信息。
- 界面要简洁,不要花里胡哨的。
- 最好能支持离线使用,方便随时查阅。
- 数据要能自己掌控,不能受制于人。
第二步:技术选型。
有了需求,接下来就是选择用什么技术来实现。我考虑过几种方案:
- Python + SQLite + Markdown库 + Flask/Django: 这是我最熟悉的方案,开发速度快,各种库也比较齐全。但是,Python的性能相对较弱,对于全文搜索来说,可能不太理想。
- Go + SQLite + Blackfriday + Gin: Go的性能很适合处理高并发请求。而且Go的静态编译特性,也方便部署。但是,我对Go的熟悉程度不如Python,开发速度可能会慢一些。
- Electron + SQLite + Markdown: Electron可以快速构建跨平台桌面应用。但是,Electron的体积比较大,而且性能也一般。
我选择了Go + SQLite + Blackfriday + Gin这个方案。虽然我对Go不太熟,但是为了追求更好的性能和可维护性,我觉得值得尝试一下。
第三步:开始编码。
有了技术选型,接下来就是撸代码了。我先把项目的基本框架搭起来,包括:
- 数据库连接:用SQLite来存储数据。
- HTTP服务器:用Gin来处理HTTP请求。
- Markdown解析:用Blackfriday来解析Markdown文本。
- API接口:定义了几个简单的API接口,用于创建、读取、更新和删除知识条目。
写代码的过程真是痛并快乐着。一边查文档,一边写代码,遇到问题就Google,一步一个脚印地往前走。
第四步:实现全文搜索。
全文搜索是这个项目的核心功能。我尝试了几种方案:
- LIKE语句: 这是最简单的方案,直接用SQL的LIKE语句来进行模糊查询。但是,LIKE语句的性能很差,不适合处理大量数据。
- FTS(Full-Text Search): SQLite自带了FTS模块,可以实现全文搜索。FTS的性能比LIKE语句好很多,但是配置比较复杂。
- 第三方搜索引擎: 可以集成像Elasticsearch或Solr这样的第三方搜索引擎。但是,引入第三方搜索引擎会增加项目的复杂性。
最终,我选择了SQLite自带的FTS模块。虽然配置比较复杂,但是性能和可维护性都比较我花了一些时间研究FTS的文档,然后把FTS集成到了我的项目中。效果还不错,搜索速度很快。
第五步:界面设计。
作为一个后端程序员,界面设计是我的弱项。我不想把界面搞得太复杂,就采用了极简风格。用HTML + CSS + JavaScript写了一个简单的界面,主要包括:
- 一个文本编辑器,用于编辑Markdown文本。
- 一个搜索框,用于输入搜索关键词。
- 一个列表,用于显示搜索结果。
界面虽然简陋,但是基本够用。
第六步:部署上线。
我把项目部署到了我的服务器上。用Docker打包了一下,方便部署和管理。
这个“stefano”项目虽然很小,但是让我学到了很多东西。我不仅巩固了Go和SQLite的知识,还学会了如何使用FTS来实现全文搜索。更重要的是,我体验了从需求分析到编码实现,再到部署上线的整个流程。虽然过程很艰辛,但是结果还是令人满意的。
这个项目还有很多不足之处,比如:界面不够美观、功能不够完善等等。以后有时间,我会继续完善这个项目,让它变得更好用。
这回分享就到这里,希望对大家有所帮助。如果你也想自己动手做一个小项目,不妨从简单的开始,一步一个脚印地往前走,相信你一定能成功!
还没有评论,来说两句吧...