Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

eryajf
Copy link

@eryajf eryajf commented Dec 7, 2024

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

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

@soxft
Copy link
Owner

soxft commented Dec 9, 2024

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

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

@eryajf
Copy link
Author

eryajf commented Dec 9, 2024

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

@soxft
Copy link
Owner

soxft commented Dec 9, 2024

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

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

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

@eryajf
Copy link
Author

eryajf commented Dec 9, 2024

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

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

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

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

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

@soxft
Copy link
Owner

soxft commented Dec 10, 2024

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

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

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

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

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

等我稍后看下

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants