Discuz!NT千万级数据量上的两驾马车--TokyoCabinet,MongoDB

在Discuz!NT的企业版设计过程中,处理大数据表一直是一个让人头疼的问题,特别是像主题表 (topic),用户表(user)等,因为对于一个流量和发帖量都很大的论坛而言,在运行几年之后,这两 个表的数据量可能会破千万(注:因为帖子表采用分表机制,所以这里暂未涉及,但出于性能考虑,也提 供了本文中类似的解决方案)。当时考虑的架构设计中有两种思路来解决这种问题:

一种是采用类似MYSPACE的方式,即按一定记录KEY值(比如用户表的UID)来对大数据表中的记录进行 分割,比如前200万用户(即:UID<200w)放入一个表,200-400万的用户放入另一个表,以此类推。 当然可以把几个表都放到一个数据库中,也可以放到别的 MSSQL数据库上或实例上。但这种方案有一些问 题,例如当用户表需要被联表(如LEFT JION)查询时使用,比如我们的帖子表进行分页查询时就需要左 联user表,这时如采用分表或分布式布署就可能面临这样的问题,不仅业务逻辑要变化,就连存储过程中 也要产生不小的变化,这里还不考虑效率上的问题。当然有人建议可以使用数据冗余的方式,比如在帖子 表中冗余用户信息相应字段,但这种方案同样要大幅度的修改即有代码,同时如果用户信息发生变化时, 不仅要更新用户表,还要更新帖子表中的相应冗余字段,如果这两者不同步,就会造成数据显示异常,当 然在数据库层面增加存储成本也是不得不付出的。

第二种就是使用能处理大数据量表格的第三方工具,比如本文所说的TokyoTyrant,Mongodb等,这类 NOSQL软件从一问世就是面向海量数据存储访问的,而且这类软件往往都是开源的,另外通过与打算布署 企业版的用户接触,发现虽然他们的服务器配置很高,但数量即不多,所以就要考虑如何最大限度的复用 已有的机器资源,而这类NOSQL软件往往都是‘性价比’很高的,即用不多的资源(内存,CPU等)就能达 到意想不到的效果。当然我目前对其还是很谨慎的使用,即不会马上把它当做主力数据存储工具,而是辅 助MSSQL数据库工具,所以大家在看完本文后会发现,这两个工具在企业版中的角色顶多就是一个高级的 MEMCACEHD。不过我的想法很简单,就是任何工具和技术,如果不是很了解它或者它很新,那么必定要有 一个“考核期”,如果在‘任间’内它通过考核,才委以重任,如未通过考核,也不会让系统平台承担过 多的技术层面上的‘风险’。

综上所述,最终我把方向放到了TokyoTyrant,Mongodb上,之所以选择了这两个工具,主要基于下面因 素:

1.海量数据的解决方案应该可以跑在LINUX和WINDOW平台上。当然有人会说Mongodb完全可以跑这两个 平台,那还为什么要引入 TokyoTyrant呢?其实这里有一些产品的特殊情况要考虑,比如我们的用户中绝 大多数对于数据的读写比在 4:1,即5条SQL访问中有4条是SELECT操作,1条是CUD操作,这就造成了读写 比例的失衡。虽然Mongodb在读写性能上非常优异和稳定,但在并发读上相对于TokyoTyrant+cabinet还是 有一些差距(注:更多内容参见该链接,然后这只限于在我们产品中压力测试环境下的结果,不具备普遍 性,所以希望大家具体问题具体分析)

2.考虑到有些用户公司是有相应技术储备的,两种方案也便于用户公司进行的技术选型(当然因为采 用接口方式,用户完全可以引入其它第三方的NOSQL工具来实现)。

好了,说了这么多,开始今天的正文吧。

前面说过,该方案使用了接口方式,这里就先看一下相应的接口声明:

时间: 2024-10-03 14:02:34

Discuz!NT千万级数据量上的两驾马车--TokyoCabinet,MongoDB的相关文章

SQL去除重复删除重复数据(千万级数据量)

MYSQL里有五百万数据,但大多是重复的,真实的就180万,于是想怎样把这些重复的数据搞出来,在网上找了一圈,好多是用NOT IN这样的代码,这样效率很低,自己琢磨组合了一下,找到一个高效的处理方式,用这个方式,五百万数据,十来分钟就全部去除重复了,请各位参考. 第一步:从500万数据表data_content_152里提取出不重复的字段SFZHM对应的ID字段到TMP3表  代码如下 复制代码 create table tmp3 as select min(id) as col1 from d

动网.NET论坛和DISCUZ!NT论坛哪个好?

问题描述 动网.NET论坛和DISCUZ!NT论坛哪个好?感觉上动网.NET论坛速度更快一些? 解决方案 解决方案二:看个人喜好解决方案三:如果就这两个程序之间比较的话,竹子举双手双脚赞成DISCUZ好,动网的,说句不好听的,整个就垃圾,不过竹子只用过ASP版的,.NET版的动网论坛不好做评价.解决方案四:DISCUZ!NT的速度很慢,但是相关的资源丰富,如模板等.而动网的.NET版是1.1版本的,所以没用过,个人推荐http://www.dxbbs.com/或http://www.cnvery

Mongodb亿级数据量的性能测试

Mongodb亿级数据量的性能测试,分别测试如下几个项目: (所有插入都是单线程进行,所有读取都是多线程进行) 1) 普通插入性能 (插入的数据每条大约在1KB左右) 2) 批量插入性能 (使用的是官方C#客户端的InsertBatch),这个测的是批量插入性能能有多少提高 3) 安全插入功能 (确保插入成功,使用的是SafeMode.True开关),这个测的是安全插入性能会差多少 4) 查询一个索引后的数字列,返回10条记录(也就是10KB)的性能,这个测的是索引查询的性能 5) 查询两个索引

Discuz!NT 缓存设计简析 [原创]

作为一个社区类型软件,大并发支持和高效稳定运行永远是"硬道理",而有效安全的使用缓存恰恰能起到事倍功半的效果.而.NET本身所提供的缓存机制又显得过于"单薄",比如说订制不太灵活方便, 缓存对象之间层次感不强, 使用时缺乏统一的管理等等.           Discuz!NT缓存产生背景:       在去年五月份我加入Discuz!NT项目组时,发现这个项目当时还未使用缓存机制.主要原因是项目还处于起步阶段,很多东西还只是有想法,但未付诸实施,或还没找到合适的方

实战低成本服务器搭建千万级数据采集系统

上一篇文章<社会化海量数据采集框架搭建>提到如何搭建一个社会化采集系统架构,讲架构一般都比较虚,这一篇讲一下如何实战用低成本服务器做到日流水千万级数据的分布式采集系统. 有这样一个采集系统的需求,达成指标: 需要采集30万关键词的数据  微博必须在一个小时采集到 覆盖四大微博(新浪微博.腾讯微博.网易微博.搜狐微博) 为了节约客户成本,硬件为普通服务器:E5200 双核 2.5G cpu, 4 G DDR3 1333内存,硬盘 500G SATA 7200转硬盘.数据库为mysql. 在这样的

一起谈.NET技术,Discuz!NT 缓存设计简析 [原创]

       作为一个社区类型软件,大并发支持和高效稳定运行永远是"硬道理",而有效安全的使用缓存恰恰能起到事倍功半的效果.而.NET本身所提供的缓存机制又显得过于"单薄",比如说订制不太灵活方便, 缓存对象之间层次感不强, 使用时缺乏统一的管理等等.           Discuz!NT缓存产生背景:        在去年五月份我加入Discuz!NT项目组时,发现这个项目当时还未使用缓存机制.主要原因是项目还处于起步阶段,很多东西还只是有想法,但未付诸实施,或

Mongodb亿级数据量的性能测试比较完整收藏一下

原文地址:http://www.cnblogs.com/lovecindywang/archive/2011/03/02/1969324.html 进行了一下Mongodb亿级数据量的性能测试,分别测试如下几个项目: (所有插入都是单线程进行,所有读取都是多线程进行) 1) 普通插入性能 (插入的数据每条大约在1KB左右) 2) 批量插入性能 (使用的是官方C#客户端的InsertBatch),这个测的是批量插入性能能有多少提高 3) 安全插入功能 (确保插入成功,使用的是SafeMode.Tr

Discuz!NT 2.0正式开源 站长升级维护更灵活方便

12月24日,国内最大的互联网社区产品及服务提供商康盛创想(Comsenz)正式对外开放Discuz!NT 2.0源代码,同时发布的还有该产品的类库文档和数据字典.此举意味着站长针对Discuz!NT进行二次开发和网站整合将变得更为简易快捷. Discuz!NT是Comsenz公司自主研发的基于ASP.net平台的社区软件系统,凭借安全.高效.易用等特点自1.0版本推出以来迅速成长为国内ASP.net论坛产品中的领头羊,同时也吸引了大量原ASP论坛用户的转换.由于特别为高负荷环境进行了各种技术优

Discuz!NT 2.5最新重大漏洞

     正在使用Discuz!NT 2.5或刚升级到Discuz!NT 2.5论坛版本的用户需要关注一下本文的内容,及时到官方网站寻找解决方法. 漏洞说明:Discuz!NT 2.5 是康盛创想(北京)科技有限公司旗下的一款功能强大的基于 ASP.net 平台的社区软件.基于先进的 .Net Framework,默认支持 SQLServer数据库,可扩展支持Access.MySQL等多种数据库,支持IIS5.IIS6.IIS7,安全高效.稳定易用,充分发挥 ASP.net 特性,支持自由选择切