欢迎投稿

今日深度:

CoolHash数据库引擎压测对比报告(1)(2)

测试5:24个数据工人,x个客户端模糊查询x万数据

单个客户端模糊查询:

数据总量 600万 2000万 6000万 1亿 3亿
耗时 0.9秒 1秒 1.7秒 2秒 6秒

多个客户端高并发模糊查询:

客户端数 1并发 10并发 20并发 50并发 100并发 200并发
600万 0.9秒 2秒 4秒 9秒 14秒 18秒
2000万 1秒 4秒 9秒 21秒 37秒 45秒

分析:对于千万级别的数据,客户端一次任意模糊查询的耗时都是在1秒完成,如果超过1亿需要2秒,3亿需要6秒在没有额外构建索引情况下)。如果是100个客户端并发模糊查询,按照上面表格里100并发查询2000万数据,平均耗时37秒,每次查询耗时37/100=0.37秒,每秒查询次数100/37=2.7次,每秒查询数据范围大小100*2000万/37秒=5400万。这里测试key是“*”代表所有,如果key根据业务特点进行了分层设计,以“user.*.name”这样形式模糊查询,范围会缩小,速度会更快。

测试6:压力测试,200高并发下每客户端读取10万数据连续48小时不间断,服务端cpu、内存、带宽资源高压力运行稳定无异常。

下面归纳一下coolhash和redis的基本区别:

  redis coolhash
实现语言 c java
大小 2.3万行代码 小于1万行含fourinone)
运行环境 Linux Linux/windows
数据库类型 k/v缓存数据库 k/v持久化数据库
实现模式 单进程模式,所有操作单线程完成 多进程模式,并行数据库,所有操作并行完成
持久化模式 内存快照,aof日志 硬盘持久化+cache
存储大小 受内存大小限制 无限制,取决硬盘大小
数据类型支持 String,Hash,List,Set,Sorted set等,List是一个双向链表实现,可用于实现消息队列。 基本数据类型:“String、short、int、long、double、float、Date”,高级数据类型:大部分的java集合都能支持List、Map、Set等),以及任意可序列化的自定义java类型,底层数据类型:二进制型
存储结构 redisDb内存结构,Key和key之间无联系,无上下层结构 按照数据库索引存储结构设计,CoolHash算法实现,支持key的树型层次结构
查询检索 没有针对范围检索设计 Key索引+并行计算高效查询,查询性能在秒级
关联设计 没有针对join设计 Key指针设计,并可连续指,支持建立1对1、1对n、n对n的复杂关联关系
读写性能 单server吞吐量10万tps(内存) 单server可达到百万以上tps硬盘)
事务处理 支持,但没有事务隔离级别 支持ACID,实现TRANSACTION_SERIALIZABLE隔离级别
Server支持 支持 支持
命令行支持 支持 不支持
主备支持 直接支持,通过redis.conf配置主备 不直接支持,提供fttp分布式备份api开发包支持
集群支持 3.0版直接支持,通过hash slot算法 不直接支持,提供分布式缓存集群和fttp等开发包支持

总结:

  • 首先不能简单的以实现语言来衡量性能,认为c实现的就一定比java高效,数据库引擎的效率提升更多取决于底层算法改进和设计突破,c在底层和操作系统交互上有优势,但是取决于开发者,一个蹩脚的c工程师写出的代码只会低效和漏洞百出。

  • redis的优势在于快速的缓存读写、丰富的数据类型支持,以及完善的主备复制和集群实现,劣势在于单进程模式、内存限制、查询检索等方面。

  • coolhash是一个并行数据库引擎,在很多地方采用了大胆创新的设计,并获得了很好的性能体验,改进后的哈希算法能实现更快的读写吞吐量,key层次结构和key指针等设计能实现更高效的查询检索和join关联。由于只做数据库引擎,暂不提供主备和集群功能,但是fourinone提供了大部分分布式技术简单实现的开发API,开发者可以利用这些自己去实现。

  • 随着数据库实现技术的发展,kv缓存和kv持久化存储的性能越来越接近,边界会越来越模糊,也会越来越涵盖关系数据库的功能。存储硬件技术也在发展,未来在内存+ssd混合存储上还会有更好的性能突破。

以上测试程序和运行包都来源于fourinone4.0版本,可以到以下地址下载:

  • google code svn:http://fourinone.googlecode.com/svn/trunk/

  • 国内oschina code:https://git.oschina.net/fourinone/fourinone/blob/master/fourinone-4.05.06.zip

CoolHash数据库demo目录内容:

  • RunServer.java:启动服务端

  • RunClient.java:启动客户端

  • CoolHashTestRun.java:启动多个并发客户端

CoolHash作者声明:欢迎各位朋友理性验证和讨论,不欢迎不理会各种喷子言论。

这里有很多人是redis和leveldb的使用者和封装者,其中一部分人会看coolhash不爽,甚至失去理性变成喷子,对coolhash大加攻击和诋毁,希望coolhash只是玩具,希望coolhash没有场景...但是喷子们要清楚自己的位置,redis和leveldb不是你的作品,你只是站在洋人前面狐假虎威而已,核心层面的东西你甚至不具备发言权。长期以来国内工程师都是以学习和使用国外开源软件为生存技能,能理解这些人也只是混口饭吃。

很多人软件思想意识落后,“软件傻瓜化”超出了他的理解范围,看到demo简单,便误认为框架源码也肤浅,看到demo里没有synchronized,便以为框架没有同步,有人甚至怀疑源码是假的。demo简单是为了保护用户的自信心和驾驭感,用户只需要看到一个美丽的躯壳,血肉模糊的东西留给框架戴着口罩拿着手术刀去做,这实际上对设计者提出了更大的难度,所以源码要实现那么多功能,还要做到体验傻瓜化,一定是非常精密的逻辑组成,源码不可能像demo那样通俗易懂。

一些人一来就对fourinone源码指手画脚,评头论足,大部分批评只停留在“编程规范、格式、变量名、包名、调了哪些工具类”这些层面,这些人需要多花时间提升自己的技术积累、设计能力、算法能力,才能真正理解源码的各种行为,作者到过国内各种IT企业,非常清楚国内工程师的技术能力能到什么程度,国内的开源软件大部分是基于国外开源软件封装后的二次开源,真正意义上的原创很少,大部分中国IT企业处在产业链末端,没有核心技术,依靠外包劳动力,工程师的技术寿命很短,平均只有3-5年,然后周围环境会暗示他转向管理或者业务,只有这样才能得到领导认可,技术积累太短暂,技术人员没有悟性,也缺乏兴趣,过于依赖国外,是不可能在核心软件层面有真正的原创。

一些人对coolhash很质疑,认为很少人很少代码实现不了高性能,实际上早在几年前,fourinone就在一片质疑声中被要求压测,结果出乎意料在计算性能上优于hadoop,现在coolhash只是重演了创新能力而已。建议各种质疑者跟风者先放下政治偏见、利益冲突、情感排斥,耐心的动手去试试。对于技术上缺乏分辨力的人,建议你认准三点,一看上手是否容易;二看功能是否强大;三看性能是否高效,只要满足这三点就没有人可以忽悠得了你,然后你再结合源码去反思是如何做到的。

曾国藩说过“窃喜洋人之智巧中国亦能为之,彼不能傲我以其所不知矣!”

文人不相轻,技术归技术,本文对redis和leveldb的作者充满尊敬和虚心学习,Salvatore Sanfilippo(antirez) 说过代码像一首诗,Jeffrey Dean更是google map/reduce的作者,他们都表现出很高的职业素养和天赋,是这些人推动着世界软件技术的发展,也成为中国架构师内心难以跨越的丰碑。是存在差距,但是可以站着学习,而不是跪着膜拜,一味跟从只会丧失判断力和创新力,香港的年轻人曾经不相信大陆的taobao会比eBay强大,QQ会比MSN强大,直到MSN垮了仍然不相信是真的,没有信心,没有努力,梦想只会变成做梦。

本文来自:http://my.oschina.net/fourinone/blog/289122


www.htsjk.Com true http://www.htsjk.com/shujukukf/17657.html NewsArticle 测试5:24个数据工人,x个客户端模糊查询x万数据 单个客户端模糊查询: 数据总量 600万 2000万 6000万 1亿 3亿 耗时 0.9秒 1秒 1.7秒 2秒 6秒 多个客户端高并发...
相关文章
    暂无相关文章
评论暂时关闭