数据库、编译器、操作系统开发

希望能从数据库开始入手,通过编译器开发,进而实现一个数据库操作系统。也就是说,如果安装了数据库,则就有了操作系统;也即:数据库===操作系统。


 

我已经做了个简单的查询引擎,粗糙得很,但是这表示我不是说笑的,是当真的。源码没上传,东西在此:


 

http://git.oschina.net/wharf/TNDB


 

目前还在持续开发。存储引擎还没出来,所以现在读写TSV。见笑了。


 

想说“这很难,不现实,疯狂得没边,云云”的牛人们,请保持缄默,别打击就好。不怕死,不畏难,不信邪的,大家一起上!


 

取得联系请直接@我,祝好!


 

顺便补充下:


 

关于合作方式,可以非常灵活。我们可以开源,也可以不开源,但是我们的目的很明确,如果合作成功,将来肯定是要投入商业运作的,因为一个产品如果不能实现大面积商用,那就是不成功的。为此,源码的所有权这个敏感的话题现在就可以大胆说明白:所有参与开发的作者,你的源码都归你所有,不需要提交源码,直到大家都需要控制源码的那一天到来,那时候我们再谈源码的归属和控制,这是很遥远的后话了。这种合作方式,也许可以称作“众研模式”吧。


 


 


 

2014年9月21日补充:


 

截至当前,数据库一期开发基本完成,已经实现的功能有:


 

1、create databse,drop database,use database,close database


 

2、create table(Key Type,Key Type,...),create table [as] select-subclause,drop table,update table set [where],delete from table [where],insert into table[(...)] values(...),insert into table [as] select-subclause,select ... from table [where][group by][having][order by](select支持无限层嵌套),[run] where ... in table


 

3、get type,get records count,get tables name,get version,get database name,get tables count,eval


 

4、支持 dual

5、内置帮助 -h/--help//?/?/\?

6、查阅配置文件 -s/!
 


 

尚未实现的功能有很多,基本的一些包括:


 

1、alter table,alter database,创建数据表时使用修饰词 default、NULL、UNIQUE,insert into table values(...) values(...)连续插入(这些实现起来很容易,但是需要时间,总体设计来看,数据库文件格式本身就原生支持它们,放心,早晚会有的)


 

2、存储过程(目前仅仅做了解释器的测试开发,没有精力开发编译器)


 

3、网络功能(目前已经测试成功,但精力有限,暂时没加入此模块)


 

4、并发访问(目前没做写保护,自己保证始终只有一个进程从事写操作)


 

5、关系运算(差并交等)(按计划很快会有,但不是现在)


 

6、约束、主键、外键、触发器、事务、回退等


 

关于数据库的一些额外说明:


 

1、数据库零代码起步,一人开发至今,耗时2年多


 

2、使用C/C++语言开发,开发平台Ubuntu-32bit-v14.04,IDE用的Code::Blocks+leafpad,编译器gcc/g++


 

3、数据库完全自行设计开发,没有参阅任何开源数据库代码,因为没时间看那些庞大的代码,等看得差不多了,人也老了,搞屁哟,别说我不谦虚,没办法的事情


 

4、数据库文件格式自行设计,一个文件就是一个数据库,一个数据库在理论上最大存储2^64字节数据,单个数据表理论上最大存储2^64字节数据,一个数据库可以容纳任意多数据表,但是库容不超过2^64字节


 

5、数据库按行访问和按列访问的时间基本一样,允许按数据点访问


 

6、数据表支持任意字段的混杂类型存储,也即:在一个int列中,你可以存储string,binary,等等


 

7、基本上,可以把它看成是“关系型+非关系型+K-V”的,也可以看成是“按行存储+按列存储+按点存储”的


 

8、数据库支持存放任何数据进入数据表中,只要使用正确的数据类型即可,目前支持的数据类型绝大部分来自C/C++,包括:bool/char/unsigned char/uchar/short/unsigned short/ushort/int/unsigned int/uint/long/unsigned long/ulong/long long/unsigned long long/ulonglong/float/double/timestamp/string/binary,各种定长类型的大小随平台而定,你懂的,变长类型不需要指定长度,数据有多长就是多长,无需申告先,变长类型主要是string和binary,大小上限是2^64字节,当然,还是取决于操作系统和CPU,这里说的2^64字节限制是基于32位机而言,64位机的话,应该是按比升高到2^128字节吧


 

9、数据库同时使用了面向过程和面向对象的开发方式,对象模型分3层:数据点、数据表、数据库。其中,数据点是最基本的原子对象,数据表直接建立在其上,数据库则又建立在数据表基础之上。注意,没有行对象、列对象,实体上说是没有,但在逻辑上存在。一个仅有一行的数据表就是行对象,一个仅有一列的数据表就是列对象,如此而已。


 

10、目前处于开发初期,因此没有纳入加密、压缩等模块,但是,数据库文件格式本身的设计已经考虑到了,以后开发进入成熟期就会增加这些咚咚


 

11、数据库已经加入大数运算模块,支持任意位数的整数、浮点数的加、减、乘、乘方,支持除数位长不超过18位的整数、浮点数的除法(被除数位长任意),暂不支持开方;除法限制未来会完善以取消


 

12、内置函数目前有限,主要是一些基本的函数,同样包装自C/C++、glibc++,陆续包装中:


 

(1)数学、统计


 

abs、sum、avg


 

(2)字符串


 

left、right、mid、substr


 

(3)类型转换


 

tonum、tostr


 

(4)系统类


 

time、year、month、day、date、hour、minute、second


 

(5)其他的正在逐步加入,取决于个人时间和精力


 

13、数据库按需申请空间、按配置申请空间,没有需要、没有配置的情况下,不占用磁盘空间,直到最后一刻


 

14、数据库一旦扩大,在有数据的前提下,不会自动收缩,需要另行开发提供数据库重整工具来做。但是,一旦数据库中最后一张表被删除,数据库会在瞬间收缩到60字节的原始大小。


 

15、数据表分页存储,每张表由三个逻辑区构成,一个表元区,一个地址区,一个数据区,但这仅仅是逻辑上的概念,在物理上,每张表仅存在唯一的一个表元区,但是会有任意个地址区和数据区,根据需要自动创建、格式化、加入链表及使用,地址区和数据区之间没有时间先后等方面的必然联系,对“地址和数据总是连续存放”的假设基本总是不成立的


 

16、数据库文件格式不仅仅是面向数据库,未来将会成为操作系统的默认文件系统格式,如果有未来的话


 

17、数据库的版本支持包括 Linux 32位、Linux 64位、Windows 32位、Windows 64位,每种版本都有静态和动态编译版本。始终坚持采取单文件,不拖带so,a,dll,lib神马的,拷贝即可使用。


 

18、当前没有加入权限管理模块,因为没有加入加密模块,权限管理没意义,暂时一切都是明文存储的,等未来成熟起来,稳定下来,再做这些修饰性工作


 

19、也正在考虑是否加入嵌套表的实现和支持,即:把一张表放在另一张表里面,准确地说,是:一张表成为另一张表的一个数据点


 

20、数据库使用wfsql,同时会积极地基于wfsql,内置指定若干关键字的昵称,以兼容pl-sql,t-sql,mysql,jet-sql等,目前,数据库所使用的脚本文件语法基本可与mysql一致,mysql的脚本文件可以直接拿来用,不需要修改,反之则不行。当然,如果脚本文件所包含的mysql使用了我数据库暂时没有的功能,那肯定是暂不能用的,抱歉


 

21、按预定设计,未来可以直接从数据表中查询源码并就地解释执行,也允许源码编译后存入数据库,需要时查询调用(在此处,我最大的希望是只要逻辑上下文允许,代码可以按需自己修改自己,边改边解释执行);任意二进制可执行程序皆可存入数据库,按需查询定位,提取及运行,只要操作系统环境支持即可;期望能够在此引入沙盒

22、哦,差点忘记说一个重要的东西,补充下。数据库允许使用“非法”标识符,比如你给一个数据表起名叫做“-123%your?table:name”,或者你的数据表的字段名叫做“\t/$。。。”也是没问题的,哇哈哈,我喜欢。当然,你也可以自行约束自己的使用方法,遵循标准是你选择的自由,尊重您的选择。除了极其特殊的“非法”字符,需要转义(\)使用外,其他“非法”字符直接灌,随便丢吧

2014年09月26日补充:

1、增加了 desc table、deepdesc table、eval value expr、eval logic expr、eval big [plus|multi|div]、drop table *等语句

2、增加了对默认值、[NOT] NULL、UNIQUE、MIX的支持,其中:默认值可以由用户指定,也可以由用户开启自行推定,默认是不指定则为NULL;MIX,开启后,该字段可以存放任何类型数据,且不影响正常查询、删除、更新等操作,但是,行为会有一些特殊。此特性主要设计为用作数据点逻辑隐藏。

3、对自动数据类型转换,实现为:用户需要先确定是否自动转换,不转,或者转换。其次,如果设为自动转换,则需要进一步确定字符串优先,还是数值优先。如果字符串优先,则遇到"123"+456,会得到"123456";如果数值优先,则会得到579。如果不转换,则报错,语句无法执行。
 

4、下面贴上部分外置配置参数文件模板

数据库、编译器、操作系统开发_第1张图片
 

数据库、编译器、操作系统开发_第2张图片
 

数据库、编译器、操作系统开发_第3张图片
 

数据库、编译器、操作系统开发_第4张图片
 

《其他更多待续 。。。。。开发设计太多,忘记了,回头想起来再补充,嗯,文档该整理了,时间好少,咳咳》

2014年10月29日补充:(站点测试截图)

数据库、编译器、操作系统开发_第5张图片

数据库、编译器、操作系统开发_第6张图片

数据库、编译器、操作系统开发_第7张图片

数据库、编译器、操作系统开发_第8张图片

2014年11月4日

网站开通,欢迎来访,手下留情哦,呵呵

http://www.wfihc.com

1、可以创建、删除数据库,可以建表,可以插入记录,查询记录,更新记录等

2、请使用比较特殊的数据库名,以便不与他人冲突导致失败

3、测试而已,请勿做大数据量操作,很快会给出下载链接,大的测试可以下载到本地测试

4、网站完善中,精力有限,更新速度可能会慢

你可能感兴趣的:(数据库,操作系统,编译器)