[其它] 有没有朋友对研究学习数据库的实现感兴趣?

bigpanda 2007-05-14
我上周五和一个同事探讨了一个项目的可行性,需要有实现数据库的知识,于是周末找出书来翻了翻。

我看的书是:Database System Implementation, by Carcia-Molina, Ullman, Widom, Prentice Hall出版社。

数据库的实现先要从Data Storage Engine开始,说白了就是对文件的读写。上本书中提出了下列问题:

1. How do we represent SQL datatypes as fields?
2. How do we represent tuples as records?
3. How do we represent collections of records or tuples in blocks of memory?
4. How do we represent and store relations as collectioni of blocks?
5. How do we cope with record sizes that may be different for different tuples or that do not divide the block size evenly, or both?
6. What happens if the size of a record changes because some field is updated? How do we find space within its block, especially when the record grows?

因为我只对Win32的函数比较了解就跑去翻了翻Ken Henderson的The Gurus's Guide to SQL Server Architecture and Internals。第五章讲了讲SQL Server用的IO技术,比如Asynchronous and Nonbuffered I/O, Scatter-Gather I/O, I/O Completion Ports, Memory-Mapped File I/O。

我的想法是以Database System Implementation这本书为核心,学习数据库的实现,编一些小程序来验证。有没有朋友对这个感兴趣大家一起来学习?

特别欢迎搞Linux/UNIX/BSD的朋友,我对这些系统的API不熟悉,对照着学习一下很有意思。

写这种高端服务器,目前还算是C/C++的天下,呵呵。不知Erlang能有多牛。
simohayha 2007-05-14
bigpanda 有看过mysql之类的源妈吗?是不是可以对照对照,嘿嘿.
bigpanda 2007-05-14
simohayha 写道
bigpanda 有看过mysql之类的源妈吗?是不是可以对照对照,嘿嘿.


MySQL 4.0的时候看过一次源码,真他妈的恶心。我对MySQL没什么好感,以前没用InnoDB的时候连对事务支持都没有,这叫什么数据库。这个InnoDB还是芬兰的一个公司搞的,给Oracle买去了。想不通为什么MySQL混的这么好,马上还要在Nasdaq上市,那些创始人马上就要身价上亿了。

MySQL于2001年成立在瑞典Uppsala,我大学就在那里上的。

MySQL开头因为没有自己的Storage Engine,所以搞了个Pluggable Storage Engine Architecture,因而代码复杂。这个Storage Engine是系统的核心,没有自己的Storage Engine就没有什么技术含量。

MySQL正在开发6.0呢,从头写个Storage Engine。

我倒是对SAP的MaxDB很感兴趣,不过里面的build脚本都是Perl和Python,我两个都不会,这也罢了,要命的是文件中时不时跳出来一堆德语出来,于是也算了。

看这么大的项目的源代码,如果没人指点的话,很难搞出点名堂来。Database System Implementation这本书还是不错的,一小点一小点解析出来。

另外某些方面的最新研究成果,这些开源数据库还没有实现。比如concurency without locks。要是自己一个个topic研究下去,可以把这些最新成果包含进去,不是有趣的多。

关于Concurreny withou locks,可以看看这篇论文:

http://www.cl.cam.ac.uk/research/srg/netos/papers/2004-cpwl-submission.pdf
wzgme 2007-05-14
Data Storage Engine

有兴趣,现在要对单个上G文件读写,如果嵌入这么一个Engine,也许有很好的效果。
soulmachine 2007-05-15
我也有兴趣,我们正在数据库实现这门课
simohayha 2007-05-15
不知道bigpanda 看一些比较大的东西的源码时,是怎么看的?我有时感觉有些无从下手的感觉,特别是那些纯c的代码.
nj_first 2007-05-15
simohayha,有C/C++开源的东西,发一个学习学习
nj_first.2008@yahoo.com.cn
simohayha 2007-05-15
呵呵,远的不说,比如JVM(c++写的),python(c写的),要找开源的,linux下多的和什么一样。
bigpanda 2007-05-15
wzgme 写道

Data Storage Engine

有兴趣,现在要对单个上G文件读写,如果嵌入这么一个Engine,也许有很好的效果。


我的想法是学习Data Storage Engine的实现技术,做些小程序来验证验证,搞出些toolbox。真写个storage engine就罢了。不同的地方的需求不一样,数据库的data engine和你的应用的需求未必一样,但是底层的Toolbox可能是一样的。我们学习一点,记点笔记,写几个小程序。就是将来放弃了,留下的东西对别人也是有帮助的。坑不敢挖的太大,不然填不满就成太监了。

soulmachine 写道

我也有兴趣,我们正在数据库实现这门课


你在哪里读书呀?课程多大,课本用的是什么?

simohayha 写道

不知道bigpanda 看一些比较大的东西的源码时,是怎么看的?我有时感觉有些无从下手的感觉,特别是那些纯c的代码.


我读源码走麦城的经历多多,win2k,Linux,BSD,MaxDB,都没弄出什么头绪出来,狐狸吃刺猬,无处下嘴。MySQL本来只是翻翻,也没上心。

win2k,BSD的代码看起来很舒服,Linux,MySQL就差多了。MaxDB的代码很怪,看不出头绪来。

小的项目还是成功的阅读了一些。第一步尽量把程序编译出来,然后可以通过debugger跟踪。集中注意力在几个关键的数据结构上。

光读别人的源代码是不够的,也要进行理论学习。自己还得写写代码,读懂了别人的代码和自己写还是不在一个层次。

回归主题。

还是有几个人感兴趣的,共同学习吧。我是打算以Database System Implementation为核心展开学习,这本书机械工业出版社引进影印版了。斯坦福大学的高年级的课是用这本书当教材(废话,作者都是斯坦福的教授),美国也有不少院校开研究生课用这本书。这本也是我唯一找到的讲数据库实现的书。(电子版有,自己找找吧,我这本电子版的质量惨不忍睹。)

这本书共分11章:

1. Introduction to DBMS Implementations
2. Data Storage
3. Representing Data Elements
4. Index Structures
5. Multidimensional Indexes
6. Query Execution
7. The Query Compiler
8. Coping With System Failures
9. Concurrency Control
10. More about Transaction Management
11. Information Integration

目前的重点是第2,3,4章。后面的以后再说吧。

数据库是很有挑战性的项目,涉及到了计算机科学的很多方面。(编游戏也是很有挑战性的项目,涉及到了其他的数据库不涉及的方面,两个和起来几乎涉及到了计算机科学的方方面面,通吃了。)

我五,六月份每周能抽出大半天来搞这玩艺,七月份能多挤点。八月份以后不好说,要看工作情况。

我是在Win32平台上实现,有点成果心得了就贴出来。

Let's ROCK!

soulmachine 2007-05-16
我们用的书就是斯坦福的这本!我在武汉大学
Global site tag (gtag.js) - Google Analytics