仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 695|回复: 7
打印 上一主题 下一主题

[学习教程] MSSQL编程:Berkeley DB 概述

[复制链接]
海妖 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:34:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
用一个库#bak_database存放这些历史数据。
BerkeleyDB概述

皮东

BerkeleyDB是由美国SleepycatSoftware公司开辟的一套开放源码的嵌进式数据库的程序库(databaselibrary),
它为使用程序供应可伸缩的、高功能的、有事件回护功效的数据办理服务。BerkeleyDB为数据的存取和办理供应了一组
简便的函数挪用API接口。

它是一个典范的C-library形式的toolkit,为程序员供应普遍丰厚的函数集,是为使用程序开辟者供应产业级强度的
数据库服务而计划的。其次要特性以下:

嵌进式(Embedded):它间接链接到使用程序中,与使用程序运转于一样的地点空间中,因而,不管是在收集上分歧
盘算机之间仍是在统一台盘算机的分歧历程之间,数据库操纵其实不请求历程间通信。

BerkeleyDB为多种编程言语供应了API接口,个中包含C、C++、Java、Perl、Tcl、Python和PHP,一切的数据库操纵
都在程序库外部产生。多个历程,大概统一历程的多个线程可同时利用数据库,有如各自独自利用,底层的服务如加锁、
事件日记、共享缓冲区办理、内存办理等等都由程序库通明地实行。

笨重天真(Portable):它能够运转于几近一切的UNIX和Linux体系及其变种体系、Windows操纵体系和多种嵌进式实
时操纵体系之下。它在32位和64位体系上都可运转,已被很多多少高真个因特网服务器、台式机、掌上电脑、机顶盒、收集
互换机和其他一些使用范畴所接纳。一旦BerkeleyDB被链接到使用程序中,终端用户一样平常基本感到不到有一个数据库
体系存在。

可伸缩(Scalable):这一点体现在良多方面。Databaselibrary自己是很精简的(少于300KB的文本空间),但它
可以办理范围高达256TB的数据库。它撑持高并发度,不计其数个用户可同时利用统一个数据库。BerkeleyDB能以充足小
的空间占用量运转于有严厉束缚的嵌进式体系,也能够在高端服务器上耗用多少GB的内存和多少TB的磁盘空间。

BerkeleyDB在嵌进式使用中比干系数据库和面向工具数据库要好,有以下两点缘故原由:

(1)由于数据库程序库同使用程序在不异的地点空间中运转,以是数据库操纵不必要历程间的通信。在一台呆板的
分歧历程间或在收集中分歧呆板间举行历程通信所消费的开支,要远宏大于函数挪用的开支;

(2)由于BerkeleyDB对一切操纵都利用一组API接口,因而不必要对某种查询言语举行剖析,也不必天生实行企图,
年夜年夜进步了运转效.


BerkeleyDB体系布局


BerkeleyDB由五个次要的子体系组成.包含:存取办理子体系、内存池办理子体系、事件子体系、锁子体系和日记子体系。
个中存取办理子体系作为BerkeleyDB数据库历程包外部中心组件,而其他子体系都存在于BerkeleyDB数据库历程包的内部。

每一个子体系撑持分歧的使用级别。

1.数据存取子体系
数据存取(AccessMethods)子体系为创立和会见数据库文件供应了多种撑持。BerkeleyDB供应了以下四种文件存储办法:
哈希文件、B树、定长纪录(行列)和变长纪录(基于纪录号的复杂存储体例),使用程序能够从当选择最合适的文件构造布局。
程序员创立表时可使用恣意一种布局,而且能够在统一个使用程序中对分歧存储范例的文件举行夹杂操纵。

在没有事件办理的情形下,该子体系中的模块可独自利用,为使用程序供应疾速高效的数据存取服务。
数据存取子体系合用于不需事件只需疾速格局文件会见的使用。

2.内存池办理子体系
内存池(Memorypool)子体系对BerkeleyDB所利用的共享缓冲区举行无效的办理。它同意同时会见数据库的多个历程大概
历程的多个线程共享一个高速缓存,卖力将修正后的页写回文件和为新调进的页分派内存空间。

它也能够自力于BerkeleyDB体系以外,独自被使用程序利用,为其本人的文件和页分派内存空间。
内存池办理子体系合用于必要天真的、面向页的、缓冲的共享文件会见的使用。

3.事件子体系
事件(Transaction)子体系为BerkeleyDB供应事件办理功效。它同意把一组对数据库的修正看做一个原子单元,
这组操纵要末全做,要末全不做。在默许的情形下,体系将供应严厉的ACID事件属性,可是使用程序能够选择不利用体系所作的
断绝包管。该子体系利用两段锁手艺和先写日记战略来包管数据库数据的准确性和分歧性。

它也能够被使用程序独自利用来对其本身的数据更新举行事件回护。事件子体系合用于必要事件包管数据的修正的使用。

4.锁子体系
锁(Locking)子体系为BerkeleyDB供应锁机制,为体系供应多用户读取和单用户修正统一工具的共享把持。
数据存取子体系可使用该子体系取得对页或纪录的读写权限;事件子体系使用锁机制来完成多个事件的并发把持。

该子体系也可被使用程序独自接纳。锁子体系合用于一个天真的、疾速的、可设置的锁办理器。

5.日记子体系
日记(Logging)子体系接纳的是先写日记的战略,用于撑持事件子体系举行数据恢复,包管数据分歧性。
它不年夜大概被使用程序独自利用,只能作为事件子体系的挪用模块。

以上几部分组成了全部BerkeleyDB数据库体系。各部分的干系以下图所示:

在这个模子中,使用程序间接挪用的是数据存取子体系和事件办理子体系,这两个体系进而挪用更上层的内存办理子体系、
锁子体系和日记子体系。

因为几个子体系绝对对照自力,以是使用程序在入手下手的时分能够指定哪些数据办理服务将被利用。能够全体利用,
也能够只用个中的一部分。比方,假如一个使用程序必要撑持多用户并发操纵,但不必要举行事件办理,那它就能够
只用锁子体系而不必事件。有些使用程序大概必要疾速的、单用户、没有事件办理功效的B树存储布局,那末使用程序
可使锁子体系和事件子体系生效,如许就会削减开支。

BerkeleyDB存储功效概述

BerkeleyDB所办理数据的逻辑构造单元是多少个自力或有必定干系的数据库(database),
每一个数据库由多少纪录构成,这些纪录全都被暗示成(key,value)的情势.

假如把一组相干的(key,value)对也看做一个表的话,那末每个数据库只同意寄存一个table,
这一点分歧于一样平常的干系数据库。实践上,在BerkeleyDB中所提到的“数据库”,相称于一样平常干系数据库体系中的表;
而“key/data”对相称于干系数据库体系中的行(rows);BerkeleyDB不供应干系数据库中列间接会见的功效,
而是在“key/data”对中的data项中经由过程实践使用来封装字段(列)。

在物理构造上,每个数据库在创立的时分能够由使用程序依据其数据特性来选择一种符合的存储布局。
可供选择的四种文件存储布局分离是:哈希文件、B树、定长纪录(行列)和变长纪录(基于纪录号的复杂存储体例)。

一个物理的文件中能够只寄存一个独自的数据库,也能够寄存多少相干或不相干的数据库,并且这些数据库
能够分离接纳除行列以外恣意分歧的构造体例,以行列构造的数据库只能独自寄存于一个文件,不克不及同其他存储范例夹杂寄存。

一个文件除受最年夜文件长度和存储空间的束缚以外,实际上能够存储恣意多个数据库。
因而体系定位一个数据库一般必要两个参数——“文件名”和“数据库名”,这也是BerkeleyDB分歧于
一样平常干系数据库的中央。

BerkeleyDB存储体系为使用程序供应了一系列的接口函数,用于对数据库的办理和操纵。个中包含:
(1)数据库的创立、翻开、封闭、删除、重定名等,和对数据的检索和增编削操纵;
(2)供应一些附加的功效,比方读取数据库形态信息、读取地点文件的信息、读取地点数据库情况的信息、
清空数据库的内容、数据库的同步备份、版本晋级、提醒堕落信息等等;
(3)体系还供应了游标机制,用于存取和会见成组的数据,和对两个或多个相干数据库举行联系关系和等值毗连操纵;
(4)体系还给出了一些接口函数用于对存取战略举行优化设置,好比使用程序能够本人设置B树的排序对照函数、
每页中寄存key的起码数量,哈希桶的添补因子、哈希函数、哈希表最年夜长度,行列的最年夜长度,数据库寄存的字节按次,
底层存储页的巨细,内存分派函数,高速缓存的巨细,定长纪录的巨细和添补位,变长纪录所用的分开符等等。

两个到底是哪一个给出了MySQL这个名字至今依然是个迷,包括开发者在内也不知道。
乐观 该用户已被删除
沙发
发表于 2015-1-24 14:59:41 | 只看该作者
而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
柔情似水 该用户已被删除
板凳
发表于 2015-2-1 17:10:25 | 只看该作者
无法深入到数据库系统层面去了解和探究
灵魂腐蚀 该用户已被删除
地板
发表于 2015-2-7 12:01:57 | 只看该作者
再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。
冷月葬花魂 该用户已被删除
5#
发表于 2015-2-21 20:58:21 | 只看该作者
入门没那么困难,精通没那么容易
变相怪杰 该用户已被删除
6#
发表于 2015-3-6 21:38:48 | 只看该作者
groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。
海妖 该用户已被删除
7#
 楼主| 发表于 2015-3-13 21:48:42 | 只看该作者
可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
老尸 该用户已被删除
8#
发表于 2015-3-20 19:40:44 | 只看该作者
分区表是个亮点!从分区表也能看出微软要做大作强SQLServer的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQLServer2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 23:34

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表