1 / 58

Flash Group 开发报告 梁智超

Flash Group 开发报告 梁智超. 大纲. 芳径缥缈无踪迹, 姹紫嫣红何所栖? 丛中一只含露放, 拊尽芜杂终向伊。 ( 支持原创! ). 大纲. 芳径缥缈无踪迹, 姹紫嫣红何所栖? 丛中一只含露放, 拊尽芜杂终向伊。. 自古华山两条路. 白手起家,所有代码自己开发 - 导致重复性的工作 - 开发时间长 改造已有的开源 DBMS 原型系统 - 如何选择. 大纲. 芳径缥缈无踪迹, 姹紫嫣红何所栖? 丛中一只含露放, 拊尽芜杂终向伊。. FireBird

zamir
Download Presentation

Flash Group 开发报告 梁智超

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Flash Group 开发报告 梁智超

  2. 大纲 • 芳径缥缈无踪迹, • 姹紫嫣红何所栖? • 丛中一只含露放, • 拊尽芜杂终向伊。 (支持原创!)

  3. 大纲 • 芳径缥缈无踪迹, • 姹紫嫣红何所栖? • 丛中一只含露放, • 拊尽芜杂终向伊。

  4. 自古华山两条路 • 白手起家,所有代码自己开发 -导致重复性的工作 -开发时间长 • 改造已有的开源DBMS原型系统 -如何选择

  5. 大纲 • 芳径缥缈无踪迹, • 姹紫嫣红何所栖? • 丛中一只含露放, • 拊尽芜杂终向伊。

  6. FireBird -2000年7月,Borland(即现在的Inprise)公司公布了其数据库产品Interbase的源代码。Firebird数据库就是从该数据库中派生出来的。 -Firebird的设计思想是小型、快速和最小化的管理。这对于需要一个数据库用于存储数据,但又不想花太多时间来调整数据性能的开发人员很适用。

  7. mSQL -mSQL(mini SQL)是一种小型的关系数据库,性能不是太好,对SQL语言的支持也不够完全,个人使用免费,商业使用收费。 -由于mSQL较简单,在运行简单的 SQL语句时速度比MySQL略快。

  8. MySQL -由瑞典的MySQL AB公司负责开发和维护的,它是一个真正的多用户、多线程SQL数据库服务器。 -MySQL主要特点是快速、健壮和易用。 -The world's most popular open source database !

  9. PostgreSQL -最早是由美国加州大学伯克利分校开发的。 -支持SQL、有丰富的数据类型、面向对象。 -PostgreSQL运行速度明显低于MySQL。 -The world‘s most advanced open source database !

  10. Berkeley DB - Berkeley DB是由美国Sleepycat Software公司开发的一套开放源码的嵌入式数据库的程序库。 -不支持SQL语言,所有操作通过调用API来实现。 -嵌入式、轻便灵活、可伸缩。

  11. SQLite -SQLite 是 D. Richard Hipp 用 C 语言编写的开源嵌入式数据库引擎。它是完全独立的,不具有外部依赖性。它是作为 PHP V4.3 中的一个选项引入的,构建在 PHP V5 中。 -SQLite 支持多数 SQL92 标准 ,也非常健壮 。

  12. 大纲 • 芳径缥缈无踪迹, • 姹紫嫣红何所栖? • 丛中一只含露放, • 拊尽芜杂终向伊。

  13. Berkeley DB -功能齐全 -代码量小 -模块松耦合 -非关系型数据库 -非通用 -不支持SQL

  14. MySQL Vs PostgreSQL • MySQL -层次结构清晰,松耦合。 -Designed by/for Database Application Developers • PostgreSQL -层次结构复杂,紧耦合。 -设计缜密,超前,很学院派。 - Designed by/for Database Administrators

  15. MySQL Vs PostgreSQL (cont.) • 开发重点 MySQL: Vs PostgreSQL: 1 Ease-of-use Data integrity 2 Performance Security 3 Programmer Features Reliability 4 Reliability Standards 5 DB Features DB Features 6 Data integrity Performance 7 Security Ease-of-use 8 Standards Programmer Features

  16. MySQL整体架构

  17. The Answer BerkeleyDB-->MySQL

  18. 大纲 • 芳径缥缈无踪迹, • 姹紫嫣红何所栖? • 丛中一只含露放, • 拊尽芜杂终向伊。

  19. 整体计划 • 09暑假:吃透Berkeley DB源代码,完成说明文档。 • 09-10第一学期:设计并修改BDB的底层数据文件的存储结构。 • 09-10第二学期:设计并修改BDB的索引结构(btree、hash、queue、recno)。 • 10-11…:缓冲区管理、查询处理、事务管理(锁、日志)。 • 终极目标:设计并实现 一个针对Flash 芯片及SSD的DBMS!

  20. 暑期开发计划

  21. 暑期开发计划(cont.)

  22. 暑期开发计划(cont.)

  23. 暑期开发计划(cont.) frankey others 主要数据结构 粗读相应代码 核心文件 整理相应数据结构 其他文件 相应核心文件 整合文档 相应其它文件

  24. 暑期开发计划(cont.) • 第一周: -梁智超报告db文件夹中包含的主要数据结构及各个数据结间的关系; -周大报告BDB中hash索引的实现机制。 • 第二周: -汤显报告BDB中缓冲区管理的实现机制。 -范玉雷报告BDB日志管理部分的实现机制;

  25. 暑期开发计划(cont.) • 第三周: -卢泽萍报告BDB锁管理部分的实现机制; -梁智超报告env的主要数据结构及其对其它功能模块的整合调用。 • 第四周: -周大报告BDB中btree索引的实现机制; -范玉雷报告BDB中事务管理部分实现机制。

  26. 暑期开发计划(cont.) • 周一碰头会: -交流上周的阅读执行情况; -提出并讨论代码阅读的计划。 • 周三碰头会: -解决相互间的问题并进行总结,以更好地完成本周任务;

  27. Template • 主要数据结构描述 -数据结构定义 struct __db_mpool { db_mutex_t mutex; DB_MPREG *pg_inout; LIST_HEAD(__db_mpregh,__db_mpreg)dbreg; TAILQ_HEAD(__db_mpoolfileh,__db_mpoolfile) dbmfq; ENV *env; REGINFO *reginfo; }

  28. Template (cont.) • 主要数据结构描述 -相关属性解释 mutex 线程互斥体 pg_inout 对于DB pgin/pgout方法的DB_MPREG结构 dbregq 相链接的指明应用的pgin/pgout方法列表 dbmfq DB_MPOOLFILE的列表 env 封装的环境 reginfo 底层的区域文件信息

  29. Template (cont.) • 数据结构间的关系

  30. Template (cont.) • 程序结构总框图

  31. Template (cont.) • 函数体描述 函数名称:__memp_fget( ) 函数功能:从文件中得到一个缓 冲页 算法流程图: 上下层接口设计: -e.g.被XXX调用,调用XXX

  32. Berkeley DB简介 • Berkeley DB是由美国Sleepycat Software公司开发的一套开放源码的嵌入式数据库的程序库(database library),它为应用程序提供可伸缩的、高性能的、有事务保护功能的数据管理服务。Berkeley DB为数据的存取和管理提供了一组简洁的函数调用API接口。它是一个经典的C-library模式的toolkit,为程序员提供广泛丰富的函数集,是为应用程序开发者提供工业级强度的数据库服务而设计的 。

  33. Berkeley DB的特点 • 嵌入式(Embedded) -它直接链接到应用程序中,与应用程序运行于同样的地址空间中,因此,无论是在网络上不同计算机之间还是在同一台计算机的不同进程之间,数据库操作并不要求进程间通讯。Berkeley DB为多种编程语言提供了API接口,其中包括C、C++、Java、Perl、Tcl、Python和PHP,所有的数据库操作都在程序库内部发生。多个进程,或者同一进程的多个线程可同时使用数据库,有如各自单独使用,底层的服务如加锁、事务日志、共享缓冲区管理、内存管理等等都由程序库透明地执行。

  34. Berkeley DB的特点(cont.) • 轻便灵活(Portable) -它可以运行于几乎所有的UNIX和Linux系统及其变种系统、Windows操作系统以及多种嵌入式实时操作系统之下。它在32位和64位系统上均可运行,已经被好多高端的因特网服务器、台式机、掌上电脑、机顶盒、网络交换机以及其他一些应用领域所采用。一旦Berkeley DB被链接到应用程序中,终端用户一般根本感觉不到有一个数据库系统存在。

  35. Berkeley DB的特点(cont.) • 可伸缩(Scalable) -这一点表现在很多方面。Database library本身是很精简的(少于300KB的文本空间),但它能够管理规模高达256TB的数据库。它支持高并发度,成千上万个用户可同时操纵同一个数据库。Berkeley DB能以足够小的空间占用量运行于有严格约束的嵌入式系统,也可以在高端服务器上耗用若干GB的内存和若干TB的磁盘空间。

  36. Berkeley DB产品种类 • 普通数据存储(Berkeley DB Data Store) • 并发数据存储(Berkeley DB Concurrent Data Store) • 事务数据存储(Berkeley DB Transactional Data Store) • 高可用性数据存储(Berkeley DB High Availability)

  37. Berkeley DB的子系统 • Berkeley DB由五个主要的子系统构成,包括存取管理子系统、内存池管理子系统、事务子系统、锁子系统以及日志子系统。

  38. Berkeley DB的子系统(cont.) • 数据存取(Access Methods)子系统为创建和访问数据库文件提供了多种支持。Berkeley DB提供了以下四种文件存储方法:哈希文件、B树、定长记录(队列)和变长记录(基于记录号的简单存储方式)。 • 内存池(Memory pool)子系统对Berkeley DB所使用的共享缓冲区进行有效的管理。它允许同时访问数据库的多个进程或者进程的多个线程共享一个高速缓存,负责将修改后的页写回文件和为新调入的页分配内存空间。

  39. Berkeley DB的子系统(cont.) • 事务(Transaction)子系统为Berkeley DB提供事务管理功能。该子系统使用两段锁技术和先写日志策略来保证数据库数据的正确性和一致性。 • 锁(Locking)子系统为Berkeley DB提供锁机制,为系统提供多用户读取和单用户修改同一对象的共享控制。 • 日志(Logging)子系统采用的是先写日志的策略,用于支持事务子系统进行数据恢复,保证数据一致性。

  40. Berkeley DB存取系统 • (key,value)对:Berkeley DB让应用程序将其定义的每一个表作为一个“数据库”进行存储,表中的每一条记录都是一个(key,value)对。对这些记录可以进行以下几种操作: (1)向数据库中插入一条记录; (2)从数据库中删除一条记录; (3)通过key值从数据库中查找一条记录; (4)更新一个已经存在的记录;

  41. Berkeley DB存取系统(cont.) • 数据库:在Berkeley DB中,数据库是数据的逻辑组织单位,库作为一个逻辑概念,物理上对应于一个按某种结构组织起来的文件或文件中按某种结构组织起来的一部分。每一个数据库由若干条记录组成,每条记录都是一个(key,value)对,或叫key/data pair。实际上,在Berkeley DB中所提到的“数据库”,相当于一般关系数据库系统中的表;而“key/data”对则相当于关系数据库系统中的行(rows)。

  42. Berkeley DB存取系统(cont.) • 例子:水果——销售商店名称数据库表:字段为(fruit,store),其中fruit字段为主键

  43. Berkeley DB存取系统(cont.) • Key和value都可以是任意长的字节串。存储和获取记录的过程都不需要进行数据格式的转换,但应用程序本身必须知道这些数据在存入之前是什么结构或类型。 • 一方面,Berkeley DB不会为应用程序员提供关于它所存储的value的内容和结构信息,因为它根本不知道,因此程序员自己必须得知道它所取出的数据结构和含义。 • 另一方面,Berkley DB对存入其中的数据无任何有关数据类型的限制,应用程序也不需要把自己的应用程序数据转化成Berkeley DB所支持的数据类型。无论多么复杂的数据类型或结构,Berkeley DB都可以存取。

  44. Key Key Key …… …… …… Key Key Key Free space Free space Free space …… Key Key Data Data …… …… Key Key Data Data Free space Free space …… Berkeley DB存取系统(cont.) • Btree:该存储类型是要将数据库的数据组织成一个有序的平衡树结构并对其进行维护,大致结构如下图所示。

  45. Berkeley DB存取系统(cont.) • Hash:Berkeley DB采用一种叫做可扩展线性散列方法(Extended Linear Hashing),是参考1980年VLDB的一篇论文”Linear Hashing: A New Tool for File and Table Addressing ”。 • Queue:队列方法使用逻辑记录号作为key值来存储定长记录。可向队尾快速插入数据,利用游标机制从队头删除或返回记录。 • Recno:记录号存取方法用于存取以逻辑记录号作为关键字的记录。其记录号可以为可变(mutable)或固定(fixed)两种模式。前者是指在插入或删除记录后,其余记录的记录号会发生改变,而后一种模式下记录号不变。

  46. Berkeley DB事务系统 • 在BerkeleyDB中事务子系统通过DB_ENV->open来建立、初始化和打开, DB_ENV->txn->begin开始一个事务, DB_ENV->abort或DB_ENV->commit结束一个事务,每个事物都有一个事务管理器进行管理。 • 事务通过一个31bit的无符号整数来标识,在数据库环境最初建立的时候,事务的ID被重置,新的事物从0X80000000开始,往后循环使用。

  47. Berkeley DB事务系统(cont.) • Berkeley DB提供对嵌套事务的支持。嵌套事务允许一个应用程序将一个大而长的事务分成可以独立中止的小的事务单元。用一个父事务标识符创建的事务称为子事务。 • 嵌套事务特性: (1)一旦一个事务成为父事务,只要它的任何一个子事务还没有提交或中止,该父事务除了开始更多一些子事务,不可以有任何Berkeley DB 调用。

  48. Berkeley DB事务系统(cont.) (2)当一个子事务开始时,它继承它的父事务的所有锁,这意味着子事务将不会被父事务所持有的锁阻碍。 (3)子事务是完全臣服于父事务。即使一个子事务提交,如果它的父事务最终中止了,将undo这个子事务的所有改变,子事务也将中止。子事务是提交还是中止最终取决于父事务,如果父事务提交,则子事务也提交;如果父事务中止,则子事务也中止。

  49. Berkeley DB事务系统(cont.) • 当创建事务应用程序时,通常需要围绕数据库环境创建一个管理架构。这个架构有5个部分: (1)死锁检查: db_deadlock, DB_ENV->lock_detect, DB_ENV->set_lk_detect (2)检查点: db_checkpoint, DB_ENV->txn_checkpoint (3)数据库和日志文件归档: db_archive, DB_ENV->log_archive (4)恢复处理: db_recover, DB_ENV->open

  50. Berkeley DB事务系统(cont.) • 死锁检查: (1)为了检测死锁的发生,一个独立的进程或线程必须回顾数据库中当前持有的锁,建立一个事务等待图,如果发现图中存在回路,则表明系统中出现了死锁(等待图法)。 (2)可以为事务设定一个timeout,如果事务的执行时间超出这个timeout,就认定发生死锁。(超时法)。 • 一旦死锁发生就选择一个牺牲品,释放牺牲事务的所占的资源。

More Related