goyoubbs 代码释疑

By at • 327次点击
冒烟的蘑菇

getold 目录是做啥用的?数据迁移吗? 另外对于youdb 的使用,是不是有点?不太正确啊~

有大量的类似如下代码:

db.Hset("article", aidB, jb)

db.Zset("article_timeline", aidB, aobj.EditTime)

db.Zset("category_article_timeline:"+strconv.FormatUint(aobj.Cid, 10), aidB, aobj.EditTime)

db.Hset("user_article_timeline:"+strconv.FormatUint(aobj.Uid, 10), youdb.I2b(aobj.Id), []byte(""))

db.Zincr("category_article_num", youdb.I2b(aobj.Cid), 1)

一则忽略了错误,不太符合 golang 最佳实践,按说站长也是用 goland 写代码的啊,看着泛黄的warn提示就木有点强迫症吗?~^_^ 二则这里的每个 db 操作,内部都是单一事务,实际上整体却是分开的,不仅性能弱点,好像也不太好?

个人拙见。。。如果有不当的地方,望见谅


goyoubbs, 释疑, 代码


  1. getold 是从原 PHP 版迁移数据,那么久了,该迁的迁完了
  2. 大量的 db.x 代码是从 SQL 到 NoSQL 转移的一个结果,当你尝试把一个 MySQL 的 blog 程序,用 Redis 替换时,你也会面临一些问题,并可能也作类似的操作。原来索引、排序都是由 MySQL 来完成,现在得自己构造数据结构,供搜索、排序...
  3. 早期的 goland 没对不处理 error 的语句“划黄线”,后来懒得从头修复,在一些出错可能性很小的地方没对 err 判断
  4. boltdb 的事务压根没用上,因为没有把一个完整的操作放在一个事务里,技术上是可以放在同一个事务里,但它简单接口 b.Put(k, v)+b.Get(k),使程序代码更复杂,youdb 也就需要独立出来,这也是上面的 第 2 条决定,要在一方面取得便利,在另一方面就添加了麻烦

goyoubbs 从 MySQL 转为嵌入式的 NoSQL 的初衷是摆脱独立的数据库服务,即开即用的绿色小程序。

参考

youbbs at 2020-02-24 21:00
1

刚通篇读了一遍~~~的确,迁移时会有各种历史遗留问题~

站长似乎就是用 boltdb 实现了 redis 的 Hash 和 sorted set 两种数据结构~

想咨询一下站长自己的实际使用,现在日均大约多少PV,占多少内存和CPU,好使吗?~ ^_^

冒烟的蘑菇 at 2020-02-24 21:39
2

带分词的 248MB,没带分词 10MB 左右,单核 CPU 大多(读)在 0.3%,偶尔写 0.7%

这里 https://www.youbbs.org/t/3210 9 提到用 for 无暂停循环写,CPU 占用 7% 左右

youbbs at 2020-02-24 22:32
3

刚刚还特意重启了一下??????哈哈哈哈哈哈哈哈哈

这个内存占用非常非常低了,加一个nginx 就是全部的网站了~看得出站长对内存很在意啊,看到代码里各种节省内存的奇技淫巧~我个人不太在意内存,更多在意可读性,有点想重构的冲动~ ^_^

冒烟的蘑菇 at 2020-02-24 22:40
4

@冒烟的蘑菇 今晚更新了几次程序,自然重启。当你面临单机资源紧缺时也会考虑程序各方面的占用,单机资源有上限,老板是期望无上限。用自己喜欢的技术重写一个好。

审核也好麻烦,看来要做一个信任用户权限。

youbbs at 2020-02-24 23:24
5

跑了一天

7801 root      20   0  993872 258940  33376 S  0.3 25.5   0:37.33
---
8269 root      20   0   21160   8660   3568 S  0.3  0.9   1:07.06
youbbs at 2020-02-25 20:17
6
登录 后发表评论