阅读更多

6顶
5踩

数据库
Fourinone4.0版新特性:一个高性能的数据库引擎CoolHash(酷哈嘻)

一、前言:如何写一个数据库

如果将操作系统和业务应用之间的软件都统称中间件的话,那么最重要的软件无疑是数据库,它比web应用服务器市场更大,几乎所有的业务系统都需要数据库,所有的企业都会购买数据库。无论是早期的商业智能也好,数据分析挖掘也好,近年的分布式存储也好,大数据也好...围绕数据变着花样的新理念新技术再多,都是“乱花渐欲迷人眼,浅草才能没马蹄”,其实最核心的还是数据库技术。

就像华为想进军软件市场已经很久了,我脑海里一直惦记着数据库技术,几年来不断收集数据库实现技术,但是一直不得要领,几欲放弃,没有碰到一个白胡子老头传授秘籍,国内也几乎没有这方面的书籍,找了几本国外的教材,要么翻译的不好,要么英文啃起来费劲,书里更多是讲数据库相关的基础知识,但是不会告诉你怎么做,好比是你想学变脸,但是总在教你唱戏,其实你只想知道变脸是用线拉的就行了。行业技术机密都是避而不谈的,感觉从书本上是学不到的。

去年给一个银行技术老总讲解大数据方案,他突然问到,你们能不能不用别人的,自己写个ORACLE这样的数据库出来,我们每年花在license和服务费非常昂贵,升级也很痛苦,但是也没有办法。我承诺可以抽业余时间研究一下,不过他马上又说,就算有也不会马上用,可以先开源出来,可以看出他无比纠结的心态,也许他对太多架构师说过这样的话,可能现在都忘了,但是这件事再次给了我触动,言语之间能感受到客户寄托出的一种期望,希望中国企业能成长为ORACLE、IBM这样的角色。

要实现一个数据库,首先不能不谈起数据库引擎。数据库引擎和数据库产品的关系,就像汽车发动机和汽车的关系,有了发动机,剩下的只是装配工作。知名的数据库引擎有“ISAM、MyISAM、InnoDB、PostgreSQL、BerkeleyDB等”,另外也有些产品模糊在“数据库引擎、数据库server、数据库管理系统”之间的,如近几年的redis,还有JDK6.0起自带一个java编写的只有2m大的关系数据库Derby(由IBM捐献),另外值得一提的还有SQLite,一个很轻量级嵌入式的数据库(3万c代码,250k大小),但是功能齐全,实现了ACID和SQL标准,目前广泛应用于苹果的Mac操作系统和Android移动操作系统中,缺点是多用户高并发承受能力较弱。

世界上大部分的数据库产品都是围绕部分数据库引擎扩充出来的,比如大家熟悉的Mysql,它的数据库引擎叫MyISAM,MyISAM是在ISAM发展而来,ISAM也是一个知名的数据库引擎,最初被IBM开发,它读的性能大于写,但是索引功能和事务处理缺乏,MyISAM相对于ISAM做了很多改进,优化了表锁和并发操作,但是由于继承的原因,仍然倾向于多读少写操作。ISAM系列引擎的大致设计原理:采用B树设计,分成表元数据、表数据、表索引3部分存储,读的快是因为维持大量的索引结构指向数据存储位置,但是由于删除更新容易导致大量数据碎片和空间浪费,常常需要执行“OPTIMIZE TABLE”,从而又导致索引常常需要重新计算。Mysql5.5以后默认采用InnoDB引擎,还可以使用BerkeleyDB,InnoDB和BerkeleyDB包括了对事务处理和外键的支持,这是ISAM系列引擎所没有的特性,另外InnoDB的锁设计的要精明一点,锁到少数行的数据块上,而不是整表锁。

关于ISAM系列的发展有很多,IBM开发了VSAM代替ISAM,VSAM被IBM一个数据库产品所使用 ,就是大名鼎鼎的DB2。虽然MySql的数据库引擎换成了InnoDB,但是MySql的作者迈克尔(Michael Widenius)从MySql旧版本发展了另一个分支,并以自己的小女儿名字命名为MariaDB(玛丽亚),MariaDB的数据库引擎叫做Aria,但实际上还是MyISAM,只是增加了些key缓存改进(Segmented Key Cache),MariaDB数据库得到了google等企业的大力支持,普通的观点认为oralce收购Mysql的最终目的是想其慢慢死亡,而不是想着如何把它发展更好。

PostgreSQL和BerkeleyDB都是来源于加州伯克利分校,一个面向关系数据,一个面向k/v数据,虽然知名和流行程度不如Mysql,但是也各有优势,PostgreSQL的关系数据库功能实现的比较完整,包括了很多高级特性,并且采用BSD/MIT开源协议,因此比较适合用来封装成数据库产品,这种协议允许任何人使用修改代码,但是要保留版权声明,BerkeleyDB提供了一个高并发访问的k/v数据库引擎,但不是一个数据库server,不提供网络访问,不支持sql,但可以支持函数式操作,数据库产品HyperTable和MemcacheDB内部都使用了BerkeleyDB。

综上所述,我们可以看出:

  1. 大部分数据库产品都是都是近亲结婚,由少数数据库引擎(如ISAM、PostgreSQL、BerkeleyDB等)发展而来。(但是oracle和sqlserver的数据库引擎是内置的,鲜有人知)
  2. 你会惊奇的发现,MyISAM、BerkeleyDB、InnoDB等大部分数据库引擎的vendor都是oracle,oracle公司一直处心积虑的收购着市场上有竞争力的数据库引擎,用来捍卫自己的垄断地位,
  3. 几乎所有的数据库引擎都是GPL协议,擅自闭源用于商业将承担法律责任。

因此,要写一个数据库,首先要从实现数据库引擎入手,掌握数据库引擎技术有重要意义,因为无论是“关系数据库还是K/V数据库,SQL数据库还是NOSQL数据库,分布式数据库还是并行数据库,列数据库还是对象数据库...”,存储引擎部分都有着相似的实现原理,掌握了数据库引擎技术后,只要公司愿意投资,就可以长足拓展到任何数据库领域,一切只是工作量问题,数据库引擎一经研发成功,就值得长期放养,哪怕是5年10年。同时对个人职业意义来说,对一个玩了一辈子软件技术的架构师,没有写过数据库是一种遗憾,就跟喜欢女优的工程师没有见过真人一样。

二、CoolHash是个什么样的数据库

1、CoolHash是一个数据库引擎

CoolHash只做数据库最基础核心的引擎部分,支持大部分数据类型的“插入、获取、更新、删除、批量插入、批量获取、批量更新、批量删除、高效查询(精确查、模糊查、按树节点查、按key查、按value查)、分页,排序、and操作、or操作、事务处理、key指针插入和查询、缓存持久互转”等操作和远程操作。

其他的“监控、管理、安全、备份、命令行操作、运维工具”等外围特性都剥离出去不做,开发者可以根据自己需求扩充这些功能,CoolHash也不做自动扩容,CoolHash认为分布式集群特性也可以在外围通过“分库分表”或者“分布式扩容”等中间件技术去做,目前国内很多企业都具备基于开源软件做外围中间件的能力,这样,CoolHash只维持一个高性能又轻量级的最小存储引擎。

CoolHash高度产品化,易用性强,容易嵌入使用和复制传播(200k大小),采用apache2.0开源协议,使用java实现(jdk1.7),对外提供java接口,同时支持windows和linux(unix-like),由于依赖底层操作系统,windows和linux的实现稍有不同。

2、CoolHash是一个k/v数据库

实现数据库存储结构索引有多种方法,有比较平衡减少深入的b树、b+树系列,结合内存再合并的LSM-tree系列(bigTable),借鉴字典索引技术的Trie树(前缀树、三叉树)等,不过对于key/value结构,感觉最合适的还是Hash,不过java里的Hash算法是实现在内存组件里,无法持久化,只能快速读写,但是无法模糊查询,传统的Hash不是一个“cool”的Hash,需要进行改进。

CoolHash改进后的Hash算法是一个完整的key树结构,我们知道传统Hash的key和key之间没有关系,互相独立,但是在CoolHash里,key可以表示为“user.001.name”的用“.”分开的树层次结构,如“user.001.age”和“user.001.name”都属于“user.001.*”分支,既可独立获取,也可以从父节点查询,还可以“user.*.name”方式只查询所有子节点。

提出key指针的概念:CoolHash的key可以是一个指针,指向其他树的key,这样能将两棵key树连起来,这样的设计能避免大量join操作,如果两棵key树没有直接关系,需要动态join将会非常耗时,但有了key指针可以很好的描述数据之间“1对1、1对多、多对多”的关联关系。key指针也不同于数据库外健,它可以模糊指,比如只模糊指向一个key前缀“user.001”,再补充需要获取的属性形成一个完整key;还能连续指,比如一个key指针指向另一个key指针再指向其他key指针,连续指可以将更多的树联系起来形成一个大的数据森林。CoolHash能很好的控制key指针最终值返回、key指针死循环、读写死锁等问题。

我们知道关系数据库的数据表是一个行列的二维矩阵的数据结构,表和表之间没有层次感,一个表不会是另一个表的父子节点,这就导致需要大量关联,从一个表获取另一个表的数据需要通过join操作,同时由于表和表之间彼此独立,又导致数据量大后join性能不好,多个矩阵需要动态的“求并”“求或”获取主健,再返回所有属性。很多朋友是开发业务系统出身,复杂一点的业务逻辑通常需要关联7-8个数据库表甚至更多,是相当头疼的事情。



这种矩阵行列式结构还有个不好,就是一加全加,一减全减,一行加了一列属性,所有行都要跟着加,假如有个“子女”属性,有的人有1个子女,有的人有2-3个子女,这个属性应该有时是1列,有时是3列,有时没有才好。CoolHash的父节点下的key值可以任意添加和减少,或者再任意向下扩充叶子结点,也可以任意查询,能够非常灵活,比如“子女”属性可以这样表示第一个小孩:“user.001.children.001”。

关系数据库还容易产生数据碎片,需要经常执行“OPTIMIZE TABLE”或者“压缩数据库”等操作回收空间,CoolHash对此做了设计和算法改进,对于大量数据频繁写入和删除能很好重复利用存储空间。

key和value的数据格式:CoolHash的key只能是字符串,默认最大长度为256字节。value能支持非常广泛的数据类型,基本数据类型“String(变长字符)、short(短整形)、int(整型)、long(长整形)、 double(双精度浮点型)、 float(浮点型)、Date(日期型)”,高级数据类型的大部分的java集合都能支持(List、Map、Set等),以及任意可序列化的自定义java类型,底层数据类型也可以支持二进制型。基本数据类型的value可支持按内容查询,高级数据类型和二进制类型不支持按内容查询。所有类型的value默认最大长度为2M,默认配置保证一对key/value长度不会太大,能够容易加载到内存进行处理,但是key和value的最大长度、以及region大小都是可以根据计算机性能进行配置。

CoolHash还支持HashMap缓存和持久化的统一和互相转换,并共用一套API,可以将数据放入CoolHashMap,也可以放入持久化,可以将CoolHashMap对象转成持久化,也可以从持久化数据里直接获取CoolHashMap对象。

3、CoolHash是一个并行数据库(mpp)

前几年有篇文章,国外的数据库大牛猛烈抨击map/reduce,让重复造轮子的人应该去学习一下关系数据库几十年的理论和实践积累,一个借助蛮力而不善于设计索引的数据库系统是愚蠢和低效的。这一方面说明了map/reduce技术已经侵犯到了传统数据库领域的核心利益,另一方面也暴露了分布式存储技术的某些不足。

这里的蛮力就是并行计算,在CoolHash的底层,会维持一个数据工人进程组,根据计算机性能少则几个多则上百个,对于数据库的每种操作,数据工人们像演奏交响乐一样,时而独奏,时而合奏,统一调度,紧密协作的完成任务,CoolHash从一开始就是高度并行化的设计,数据库引擎本质就是在寻求cpu、内存、硬盘的充分利用和均衡利用,“一力胜十巧”,在大量数据的读写和查询中并行计算的效果犹为明显。

同时一个好的数据库引擎应该是蛮力和技巧的结合,Hbase的一个重要启示,就是可以灵活设计它的key达到近似索引的效果,CoolHash将此特性发挥的更深入,树型结构的key本身就是最好的索引,除外CoolHash几乎不需要另外再建立索引,只需要按照业务数据特点设计好你的key。并行计算和索引的结合会得到一个很好的互补,让你的索引结构不需要维持的太精准而节省开销,举个例子:我们从一个城市找一个人,一种方法是我们有精确的索引,知道他在哪个区哪个楼那个房间,另一种是我们只大致知道他在哪栋楼,但是我们有几百个工人可以每间房同时去找,这样也能很快找到。

4、CoolHash是一个nosql数据库

nosql不等于没有sql的功能,关系数据库的sql仍然是非常方便的交互语言,而且有专门的标准,CoolHash通过函数方式实现大部分sql的功能,如果需要扩充sql支持,在外围用正则表达式做一个sql解析,然后调用CoolHash的函数支持即可。

由于CoolHash没有关系数据库的“db、table、row、col”等概念,使用树型key取代了,所以sql create语句功能就不需要了。

  • “put()函数”对应于“sql insert、update”语句
  • “remove()函数”对应于“sql delete...where”语句
  • “put(map)函数”对应于“sql insert/update into...select...”语句
  • “get()函数”对应于“sql select...where id=?”语句
  • “get(map)”函数对应于“sql select *...”语句
  • “find(*,filter)”函数对于于“sql select * where col=%x%”语句
  • “and()函数”对应于“sql and”语句
  • “or()函数”对应于“sql or”语句
  • “sort(comp)函数”对应于“sql desc/group”语句
5、CoolHash实现了事务处理

CoolHash实现了ACID事务属性,对写入、更新、删除的基本操作提供事务处理,在程序里调用begin()、commit()、rollback()等事务方法。

  • 原子性(Atomic):事务内操作要么提交全部生效,要么回滚全部撤消。
  • 一致性(Consistent):事务操作前后的数据状态保持一致,一致性跟原子性密切相关,比如银行转账前后,两个账户累加总和保持一致。
  • 隔离性(Isolated):多个事务操作时,互相不能有影响,保持隔离。
  • 持续性(Durable) :事务提交后需要持久化生效。

另外,对于多个事务并发操作数据的情况,JDBC规范归纳出“脏读(dirty read)、不可重复读(non-repeatable read) 、幻读(phantom read) ”三种问题,并提出了4种事务隔离级让软件制造商去实现,按照不同等级去容忍这三个问题,其实这种逐级容忍大部分都不实用,一个事务操作未提交时,按照事务隔离级,其他访问应该是读取到该事务开始前的数据,而不应该把事情搞复杂,CoolHash实现的是“TRANSACTION_SERIALIZABLE”,禁止容忍三种读取问题。

6、CoolHash是一个数据库Server

CoolHash支持远程网络访问,服务端发布一个IP和监听端口,客户端连接该IP端口即可进行远程操作,CoolHash可承受多用户高并发的网络连接访问,来源于服务端设计的相似之处,大家知道Apache HTTP Server是一个多进程模型+共享内存方式实现,在前面讲到的CoolHash会维持一个数据工人的进程组,数据工人不仅是并行计算的执行者,同时也是网络请求的响应者,数据工人身兼多职能很好的将服务端设计统一起来,避免重复设计,因此CoolHash也是一个很好的网络Server.

7、CoolHash的测试性能

有句话叫做“人生如白驹过隙”,用来形容性能就是一瞬间,数据库性能最好能接近缓存,或者直接可以当作缓存来用,能在瞬间完成读写和各种查询,这个瞬间就是秒。只有在几秒内完成操作才能做到实时交互没有等待感,否则就要离线交互。

  • CoolHash的单条写入和读取速度都在毫秒级别,写和读差别不大,读略快于写。
  • CoolHash的批量写入和读取速度都控制在秒级别,100万数据写入基准测试,普通台式机或者笔记本(4核4g)需要5-6秒,标准pc server(24核256g)需要2-3秒;批量读、批量删除和批量写入的速度差不多。
  • CoolHash写入缓存和写入持久的速度差别不大,100万数据写入缓存基准测试,普通台式机或者笔记本(4核4g)需要5秒左右,标准pc server(24核256g)需要2秒左右。如果是10万级别的数据读写,缓存和持久的速度大致接近等同。
  • CoolHash的查询速度控制在秒级别,100万数据的模糊查询(如like%str%)在没有构建索引情况下,普通台式机或者笔记本(4核4g)需要2-3秒,标准pc server(24核256g)需要1-2秒;如果是重复查询,由于CoolHash内部做了数据内存映射,第二次以后只需要毫秒级完成。
  • 高并发多客户端的吞吐量总体速度要快于单客户端,但是受服务器cpu、内存、io等性能限制,会倾向于一个平衡值。

数据库引擎的性能通常也会受“key/value数据大小、数据类型、工人数量、硬件配置(内存大小、cpu核数、硬盘io、网络耗用)”等等因素影响。

  • 比如同样数量但是单条key/value数据很大,整体速度要慢一些;
  • 基本数据类型的读写速度要快过高级数据类型(如java集合类);
  • 工人数量也有影响,对于单条写入读取单工人和多工人差不多,但是批量操作和查询多工人要好过单工人,普通台式机或者笔记本(4核4g)维持在8-10个工人可以打满cpu,标准pc server(24核256g)最大可以维持到100个左右工人,但是工人数量就算能打满cpu,也受限于后端硬盘io,到一定程度速度不再增长;
  • 硬件配置对于性能的影响很大,普通笔记本的测试效果明显不如标准pc server,笔记本内存较小,硬盘io弱,不适合做数据库服务器。内存大的服务器测试效果好,加载数据和jvm垃圾回收速度会更快,目前测试采用的都是传统SAS/SATA硬盘,如果采用固态硬盘进行硬件升级,随机IO性能会得到进一步提升;
  • 另外,由于存在网络耗用和序列化传送,远程网络操作的速度要比本地速度慢,但是局域网内速度会接近本地速度,这是因为远程网络操作涉及带宽接入限制和线路共享等复杂消耗,而局域网内主要取决于物理设备速度。

关于CoolHash性能的更多体验,欢迎有兴趣的朋友根据demo在各自的机器环境下,模拟各种极端条件下去压测。

三、如何使用CoolHash

ch追求极简的编程体验,不需要安排配置,服务端启动CoolHashServer,指定好ip和端口,客户端大致编程步骤如下:

CoolHashClient chc = BeanContext.getCoolHashClient("localhost",2014);//连接CoolHashServer
chc.put("user.001.name","zhang");//写入字符
chc.put("user.001.age",20);//写入整数
chc.put("user.001.weight",50.55f);//写入浮点数
chc.put("user.001.pet",new ArrayList());//写入集合对象

String name = (String)chc.get("user.001.name");//读取字符
int age = (int)chc.get("user.001.age");//读取整数
float weight = (float)chc.get("user.001.weight");//读取浮点数
ArrayList pet = (ArrayList)chc.get("user.001.pet");//读取集合对象

chc.put("user.002.name","Li");
chc.put("user.002.age",25);
chc.put("user.002.weight",60.55f);

CoolKeyResult keyresult = chc.findKey("user.001.*");//查找用户001的所有属性
CoolKeySet ks = keyresult.nextBatchKey(4);//分页获取前4条结果
System.out.println(ks);//输出[user.001.weight, user.001.age, user.001.name, user.001.pet]

CoolHashResult mapresult = chc.find("user.*.age", ValueFilter.greater(18));//查找年龄大于18岁的用户
CoolHashMap hm = mapresult.nextBatch(10);
System.out.println(hm);//输出[user.001.age=20, user.002.age=25]	
......


更多的功能使用请去参考开发包里的demo

四、Fourinone到底是什么?

Fourinone1.0是一个并行计算框架,2.0是一个分布式文件系统(Fttp),4.0是一个数据库引擎(CoolHash)...那么Fourinone到底是什么?

我们把Fourinone打开,其实就是纯java程序,除外什么都没有,通篇展示如何用最基础的java实现上面的功能。

其实不用关注Fourinone的产品定位究竟是什么,Fourinone就是四不象,虽然功能众多,跨度很大,但是仍然长自同一个身体,由同一个脑袋指挥,只要各项机理运行正常健康就好。

Fourinone就是俄罗斯套娃里最小的一个,2.0是1.0的应用,3.0是2.0的应用,4.0是3.0的应用,层层扩充没有止境,体现软件搭建精髓思想。

Fourinone只收集最核心的技术,hadoop的开发者去使用spark需要重新学习,反之亦然,因为他永远只是一个使用者,但是Fourinone可以从一个简单MQ演变成一个复杂数据库,只有掌握核心技术,才具备强大的变通能力。

Fourinone4.0虽然新增加了一个完整的数据库引擎,但是依然保持着苗条身材,整体大小只有220k,用不到1万行java代码实现,所有的设计都是原创和创新。

除外,4.0版本还增加了以下特性:

  • 多进程多线程的无缝融合,同一套接口,改改参数,从多进程变为多线程,开发者无需改写程序逻辑;
  • 提供高容错任务分配算法API:doTaskCompete(m工人,n任务),将n个任务分给m个工人并行完成,根据任务大小设置工人数量,工人间能者多劳,性能好的工人机器争抢干更多的任务,同时跟现实工作一样,如果有工人生病请假(故障),那么他的任务活由其余工人代干,除非所有工人出故障,否则就算只剩一个工人也应该加班把其他所有工人的活干完,对整体计算来说,部分工人故障对计算结果来说不受影响,只是计算时间会延长。
五、结束语:将技术做酷是一种生活态度

就像摇滚乐手骑行哈雷是一种生活态度一样,把技术和产品做酷也是一种生活态度。

  • 用很多代码体积臃肿实现出来也可以,但是不够酷,用很少代码实现功能更强才酷;
  • 用很多人花很多时间做出一个产品也可以,但是不够酷,用很少人花很少时间做出来才酷;
  • 全靠整合依赖太多也可以,但是不够酷,没有任何依赖才酷;
  • 最核心的组件都是用别人的也可以,但是不够酷,自己做的更好才酷;
  • 产品只有专业人士会用也可以,但是不够酷,没文化的人都会用才酷;
  • 跳水自由落水也可以,但是不够酷,翻几个跟头不冒一点水花才酷;
  • 演死尸直接倒下也可以,但是不够酷,多晃悠几下再死才酷;
  • 不玩创新也可以,那样的人生不够酷,玩创新挨整才酷。
基础软件也能像互联网产品余额宝、微信那样做到很酷,追求傻瓜式的客户体验和黏性,把草根程序员当做客户群体,做他们踮踮脚就能够的到的软件。基础软件相对于业务创新产品来说有一定技术门槛,不容易被复制,观察我们身边的互联网产品,“从网游到偷菜到手游到微博到微信...”或者是“从b2b到c2c到b2c到团购到o2o...”总在不断的进行业务模式创新,保鲜期不超过2年,而且容易遭到山寨,但是微软的操作系统和office、oracle的数据库卖了20多年,不需要什么创新好像也没有竞争对手。

很多毕业生踏入这个行业时最初的梦想也是想写一个很酷的操作系统或者数据库,但是无数次的现实磨灭了他的梦想,很多人最后变成一个在职场政治和项目扯皮中寻求着人生价值,并且总是把“技术不是问题”挂在嘴边,是否还记的你曾经的梦想,把技术做酷。

Fourinone4.0(CoolHash)开源地址:http://code.google.com/p/fourinone/
svn地址(浏览器可以直接下载):http://fourinone.googlecode.com/svn/trunk/

关于Fourinone的所有架构、指南、demo,可以参考《大规模分布式系统架构与设计实战》一书

6
5
评论 共 59 条 请登录后发表评论
59 楼 cwqcwqmax9 2014-07-18 16:44
@fourinone    我下的你的fourinone-4.05.06.zip 包解压后  源码报错啊,我现在看你的coolhash 报错
58 楼 xiaoZ5919 2014-05-29 18:49
Tyrion 写道
哈哈,说实话我挺喜欢看技术争论的,好久没看到这种帖子了,只要拿出实证来吵吵无妨嘛。

没意思,fourinone都不敢拿出benchmark来,有兴趣的话可以git上clone一下跑跑看看没有我说的问题,凑个热闹!
57 楼 Tyrion 2014-05-29 17:14
哈哈,说实话我挺喜欢看技术争论的,好久没看到这种帖子了,只要拿出实证来吵吵无妨嘛。
56 楼 vb2005xu 2014-05-28 13:39
说实话 我发现  jxqdxm  说的是最多的,不知道为什么这么 愤,貌似这都又转变成 微软封闭与开源的
55 楼 icefishc 2014-05-28 13:31
jxqdxm 写道
还有,奉劝作者几句:oracle数据库用世界一流的安全、质量、稳定性,加上高昂的价格和服务,撑起了这个产品高贵的品质,正是有了这个高贵的品质,才让知识、技能变成了滚滚的金钱,让天下的读书人、知识分子有了一个金饭碗,养活了一大群象作者这样有技术的人才,给了你们一条生路,给了你们一个美好的生活,成百万的人每天依靠着oracle数据库生存着、生活着,这是oracle做的功德无量的大好事,你也身在这个行业中,拿着oracle给你提供的就业机会,靠着oracle数据库养活着自己和家人,怎么能说这么缺德的话、做这么缺德的事情。被一个SB技术老总一忽悠就忘记是谁养活了你!!你的工作是他给的吗?你的工资是他白给的吗?因为oracle数据库让你们具有了价值,你们的服务有价值,他们才拿钱出来给你们。你不仅不感谢oracle,不仅没有感恩的心,反而要与其做对,真是丧心病狂。作者,你醒悟吧!!!你千万不要成功,你一成功,天下百万的人就可能丢掉工作,失去收和来源,请你不要再害人害已。

就像人总是要死的一样, 软件也总是要被更先进的替换掉。 没必要上升到感恩的地步。 我能拿薪水与有没有oracal没有一毛钱关系, 没了oracle 还有db2 sqlserver mysql等数不尽的产品。
54 楼 icefishc 2014-05-28 13:27
jxqdxm 写道
[按上条]忍不住还想多说两句:全国有很多银行,不止作者服务的这一个银行会这么想,有这种需要,全国这么多银行、还有银行以外的企业,都是国-字-头的大企业、超大企业,他们只会拿着--公--款--挥--霍,却没有一个银行想自己开发一个数据库,国家也没有说出钱,或者委托民间企业搞一个。

1. 国家对数据库研发有投入, 不知道不要乱喷。
2. 对银行来说开发这种东西不经济而已, 远不如去买划算。
53 楼 Dead_knight 2014-05-28 11:49
xiaoZ5919 写道
talk is cheap show we the benchmark 呼唤你拿出专业点的benchmark,立此贴为据,拿不出来,就别再吹嘘高性能了!每日一贴直到看到benchmark

哥们,行啦~没必要这么较真了,你天天还要花时间来回复,不划算呀~
52 楼 xiaoZ5919 2014-05-28 11:48
talk is cheap show we the benchmark 呼唤你拿出专业点的benchmark,立此贴为据,拿不出来,就别再吹嘘高性能了!每日一贴直到看到benchmark
51 楼 xiaoZ5919 2014-05-27 17:29
vb2005xu 写道
为什么大家都在唱衰这个东西呢,我觉得大家应该是以一种更好的心态去支持作者去搞这个东西,即使这个东西性能不高,又能咋的,难道linux最早的时候性能就好么,起码我们可以在学习DB的时候能够从某个角度更能去理解存储引擎,我觉得作者是很厉害的,说实话我自认为比不上作者的1/5,这样的人更应该好好去学习.

你觉得fourinone厉害,你看懂了coolhash的数据库引擎了吗?
50 楼 xiaoZ5919 2014-05-27 16:55
好吧  既然fourinone拿不出benchmark,我自己来一个吧http://xiaoz5919.iteye.com/blog/2072209
让大家看一看高性能的面目
49 楼 wzjin 2014-05-27 16:35
感谢作者的共享精神,如果作者将文档和注释弄好点,估计参与的人会比较多。一个人单打独斗难成大事。
48 楼 ray_linn 2014-05-27 16:34
vb2005xu 写道
为什么大家都在唱衰这个东西呢,我觉得大家应该是以一种更好的心态去支持作者去搞这个东西,即使这个东西性能不高,又能咋的,难道linux最早的时候性能就好么,起码我们可以在学习DB的时候能够从某个角度更能去理解存储引擎,我觉得作者是很厉害的,说实话我自认为比不上作者的1/5,这样的人更应该好好去学习.


做人要踏实,不要把一只小鸡吹成一只凤凰。
47 楼 vb2005xu 2014-05-27 16:26
为什么大家都在唱衰这个东西呢,我觉得大家应该是以一种更好的心态去支持作者去搞这个东西,即使这个东西性能不高,又能咋的,难道linux最早的时候性能就好么,起码我们可以在学习DB的时候能够从某个角度更能去理解存储引擎,我觉得作者是很厉害的,说实话我自认为比不上作者的1/5,这样的人更应该好好去学习.
46 楼 jxqdxm 2014-05-27 16:15
还有,奉劝作者几句:oracle数据库用世界一流的安全、质量、稳定性,加上高昂的价格和服务,撑起了这个产品高贵的品质,正是有了这个高贵的品质,才让知识、技能变成了滚滚的金钱,让天下的读书人、知识分子有了一个金饭碗,养活了一大群象作者这样有技术的人才,给了你们一条生路,给了你们一个美好的生活,成百万的人每天依靠着oracle数据库生存着、生活着,这是oracle做的功德无量的大好事,你也身在这个行业中,拿着oracle给你提供的就业机会,靠着oracle数据库养活着自己和家人,怎么能说这么缺德的话、做这么缺德的事情。被一个SB技术老总一忽悠就忘记是谁养活了你!!你的工作是他给的吗?你的工资是他白给的吗?因为oracle数据库让你们具有了价值,你们的服务有价值,他们才拿钱出来给你们。你不仅不感谢oracle,不仅没有感恩的心,反而要与其做对,真是丧心病狂。作者,你醒悟吧!!!你千万不要成功,你一成功,天下百万的人就可能丢掉工作,失去收和来源,请你不要再害人害已。
45 楼 jxqdxm 2014-05-27 15:52
别说你开发不出来那样的产品,就是你开发出来也没有人用,为什么?因为他们根本不敢用你的,也根本没有想过用你的产品。银行花那么多钱买产品和服务,是因为出了问题领导不用担责任,是世界公认的安全的产品,出了问题也只是意外,领导按制度做好了,就不用承担决策责任。用你个人开发的产品,没有世界上的安全认证,没有长时间的运行记录,没有服务保证,出了事情领导要承担责任,要丢官帽的。哪个领导都不可能拿自己的前途开玩笑。你白日做梦呢!!!说你是SB,别不服气。你要是知道国有企业的内控制度,根本就不会傻到这种地步,去开发这个没有用的产品。你早就应该想到,为什么那么多开源、免费的数据库产品放在那里,银行就是不用?就是因为这些产品不符合银行制度上的要求,一旦出了问题领导要承担责任,弄不好要丢官的。使用oracle 、DB2之外的产品,企业承担的风险是非常大的,根本不符合银行的内控制度要求,从制度上说就根本不可能使用你的产品。别人都知道这个SB老总是胡说八道,你还当真了,真是傻的可笑!
44 楼 jxqdxm 2014-05-27 15:51
还忽悠不明真--相的群众上当受骗为他们开发产品,比如这个作者,以为自己很聪明+很高明,觉得自己很牛X的样子,其实就是个十足的SB。
43 楼 jxqdxm 2014-05-27 15:50
他们--教--训--别人的时候说:艰苦奋斗、独立自主、自力更生,一套一套的,轮到他们自己头上的时候,却都勇当缩头乌龟,宁可拿着--巨--款--去买外国产品也不愿意自己开发一个。
42 楼 jxqdxm 2014-05-27 15:50
[按上条]忍不住还想多说两句:全国有很多银行,不止作者服务的这一个银行会这么想,有这种需要,全国这么多银行、还有银行以外的企业,都是国-字-头的大企业、超大企业,他们只会拿着--公--款--挥--霍,却没有一个银行想自己开发一个数据库,国家也没有说出钱,或者委托民间企业搞一个。
41 楼 jxqdxm 2014-05-27 14:42
去年给一个银行技术老总讲解大数据方案,他突然问到,你们能不能不用别人的,自己写个ORACLE这样的数据库出来,我们每年花在license和服务费非常昂贵,升级也很痛苦,但是也没有办法。
---->回答这种SB老总的方法是:老总,知识就是金钱,高科技=高金钱,我要是自己能写一个同样的数据库出来,收费肯定比oracle还高。收费不高,我学的这些知识、做的这么好的产品难道都不值钱吗?同样的产品,oracle收钱那么多就行,我开发出来的产品就不值钱?还得心甘情愿被你剥削,给你降价使用?我有这么贱??我的产品有这么不值钱??我是你的奴隶??凭什么听你这种王八蛋老总的P话!!省下来的钱,都被你们这些人渣腐--败去了,该花的钱不花,NMD,嫌贵,不该花的钱天天花,自己去享受。CNMD。告诉你,oracle收费一点也不贵,把那些该花的钱拿回来就行了。
40 楼 jxqdxm 2014-05-27 08:34
我日,一个贴子分了好几次发,怎么也找不到原因,最后终于发现,原来"腐--败"竟然是过虑词,在这个网站是受保护的。十分想问一句这个网站为什么要保护"腐--败"。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 高性能数据库引擎 CoolHash 产品宣言 Fourinone4.0版新特性(转)

    Fourinone4.0版新特性:一个高性能的数据库引擎CoolHash(酷哈嘻)一、前言:如何写一个数据库如果将操作系统和业务应用之间的软件都统称中间件的话,那么最重要的软件无疑是数据库,它比web应用服务器市场更大,...

  • 写给高性能数据库引擎coolhash

    前一段时间fourinone在ITEYE资讯上发表了一篇[url]http://www.iteye.com/news/29025-Fourinone-CoolHash[/url]高性能数据库引擎产品宣言,我回复评论说玩得酷,还要考得住,借用一些企鹅手机管家的台词,结果被...

  • CoolHash数据库的产品宣言(Fourinone4.0版)

    Fourinone4.0版新特性:一个高性能的数据库引擎CoolHash(酷哈嘻) [b]一、前言:如何写一个数据库[/b] 如果将操作系统和业务应用之间的软件都统称中间件的话,那么最重要的软件无疑是数据库,它比web应用服务器...

  • nio

    如果你有少量的连接使用非常高的带宽,一次发送大量的数据,也许典型的IO服务器实现可能非常契合。下图说明了一个典型的IO服务器设计:    一个典型的IO服务器设计:一个连接通过一个线程处理 ...

  • (转)-Java-NIO

    如果你有少量的连接使用非常高的带宽,一次发送大量的数据,也许典型的IO服务器实现可能非常契合。下图说明了一个典型的IO服务器设计: 一个典型的IO服务器设计:一个连接通过一个线程处理 通道...

  • NIO

    如果你有少量的连接使用非常高的带宽,一次发送大量的数据,也许典型的IO服务器实现可能非常契合。下图说明了一个典型的IO服务器设计: 一个典型的IO服务器设计:一个连接通过一个线程处理 通道...

  • 来自oschina机器学习搜索结果的整理——机器学习开源库

    Oryx的目标是帮助Hadoop用户搭建并部署能够实时查询的机器学习模型,例如垃圾邮件过滤和推荐引擎。随着数据的不断流入,Oryx还将支持自我更新。 无论从建模还是部署,Oryx都可以随需扩展 最近更新: ...

  • ### 制造业上市公司高质量发展研究报告(2023年)

    内容概要:报告由中国信息通信研究院发布,旨在评估制造业上市公司高质量发展,强调制造业高质量发展的重要性,并构建了涵盖创新力、竞争力、影响力、贡献力四大维度的评价体系。通过对3500余家制造业上市公司2022年年报数据的综合评估,评选出百强企业。研究显示,百强企业专注主业,半数以上成长为制造业单项冠军;民营企业在盈利效率、创新发展方面表现优异;东部地区引领发展,装备制造业领先,新能源产业呈现爆发性增长。百强企业在科技创新、质效提升、持续增长、稳定就业等方面发挥重要作用,但也存在品牌建设和创新水平差距、领军企业竞争力提升空间、高端领域龙头企业培育不足等问题。 适用人群:制造业企业管理者、政策制定者、投资者及相关研究人员。 使用场景及目标:①帮助企业管理者了解行业发展趋势,提升企业竞争力;②为政策制定者提供决策参考,推动制造业高质量发展;③为投资者提供投资参考,识别优质企业;④为研究人员提供详实数据,助力学术研究。 其他说明:报告建议从重突破促升级、重创新补短板、重质量树品牌三个方面进一步推进制造业企业高质量发展,以加快建设具有全球竞争力的一流企业。

  • 异步电机无感矢量控制仿真:关键技术和代码实现技巧

    内容概要:本文详细介绍了异步电机无感矢量控制仿真的关键技术与常见问题解决方案。首先讨论了坐标变换(Clarke和Park变换)的基础操作及其注意事项,强调了正确选择系数的重要性。接下来深入探讨了滑模观测器的设计与优化方法,包括使用查表法替代三角函数计算以提高效率,以及加入低通滤波器减少高频抖振。此外,文章还涉及了速度估算的方法,如频域法和改进型滑模观测器的应用,并提供了具体的Python和Matlab代码片段。最后,针对电流环控制提出了前馈补偿机制,确保在突加负载情况下仍能保持良好的电流跟踪效果。文中多次提到调参技巧,特别是对于PI参数的选择给出了实用建议。 适合人群:从事电机控制系统研究与开发的技术人员,尤其是对异步电机无感矢量控制感兴趣的工程师。 使用场景及目标:适用于希望深入了解并掌握异步电机无感矢量控制仿真技术的研究人员和技术开发者。主要目标是在没有编码器的情况下实现对电机转速和扭矩的精确控制,同时提供详细的代码实现指导和调试经验。 其他说明:文章不仅提供了理论知识,还包括大量实际操作中的经验和教训,帮助读者避免常见的陷阱,快速搭建起有效的仿真环境。

  • (源码)基于Arduino的火箭动力学参数监测项目.zip

    # 基于Arduino的火箭动力学参数监测项目 ## 项目简介 这是一个基于Arduino平台的火箭动力学参数监测项目,旨在通过Adafruit BMP280压力传感器和Adafruit LIS3DH加速度传感器收集火箭飞行过程中的环境数据和运动数据。项目结合了Adafruit的BMP280库和LIS3DH库,实现对传感器数据的读取、处理及初步分析。 ## 项目的主要特性和功能 1. 环境数据监测通过BMP280压力传感器,实时监测并记录火箭周围的气压、温度和海拔高度变化。 2. 运动数据监测借助LIS3DH加速度传感器,获取火箭在飞行过程中的加速度、速度及方向变化数据。 3. 数据处理与传输Arduino负责收集和初步处理这些数据,然后通过串行通信或其他方式将数据发送到地面站或飞行控制软件。 4. 安全与警报基于收集的数据,项目可设置警报阈值,当超过预设的安全限制时,触发警报或采取相应的安全措施。 ## 安装使用步骤

  • (源码)基于Arduino的EPSleepy智能家居控制系统.zip

    # 基于Arduino的EPSleepy智能家居控制系统 ## 一、项目简介 EPSleepy是一个基于Arduino的智能家居控制系统原型。该项目旨在通过Arduino控制ESP32 WiFi和蓝牙板,结合MP3模块、shiftregister和按钮等硬件,实现智能家居的自动化控制。 ## 二、项目的主要特性和功能 1. 自动化控制通过Arduino代码控制ESP32板,实现家居设备的自动化控制。 2. 多种硬件支持支持MP3模块、shiftregister和按钮等硬件,实现音频播放、灯光控制、SD驱动等功能。 3. 模块化设计代码采用模块化设计,方便测试每个部分的功能,方便维护和调试。 4. 图形化界面可通过按钮和LED等硬件进行图形化操作和控制。 ## 三、安装使用步骤 1. 下载并解压项目源码文件。 2. 打开Arduino IDE,导入项目代码。 3. 连接硬件,包括ESP32板、MP3模块、shiftregister和按钮等。

  • Delphi 12.3控件之PowerPDF for Delphi11 FullSource.zip

    Delphi 12.3控件之PowerPDF for Delphi11 FullSource.zip

  • 电动工具领域中微CMS32M5533 800W角磨机方案的硬件设计与反电动势检测算法详解

    内容概要:本文深入探讨了中微CMS32M5533在800W角磨机方案中的应用,涵盖硬件设计和软件实现的关键技术。硬件方面,介绍了三相桥驱动电路、MOSFET选择、电流检测电阻、PCB布局等细节;软件方面,重点讲解了反电动势检测算法、ADC采样时机、PWM配置以及换相时机的动态补偿。此外,还提供了调试技巧和成本控制方法。 适合人群:从事电动工具开发的技术人员,尤其是对电机控制有一定经验的研发人员。 使用场景及目标:适用于希望深入了解电动工具控制系统的设计和优化,特别是希望通过反电动势检测减少霍尔传感器使用的开发者。目标是提高系统的可靠性和性能,同时降低成本。 其他说明:文中提供的代码片段和硬件设计细节有助于实际项目的开发和调试。建议读者结合提供的GitHub资源进行实践,并关注硬件选型和PCB布局的注意事项。

  • 2004-2023年 上市公司CEO绿色经历

    CEO的绿色经历是指该首席执行官(CEO)在其个人职业发展过程中,所积累的与环境保护、可持续发展、绿色经济等相关的教育背景、工作经验或社会活动经验。 涵盖了教育背景、工作经验、社会活动与个人价值观等多个方面。这些经历不仅塑造了CEO对环境保护和可持续发展的认知和态度,还可能影响他们在企业决策中优先考虑环保因素的程度,从而对企业的长期发展和环境保护产生重要影响。 根据现有研究(姜付秀和黄继承,2013;许年行和李哲,2016),从高管个人简历数据中查找CEO以前是否接受过“绿色”相关教育或从事过“绿色”相关工作,若企业CEO具有绿色经历,Green取值1,否则,取值0。 数据 Stkcd、年份、D0801c、Green、股票简称、行业名称、行业代码、制造业取两位代码,其他行业用大类、当年ST或PT为1,否则为0、样本区间内ST或PT为1,否则为0、金融业为1,否则为0、制造业为1,否则为0、沪深A股为1,否则为0、第一种重污染行业为1,否则为0、第二种重污染行业为1,否则为0、第三种重污染行业为1,否则为0、产权性质,国企为1,否则为0、所属省份代码、所属城市代码、所在省份、所在地级市

  • 电动汽车18650电池组蛇形液冷系统的COMSOL多物理场仿真与优化

    内容概要:本文详细介绍了利用COMSOL Multiphysics对18650电池组进行蛇形液冷系统仿真的全过程。首先探讨了快充场景下电池过热的风险及其对电动车安全性和寿命的影响。接着,通过集总电池模型简化电化学反应,重点分析了电池产热方程和温度对产热的影响。随后,深入讨论了蛇形流道几何参数优化,如流道宽度与压降之间的非线性关系,以及流固交界面处理方法。此外,还涉及了多物理场耦合求解技巧,包括流场与传热模块的设置,以及后处理阶段的数据提取和可视化。最终得出优化设计方案,显著降低了电池组的最高温度和温度不均性。 适合人群:从事电动汽车电池管理系统设计的研究人员和技术工程师,尤其是熟悉COMSOL仿真工具的专业人士。 使用场景及目标:适用于需要评估和优化电动汽车电池组热管理系统的场合,旨在提高电池组的安全性和使用寿命,同时减少能量损耗。 其他说明:文中提供了大量具体的代码片段和参数设置建议,有助于读者快速上手并应用于实际工程项目中。

  • 通信领域CCSDS LDPC译码器设计:基于修正最小和算法的C语言与Vivado实现

    内容概要:本文详细介绍了CCSDS LDPC译码器的设计与实现,主要采用了修正最小和译码算法。该算法通过对传统最小和算法的改进,引入缩放因子α,提高了译码性能。文中具体讨论了(8176,7154)和(1280,1024)两种码组的应用场景及其优劣,并展示了如何通过C语言和Vivado进行仿真和硬件实现。此外,文章还探讨了硬件实现中的关键技术,如定点化处理、校验矩阵的压缩存储、动态阈值机制以及硬件流水线设计等。 适合人群:从事通信系统开发的研究人员和技术人员,尤其是对LDPC编码和译码感兴趣的工程师。 使用场景及目标:①帮助研究人员理解和实现CCSDS LDPC译码器;②为实际工程项目提供高效的译码解决方案;③提高译码性能,减少误码率,提升通信系统的可靠性和效率。 其他说明:文章不仅提供了理论分析,还包括了大量的代码示例和实践经验分享,有助于读者全面掌握CCSDS LDPC译码器的设计与实现。

  • (源码)基于Arduino的超声波距离测量系统.zip

    # 基于Arduino的超声波距离测量系统 ## 项目简介 本项目是一个基于Arduino平台的超声波距离测量系统。系统包含四个超声波传感器(SPS)模块,用于测量与前方不同方向物体的距离,并通过蜂鸣器(Buzz)模块根据距离范围给出不同的反应。 ## 项目的主要特性和功能 1. 超声波传感器(SPS)模块每个模块包括一个超声波传感器和一个蜂鸣器。传感器用于发送超声波并接收回波,通过计算超声波旅行时间来确定与物体的距离。 2. 蜂鸣器(Buzz)模块根据超声波传感器测量的距离,蜂鸣器会给出不同的反应,如延时发声。 3. 主控制器(Arduino)负责控制和管理所有传感器和蜂鸣器模块,通过串行通信接收和发送数据。 4. 任务管理通过主控制器(Arduino)的 loop() 函数持续执行传感器任务(Task),包括测距、数据处理和蜂鸣器反应。 ## 安装使用步骤 1. 硬件连接

  • 主角跑步动作素材图包含6张图片

    主角跑步动作素材图包含6张图片

  • 2003-2023年 企业数字化转型测算结果

    企业数字化转型是指企业或组织将传统业务转化为数字化业务,利用人工智能、大数据、云计算、区块链、5G等数字技术提升业务效率和质量的过程。 当无形资产明细项包含“软件”“网络”“客户端”“管理系统”“智能平台”等与数字化转型技术相关的关键词以及与此相关的专利时,将该明细项目界定为“数字化技术无形资产”,再对同一公司同年度多项数字化技术无形资产进行加总,计算其占本年度无形资产的比例,即为企业数字化转型程度的代理变量。 本数据包含:原始数据、参考文献、代码do文件、最终结果。 参考文献:张永珅,李小波,邢铭强-企业数字化转型与审计定价[J].审计研究,2021(03):62-71. 数据 证券代码、证券简称、统计截止日期、报表类型、无形资产净额、资产总计、年份、期末余额(元)、数字化转型。

  • h5py-3.1.0-cp36-cp36m-win_amd64.whl

    该资源为h5py-3.1.0-cp36-cp36m-win_amd64.whl,欢迎下载使用哦!

Global site tag (gtag.js) - Google Analytics