也许,这是第一款基于 NoSQL 编写的 php 开源论坛程序 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Reign

也许,这是第一款基于 NoSQL 编写的 php 开源论坛程序

  •  4
     
  •   Reign 2016 年 2 月 28 日 3997 次点击
    这是一个创建于 3709 天前的主题,其中的信息可能已经有所发展或是发生改变。

    爱码士倒计时页面: www.2ma4.com/countdown
    一直以来,我就想打造一个专为极客和码农们热烈交流的社区,纵观国内 IT 论坛,基本都是一个帖子下面平行分布各种回复,每个回复之间通过 @相连接,有时经常都要找半天这个人到底是在回复谁?比如 ruby-china , phphub , V2EX , cnodejs , golang 中国 等等,这些社区都做得很精美小巧,但是,却难以将回复者之间的关系调动活跃起来。
    去年 8 月份,我便开始动手编写“爱码士”这个论坛,我希望回复者能够像网易盖楼那样,一层一层彼此热情高涨,在设计过程中我参考了网易盖楼和 disqus 等网站的盖楼设计,但这些设计都不是太完美,逐渐向内缩进的盖楼意味着盖楼的楼层数始终有个最大值,印象中网易盖楼到 70 层时便塌楼了,因此,我设计了一种新的“堆栈式”盖楼设计:
    2ma4
    盖楼一层层向上推进,理论上支持无限多的楼层
    在前端方面,码农们眼中从来都是干净、整洁、纯粹的东西是最美的设计,因此,我将爱码士整个论坛都设计的非常干净简单:
    帖子页:
    2ma4
    站内私信发送:
    2ma4
    个人 profile 页:
    2ma4
    在系统架构上,爱码士使用了经典的 MVC 架构,这个 MVC 也是内置在自己编写的一个很小巧的 php 框架中,系统存储采用了国人开发的一款基于 Google leveldb 的 nosql : ssdb ( http://ssdb.io/zh_cn ), ssdb 简单的说就是一个存储在硬盘上 redis ,其使用协议和 redis 相同,但由于数据全部存储在硬盘上,并且支持亿级数据,因而扩大了容量的同时大幅降低了成本。相对于传统的 php+MySQL+memcache(or filecache)后端设计, ssdb 可以多出很多特性,比如 setx 可以限制用户频繁对一个帖子进行回复:爱码士将每个人对于一个帖子的回复 setx 一个有存活时间的 flag ,在这个 flag 存活期内,用户无法再对这个帖子进行回复。但用户发送私信行为不能用 setx 进行限制,不可能让用户每隔 10 分钟发送一条私信吧,万一有多条连续重要的私信呢,这时,借助于 ssdb 的 list 特性,我们可以为每个用户发送私信的时间戳设置一个队列,尾部入栈,顶部出栈,这样,用户在规定时间内发送次数多于某个预设值时阻止发送。
    在盖楼的数据库设计方面,为了达到回复内容的可控性,我没有把回复 HTML 写死在数据库里,而是将回复 rely_id 以 json 形式存在 hashmap 中
    系统帖子排序分为“默认排序”和“最新帖子”,默认排序是按照 stackoverflow 的算法,感谢阮一峰老师提供的这篇文章: http://www.ruanyifeng.com/blog/2012/03/ranking_algorithm_stack_overflow.html 爱码士的默认排序也是按照这篇文章中的算法进行排序的。
    整个爱码士编写大概耗时半年,其中个人感觉最难的就是私信发送系统了,私信没有采用 websocket , php 不适合干这个,也没有采用长轮询的方式,而是 js setinterval 定时请求,通过 jquery trigger click 刷新按钮请求服务器,由于第一次使用 nosql 编写这个在线聊天系统,可能会有考虑不周的 bug 出现。
    系统前端只引用了 jquery 库,为了界面美观干净,没有使用臃肿的 bootstrap ,全站公用一个 global.js 和 base.css ,站长二次开发的时候会很方便查看代码
    从 mockup 构想,到 HTML 和 css UI 设计,然后是后端架构和数据库设计,到最后的 js Ajax 前后调用,自己花了半年的时间完成,希望大家能尊重劳动成果,一个人开发所以 bug 难免,加之第一次使用 ssdb ,希望大家能抱着平和的态度指出 bug ,目前倒计时页面已经放出,系统目前 PC 版已经制作完成, mobile 端正在制作中,待 bug 修复完毕后,我会将 PC 端代码以安装包形式上传至 github 供站长二次开发和安装

    第 1 条附言    2016 年 3 月 5 日
    看不到图片可以参考我在 oschina 上发的帖子: http://www.oschina.net/question/571926_2154048
    15 条回复    2016-03-04 19:37:13 +08:00
    alwayshere
        1
    alwayshere  
       2016 年 2 月 28 日
    支持一下,界面设计得很赞
    stanhou
        2
    stanhou  
       2016 年 2 月 28 日
    什么 J8 玩意儿
    movtoy
        3
    movtoy  
       2016 年 2 月 28 日
    5 分钟没打开
    cdlcm
        4
    cdlcm  
       2016 年 2 月 28 日
    赞一个!是否开源
    movtoy
        5
    movtoy  
       2016 年 2 月 28 日
    你列举的这几个论坛都够蠢的。。

    回复里各种回复,看的真 jb 乱。

    微博,知乎多少年前就把回复的回复做成对话形式了。

    搞技术的人,做产品,说真的,不行!
    kisshere
        6
    kisshere  
       2016 年 2 月 28 日   2
    @movtoy 也不能这么打击别人的积极性吧,一个能开源的社区至少证明作者的苦心和情怀,况且“回复里各种回复,看的真 jb 乱”哪里乱了,感觉挺新颖的啊
    ericls
        7
    ericls  
       2016 年 2 月 29 日 via iPhone
    做得很好!
    qianmeng
        8
    qianmeng  
       2016 年 2 月 29 日 via Android
    做的不错,很有路,加油
    tlv2013
        9
    tlv2013  
       2016 年 2 月 29 日 via Android
    不错,加油
    yao978318542
        10
    yao978318542  
       2016 年 3 月 1 日
    居然打不开!是 login
    micookie
        11
    micookie  
       2016 年 3 月 1 日
    界面上乍一看、有点像 weibo 、

    不错期待上线。
    heige853
        12
    heige853  
       2016 年 3 月 2 日
    @micookie 像新浪微博+1
    strwei
        13
    strwei  
       2016 年 3 月 4 日
    开源论坛程序????
    lcnr
        14
    lcnr  
       2016 年 3 月 4 日
    我晕,等了 4 天了,结果就因为贴图库被办,图片打不开就延期 7 天?闹着玩呢?
    miao
        15
    miao  
       2016 年 3 月 4 日 via Android
    图片能否重新发下
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1667 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 61ms UTC 16:21 PVG 00:21 LAX 09:21 JFK 12:21
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86