Skip to content
shinebayPublic

About

Maybe the world's first Open-Source forum or community software which abandon MySQL and using NoSQL(SSDB) as its main data store!

Resources

Stars

154 stars

Watchers

14 watching

Forks

Latest commit

 

History

17 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

技术层面

从mockup构想到页面psd设计,再到HTML+css的编写,以及后端php mvc框架编写和数据逻辑的实现,此程序的前后端都由我一个人编写,因此代码上难免有疏忽之处,希望能予以指出。

前端: 为设计一种美观和简洁的前端UI,前端摒弃了任何UI框架,只引用了jquery,纯手写了一个公共的global.js和base.css,系统图标采用了icomoon的web font,因此前端修改起来非常简单,同时前端引用的库有:

后端: 架设一个常规的简单论坛,其实大家第一反应也就是MySQL中建立4个表,user表存储用户信息,thread表存储帖子信息,reply表存储回复信息,notification表存储用户通知信息,一个论坛后端数据库就做完了,配合php写点基础验证逻辑,加上个memcache缓存帖子、回复、用户等信息,一个最简单的论坛就架设成了。我这次便想尝试一次全新的数据架构:用NoSQL作为主存储去编写一个论坛,最终选中了SSDB作为全站的主存储,SSDB(http://ssdb.io/)简单的说就是一个存储在硬盘上的redis,由于其和redis有相同的使用协议,但内核基于Google的leveldb进行封装,支持十亿级别的数据存储,因而相对于redis这样的内存性数据库而言,其优势不言而喻。

使用SSDB的hset存储用户信息、帖子信息、回复信息,用kv存储一些较为简单的数据结构如通知信息以及一些自增id如reply_id和msg_id等等,使用list控制私信发送频率,使用zset进行全局各类id索引。

相对于mysql,nosql从来都是以性能彪悍著称,受限于作者本人电脑SSD硬盘容量的限制,没能测试千万级帖子的表现,测试中系统生成随机汉字的帖子,每个帖子随机分配3至5个充满随机汉字的回复,在灌满了约150W个帖子和600W个回复后,其性能还是非常彪悍,帖子和回复都是秒开。但在一些特定功能上,nosql还是暴露出了其缺陷,如帖子模糊搜索和根据用户名获取用户uid等功能,这方面还是要借助于MySQL,因此建立了两个MySQL表:user表用于存储用户信息,以便在注册时验证用户名存在、验证邮箱是否存在、根据用户名获取uid,thread表用于帖子标题分词,以便于站内的MATCH AGAINST搜索

在站内搜索方面上,部分网友觉得站内搜索太慢,是不是数据库的问题,在这里说明一下,分词采用的是http://www.pullword.com/的在线分词结果,相对于SCWS这类分词,pullword每天爬行各种语料,在分词结果上可以说是与时俱进,时刻保持着最新的词语结果,可以参见作者这篇博客http://blog.sina.com.cn/s/blog_593af2a70102uw55.html,因此抛弃了SCWS转向pullword,发帖时,系统先进行分词处理,在站内搜索时,系统要分两步进行,先Ajax后端调用pullword api对搜索词进行分词,分词后再对mysql thread表进行MATCH AGAINST处理,因此,时间就耗在远程调用pullword api上,当然也可以换成SCWS时间更快,不过感觉站内搜索还是很鸡肋吧,大家都用site Google命令是不是

自己认为自己写的php框架才是全世界最好的php框架,此程序也是基于自己写的一个很tiny的php框架搭建而成的,系统全局用index.php作为唯一入口,system文件夹中common.php作为全局公用函数,config.php为全局公共配置文件,controller.php为全局公用所继承的父controller,model.php为全局公用所继承的父model,public文件夹存放全站静态文件,application文件夹中controllers文件夹包含全局各种控制文件,db文件夹包含mysql操作类和官方的ssdb类,models文件夹包含全局各种model文件,thumb文件夹用于头像的裁剪的类,views文件夹存放全站模板


安装Monster

  • 由于采用nosql作为主存储,因此Monster不支持虚拟主机,在VPS或服务器上,请先对mysql设定好ft_min_word_len=2,这样方便mysql全文检索。
  • 在MySQL中导入monster.sql
  • 按照ssdb官方文档http://ssdb.io/docs/zh_cn/install.html对服务器安装好ssdb
  • 由于Monster全局采用贴图库作为全站公用图片外链,需在贴图库申请贴图库的token,申请完毕后,按照system/config.php中的注释配置好config.php,Monster便配置完成了。
  • 请不要用windows主机运行,系统伪静态规则,Apache下直接使用系统自带的.htaccess文件,nginx下请在nginx配置文件中写入:
   if (!-e $request_filename) {
   rewrite  ^(.*)$  /index.php?s=$1  last;
   break;
    }
}

About

Maybe the world's first Open-Source forum or community software which abandon MySQL and using NoSQL(SSDB) as its main data store!

Resources

Stars

154 stars

Watchers

14 watching

Forks

Releases

Packages

Contributors

Languages