busuanzi icon indicating copy to clipboard operation
busuanzi copied to clipboard

feat: 增加基于sqlite的数据持久化能力

Open eryajf opened this issue 1 year ago • 12 comments

增加了数据持久化的能力。 基于sqlite管理,简单,轻便,数据也方便管理。 可能部分逻辑还有问题,作者可进行优化调整。

另外就是,不是特别了解为什么路径之类的信息要做加密处理,其实基于当前数据,我还有一个想法,那就是增加一些丰富的能力,比如增加一个网站访问前十的文章的排序以及他们的浏览量。

eryajf avatar Dec 07 '24 15:12 eryajf

路径 MD5 本身主要是为了 一些特殊字符网址的处理, 比如 网址中携带了 ':',在大多数的 redis manager中,会将其解析为 folder。同时怕恶意攻击, 比如用户可能恶意伪造 长路径, 造成一些 大 Key 的问题。

可能可以考虑, 再创建一个 index 表, 以 hash 表的形式存储一个 MD5 对应的 path

soxft avatar Dec 09 '24 06:12 soxft

那你这边有什么想法,是你这边来做下改造吗(因为我对这块儿还不是很熟悉) 另外我发现从官方busuanzi同步下来的数据,貌似会比实际展示的少一点,感觉busuanzi官方也是有定时任务往持久存储里刷的。

eryajf avatar Dec 09 '24 06:12 eryajf

那你这边有什么想法,是你这边来做下改造吗(因为我对这块儿还不是很熟悉) 另外我发现从官方busuanzi同步下来的数据,貌似会比实际展示的少一点,感觉busuanzi官方也是有定时任务往持久存储里刷的。

https://gitee.com/buru/busuanzi/blob/master/src/main/java/busuanzi/storage/MongoClient.java 官方似乎是用了 MongoDB ?没怎么写过 java, 感觉似乎 还是只能做单项同步备份? 因为目前是切换到 Hyperloglog 上了, 再使用 set 存储应该是不可能了

你觉得要不是 加一个单项的定时备份, 从 redis 同步至 Sqlite ? 然后后期可以提供一个 工具来实现 从数据库中 恢复至 redis 这样?

soxft avatar Dec 09 '24 06:12 soxft

你觉得要不是 加一个单项的定时备份, 从 redis 同步至 Sqlite ? 然后后期可以提供一个 工具来实现 从数据库中 恢复至 redis 这样?

MongoDB感觉就没必要了,引入了更大更重的组件,而且这个项目数据不会很多,所以sqlite特别合适,用户后期迁移或者备份也会非常简单。 然后我说下本地提交代码的思路:

  1. 项目启动之后,会从数据库读取数据,然后把数据刷到redis里边(是增量)。
  2. 每两分钟会读一下redis的数据,往数据库对齐一下。
  3. 应用关闭时,也会执行一次sync。

所以,无论之前是使用的redis,还是什么,都没有引入破坏性影响。比如原来在运行的应用,升级这个新的版本之后,应用启动两分钟后,会把redis的数据sync到sqlite,自此以后,就可以以sqlite的数据为准了。

你那边可以拉一下开发环境,验证一下我说的这个流程,也有可能存在我没想到的地方。

eryajf avatar Dec 09 '24 07:12 eryajf

你觉得要不是 加一个单项的定时备份, 从 redis 同步至 Sqlite ? 然后后期可以提供一个 工具来实现 从数据库中 恢复至 redis 这样?

MongoDB感觉就没必要了,引入了更大更重的组件,而且这个项目数据不会很多,所以sqlite特别合适,用户后期迁移或者备份也会非常简单。 然后我说下本地提交代码的思路:

  1. 项目启动之后,会从数据库读取数据,然后把数据刷到redis里边(是增量)。
  2. 每两分钟会读一下redis的数据,往数据库对齐一下。
  3. 应用关闭时,也会执行一次sync。

所以,无论之前是使用的redis,还是什么,都没有引入破坏性影响。比如原来在运行的应用,升级这个新的版本之后,应用启动两分钟后,会把redis的数据sync到sqlite,自此以后,就可以以sqlite的数据为准了。

你那边可以拉一下开发环境,验证一下我说的这个流程,也有可能存在我没想到的地方。

等我稍后看下

soxft avatar Dec 10 '24 00:12 soxft

@soxft 老哥有空看一下?我还想着等你这边打了包,部署一下子呢

eryajf avatar Feb 17 '25 12:02 eryajf

@soxft 老哥有空看一下?我还想着等你这边打了包,部署一下子呢

实在不好意思,最近一直在忙实习和毕设答辩。如果你急的话,可以先在 Fork 的仓库 合并自己的修改,然后改一下 WorkFlow 文件, 并在仓库设置中打开 Action 的 R/W 权限,然后发布一个 Release 就会自动触发 Action 的 Build.

soxft avatar Feb 17 '25 14:02 soxft

@soxft 老哥有空看一下?我还想着等你这边打了包,部署一下子呢

实在不好意思,最近一直在忙实习和毕设答辩。如果你急的话,可以先在 Fork 的仓库 合并自己的修改,然后改一下 WorkFlow 文件, 并在仓库设置中打开 Action 的 R/W 权限,然后发布一个 Release 就会自动触发 Action 的 Build.

哈哈,没事儿,我再等等吧,主要不太想单独再开出来,或者晚点我看看有时间了自己鼓捣一下也可以

eryajf avatar Feb 17 '25 14:02 eryajf

作者你好,我这边打算自建busuanzi了,然后想请教下,你现在这个页面的代码是又单独调整过吗,是否方便分享下:

image

eryajf avatar Mar 10 '25 14:03 eryajf

作者你好,我这边打算自建busuanzi了,然后想请教下,你现在这个页面的代码是又单独调整过吗,是否方便分享下:

image

https://github.com/soxft/busuanzi-frontend

在这里,但是可能要自己摸索一下,适配的是 vercel

soxft avatar Mar 11 '25 03:03 soxft

作者你好,我这边打算自建busuanzi了,然后想请教下,你现在这个页面的代码是又单独调整过吗,是否方便分享下: image

soxft/busuanzi-frontend

在这里,但是可能要自己摸索一下,适配的是 vercel

尝试构建了一下,失败了。是否方便单独分享下这个html文件,我这边没有打成功

eryajf avatar Mar 11 '25 06:03 eryajf

作者你好,我这边打算自建busuanzi了,然后想请教下,你现在这个页面的代码是又单独调整过吗,是否方便分享下: image

soxft/busuanzi-frontend 在这里,但是可能要自己摸索一下,适配的是 vercel

尝试构建了一下,失败了。是否方便单独分享下这个html文件,我这边没有打成功

提示什么呢,这个得在 vercel 部署,不能静态打包,静态的话要自己改一下

soxft avatar Mar 11 '25 07:03 soxft

实测 site_uv 在这个场景里不太成立,忽略这个pr吧。

eryajf avatar Jul 20 '25 06:07 eryajf