tokenpocket钱包官网下载苹果|bdb

作者: tokenpocket钱包官网下载苹果
2024-03-07 17:17:13

Berkeley DB - 维基百科,自由的百科全书

Berkeley DB - 维基百科,自由的百科全书

跳转到内容

主菜单

主菜单

移至侧栏

隐藏

导航

首页分类索引特色内容新闻动态最近更改随机条目资助维基百科

帮助

帮助维基社群方针与指引互助客栈知识问答字词转换IRC即时聊天联络我们关于维基百科

搜索

搜索

创建账号

登录

个人工具

创建账号 登录

未登录编辑者的页面 了解详情

贡献讨论

目录

移至侧栏

隐藏

序言

1源起

2主要版本

3体系结构

4Berkeley DB與SQLite的整合

5授权方式

6使用Berkeley DB的程式

7參見

8參考資料

9外部連結

开关目录

Berkeley DB

16种语言

العربيةБългарскиDeutschEnglishEspañolفارسیSuomiFrançaisItaliano日本語한국어Norsk bokmålPortuguêsРусскийTürkçeУкраїнська

编辑链接

条目讨论

不转换

不转换简体繁體大陆简体香港繁體澳門繁體大马简体新加坡简体臺灣正體

阅读编辑查看历史

工具

工具

移至侧栏

隐藏

操作

阅读编辑查看历史

常规

链入页面相关更改上传文件特殊页面固定链接页面信息引用本页获取短URL下载二维码维基数据项目

打印/导出

下载为PDF打印页面

维基百科,自由的百科全书

Berkeley DB(BDB)是一个高效的嵌入式数据库和键-值数据库编程库,C语言、C++、Java、Perl、Python、Tcl以及其他很多语言都有其对应的API。Berkeley DB可以保存任意类型的键/值对(Key/Value Pair),而且可以为一个键保存多个数据。Berkeley DB支持让数千的并发线程同时操作数据库,支持最大256TB的数据,广泛用于各种操作系统,其中包括大多数类Unix操作系统、Windows操作系统以及实时操作系统。

源起[编辑]

Berkeley DB的前身是伯克利加州大学為了移除受AT&T限制的程式碼,從BSD 4.3到4.4時所改寫的軟體。1996年,網景公司请求Berkeley DB的作者群改善函式庫,以便在網景公司的LDAP伺服器和網景瀏覽器中使用,Sleepycat Software公司便应运而生(2006年2月,甲骨文公司收購了Sleepycat Software)。

Berkeley DB以Sleepycat Public License發行(該授權條款為OSI及FSF所認可的條款),發行時包括了完整的程式碼、編譯工具、測試套件,并附带了說明文件。由於程式碼以及工具程式品質良好,Berkeley DB常被其他開放原始碼軟體所使用。對於不想使用Sleepycat Public License的開發團體,甲骨文公司也提供了其他付費的授權方式。

Berkeley DB包含有与某些经典Unix数据库编程库兼容的接口,包括dbm、ndbm和hsearch。

主要版本[编辑]

Berkeley DB:支援常見的操作系统,如大多数的类UNIX操作系统、Windows系统以及实时操作系统。对于一些对一些老的UNIX数据库(例如dbm与ndbm und hsearch),Berkeley DB还有对应的兼容接口。

Berkeley DB XML:是一个接口,通过它可以实现对XML数据存贮的支持。访问XML数据时,会使用相应的查询语句,如Xquery与Xpath。

Berkeley DB Java Edition:在Java平台上,Oracle提供一個純Java程式編寫的Berkeley DB,只需要操作系統支援Java虛擬機便可執行。

体系结构[编辑]

Berkeley DB以拥有比Microsoft SQL Server和Oracle數據庫等更简单的体系结构而著称。例如,它不支持网络访问—程序通过进程内的API访问数据库。

Berkeley DB不支持SQL或者其他的数据库查询语言,不支持表结构和数据列。

访问数据库的程序自主决定数据如何储存在记录里,Berkeley DB不对记录里的数据进行任何包装。记录和它的键都可以达到4G字节的长度。

尽管架构很简单,Berkeley DB却支持很多高级的数据库特性,比如ACID 数据库事务处理,细粒度锁,XA接口,热备份以及同步复制。

Berkeley DB與SQLite的整合[编辑]

Berkeley DB 11g R2加入SQLite程式組件並開始支援SQL語言。[1]

授权方式[编辑]

2.0或以上版本的Berkeley DB使用双重授权;而2.0版本以下的则使用BSD特許條款,可自由作商业用途。[2][3]

使用Berkeley DB的程式[编辑]

Berkeley DB是一些轻量级目录访问协议服务器、数据库系统以及其他很多商业和开源应用的底层存储系统。下面是使用了Berkeley DB的知名软件的名单。

Subversion - 一种设计用来代替CVS的版本控制系统。

KDevelop - 一个自由软件,Linux和其他Unix类操作系统下的C/C++集成开发环境。

Sun Grid Engine - 一个开源cluster软件。

Movable Type - California编写的一个基于Six Apart的Blog系统。

Caravel CMS - 一个开源的内容管理系统,原为超过2000家的Mennonite Church组织设计。

OpenLDAP - 一个自由开源的轻量级目录访问协议的实现。

KLibido - 一个自由开源的新闻组阅读器,为二进制格式下载优化。

Citadel - 一个开源的群件平台,全部数据存储,包括信息库,都保存在Berkeley DB内。

Bogofilter - 一个开源spam过滤器,其单词表使用Berkeley DB保存。

參見[编辑]

LevelDB - 由Google所研發的鍵/值對數據庫編程庫

Apache Derby - 由Apache軟件基金會所研發的純Java嵌入式數據庫

參考資料[编辑]

^ Oracle Berkeley DB SQL API vs.SQLite API – Integration, Benefits and Differences (PDF). [2011-08-01]. (原始内容存档 (PDF)于2011-08-12). 

^ Oracle Berkeley DB Licensing Information. [2011-08-01]. (原始内容存档于2011-08-28). 

^ Db 1.85—the Original, BSD license Berkeley DB. [2011-08-01]. (原始内容存档于2011-08-18). 

外部連結[编辑]

(英文) Berkeley DB官方網頁 (页面存档备份,存于互联网档案馆)

查论编数据库管理系统(DBMS)概念

数据库

理論

数据模型

数据库存储结构(英语:Database storage structures)

关系 (数据库)

关系模型

分布式数据库

ACID

原子性(英语:Atomicity (database systems))

一致性

隔離性

持久性

Null值

数据库规范化

數據庫完整性

實體完整性

參照完整性

关系数据库管理系统

主键

外键

代理键

超键

候选键

事务处理

增刪查改

数据库组件

触发器

视图

数据库表

指标

事务日志(英语:Transaction log)

数据库事务

Savepoint

并发控制

乐观锁

悲观锁

数据库索引

存储程序

資料庫分割(英语:Partition (database))

SQL分类

数据查询语言(DQL)

資料定義語言(DDL)

資料操縱語言(DML)

資料控制語言(DCL)

指令

SELECT

INSERT

UPDATE

MERGE

DELETE

JOIN

UNION

CREATE

DROP

Begin work

COMMIT

ROLLBACK

TRUNCATE

ALTER

安全

SQL注入

參數化查詢

实现类型

关系数据库

面向文檔的數據庫

平面文件数据库

Deductive(英语:Deductive database)

維度化資料庫

階層式

图数据库

NoSQL

NewSQL

对象数据库

物件關聯式資料庫(英语:Object-relational database)

Temporal

XML資料庫(英语:XML database)

数据库产品

对象型

对比

关系型

对比

数据库组件

数据查询语言

查詢最佳化器(英语:Query optimizer)

查詢計畫(英语:Query plan)

嵌入式SQL

ORM

LINQ

数据访问层

ODBC

OLE DB

ADO

ADO.NET

JDBC

PDO

取自“https://zh.wikipedia.org/w/index.php?title=Berkeley_DB&oldid=79602001”

分类:​数据库引擎嵌入式資料庫鍵值對資料庫開源資料庫管理系統跨平台軟體

本页面最后修订于2023年11月2日 (星期四) 10:30。

本站的全部文字在知识共享 署名-相同方式共享 4.0协议之条款下提供,附加条款亦可能应用。(请参阅使用条款)

Wikipedia®和维基百科标志是维基媒体基金会的注册商标;维基™是维基媒体基金会的商标。

维基媒体基金会是按美国国內稅收法501(c)(3)登记的非营利慈善机构。

隐私政策

关于维基百科

免责声明

行为准则

开发者

统计

Cookie声明

手机版视图

开关有限宽度模式

北京市规划报建电子审批总平面图BDB文件格式怎么转换? - 知乎

北京市规划报建电子审批总平面图BDB文件格式怎么转换? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册项目报建城乡规划管理规划管理体系规划报建北京市规划报建电子审批总平面图BDB文件格式怎么转换?北京市规划报建电子审批总平面图BDB文件格式怎么转换?北京规委的电子报建多规合一 六图一书 电子平台 申报 BDB显示全部 ​关注者5被浏览8,108关注问题​写回答​邀请回答​好问题​添加评论​分享​2 个回答默认排序颜yu​ 关注需要用专门的电子图件报审软件,录入总图信息和指标后,可以导出BDB和PDF文件,后续报多规会商要以这版PDF文件为准发布于 2023-07-28 13:57​赞同​​添加评论​分享​收藏​喜欢收起​地产京学堂​ 关注北京市规划报建BDB电子图件报审教程目录:一、报建依据二、安装与启动三、功能介绍四、常见问题五、完整视频教程正文:一、报建依据1.1报建依据1.2工具作用设计单位使用工具辅助设计,完成图纸图元的属性定义,录入规划条件等基本的图纸规整,同时提供自检功能,并导出总平面图BDB文件和同名的PDF文件,为规划审查部门和审批部门提供统一的图形规范标准和指标审核标准体系,形成一套通用的属性指标体系和数据标准,进行快速审查。二、安装与启动2.1运行环境2.2安装启动如何获取:联系小编获取安装包如何安装:双击“电子图件报审模块(报建版).exe”文件,开始自动安装。如何卸载: 三、功能介绍3.1绘图基本要求3.2功能概况发布于 2023-08-13 23:41​赞同​​1 条评论​分享​收藏​喜欢收起​​

bdb入门第一步-CSDN博客

>

bdb入门第一步-CSDN博客

bdb入门第一步

最新推荐文章于 2024-03-06 11:38:24 发布

技术为王Y

最新推荐文章于 2024-03-06 11:38:24 发布

阅读量2.8k

收藏

点赞数

分类专栏:

数据库开发

文章标签:

bdb

c语言

数据库

数据库开发

专栏收录该内容

2 篇文章

0 订阅

订阅专栏

NoSQL

是现在互联网Web2.0时代备受关注的技术之一,被用来存储大量的非关系型的数据。Berkeley DB作为一款优秀的Key/Value存储引擎自然也在讨论之列。最近使用BDB来发一个KV系统,并将这段时间的BDB的学习和使用经验记录如下。(项目中使用了BDB的4.8.30版本,本文所有涉及的具体问题都基于该版本)。

 

1. Berkeley DB的简介

Berkeley DB(BDB)是一个高性能的嵌入式数据库编程库(引擎),它可以用来保存任意类型的键/值对 (Key/Value Pair),而且可以为一个键保存多个数据。Berkeley DB可以支持数千的并发线程同时操作数据库,支持最大256TB的数据。

BDB提供诸如C语言,C++,Java,Perl,Python,Tcl等多种编程语言的API,并且广泛支持大多数类Unix操作系统和Windows操作系统以及实时操作系统(如 VxWorks)。

1991年,Berkeley DB的第一个版发行(Linux系统也在这一年诞生),其最初的开发目的是以新的HASH访问算法来代替旧的hsearch函数和大量的dbm实现,该版本还包含了B+树数据访问算法。

1992年,BSD UNIX第4.4发行版中包含了Berkeley DB1.85版。基本上认为这是Berkeley DB的第一个正式版。

1996年,Sleepycat软件公司成立,提供对Berkeley DB的商业支持。

2006年,Sleepycat被Oracle收购,当时最新版本是4.7.25。

 

2. 直观了解Berkeley DB软件包

Berkeley DB是一款开源软件,我们可以从Oracle的官方网站得到其源代码包。其源代码目录是由一系列子目录组成,从BDB的实现角度按照功能层次可将它们简单归类,划分如下:

a. DB核心模块(db);

b. 各子系统模块(存储管理子系统:btree/hash/qam;内存池管理子系统:mp;事务子系统:txn;锁子系统:mutex;日志子系统:log);

c. 操作系统抽象层(os_brew/os_s60/os_windows等);

d. Build目录(build_brew/build_s60/build_windows等);

e. 工具程序(db_archive/db_checkpoint等);

f. 语言API支持;

g. 例子(examples_c/examples_csharp等);

h. 其它;

 

通过源代码编译安装BDB很简单,代码如下:

    cd ./db-4.8.30/build_unix

    ../disk/configure --prefix=

    make && make install

 

安装目标目录(/usr/local/BerkeleyDB.4.8)包含四个子目录:

A. bin  一些实用工具

B. docs  文档

C. include 包含了使用BDB库开发程序时的头文件

D. lib  包含了使用BDB库开发程序时需要连接的库文件

 

3. 如何获得BDB的相关知识

BDB提供里非常详细的文档,可以官方网站获得html或pdf版本的文档。这里对pdf版本的一些文档简介如下:

BDB_Installation.pdf: BDB的安装文档,涵盖了不同操作系统,不同的编译工具,不同编程语言等多方面的详细信息;

BDB_Prog_Reference.pdf: 该文档是使用BDB的开发人员的参考手册,主要从BDB的各种功能和机制的原理进行阐述,供使用BDB作为存储引擎来编写程序的各类程序员(C、Java、C#、Perl)阅读;

BDB-Porting-Guide.pdf: 该文档是给需要将BDB移植到一个新的平台开发人员准备的;

InMemoryDBApplication.pdf: 基于内存的BDB应用的相关知识;

BDB-C_APIReference.pdf: C API参考手册,跟BDB_Prog_Reference.pdf结合使用;

BerkeleyDB-Core-C-GSG.pdf: 为C语言开发人员提供的BDB的入门手册;

BerkeleyDB-Core-C-Txn.pdf: 为C语言开发人员提供的BDB事务方面的手册;

Replication-C-GSG.pdf: 为C语言开发人员提供的BDB复制方面的手册;

 

4. 以上对源码目录的分类是从实现角度按照层次进行划分的,如果从BDB的功能模块,或者说是从系统结构角度进行划分,可将其分为几个子系统:

    存储管理子系统 (Storage Subsystem)

    内存池管理子系统 (Memory Pool Subsystem)

    事务子系统 (Transaction Subsystem)

    锁子系统 (Locking Subsystem)

日志子系统 (Logging Subsystem)

 

5. 以上的五个子系统完成了BDB作为一个Database所需要的大部分功能,如何驾驭以上子系统来完成我们需要的任务是关键。像MySQL这种独立的RDBMS,我们可以通过配置和SQL语句来控制和使用它的各种功能。由于BDB是一个嵌入式的数据库,最终还是需要程序员通过调用API来完成。所以要使用好BDB,需要先了解其原理,然后在合适的位置上调用合适的API。

 

写一个BDB程序的一般步骤:

a. 创建、设置和打开Environment;b. 创建、设置和打开Database;c. 访问Database;d.关闭Database;e. 关闭Environment。

此处的Database是从属于Environment,即db是在env这个环境上面建立起来的。为了便于快速把握重点,可以用BDB跟一般的RDBMS做个类比,这里的Database相当于数据表,Environment相当于数据库。

        DB_ENV *dbenv;

        DB *dbp;

        int ret;

        if ((ret = db_env_create(&dbenv, 0)) != 0) {

                fprintf(errfp, "%s: %s\n", progname, db_strerror(ret));

                return (1);

        }

        dbenv->set_errfile(dbenv, errfp);

        dbenv->set_errpfx(dbenv, progname);

        if ((ret = dbenv->set_cachesize(dbenv, 0, 64 * 1024, 0)) != 0) {

                dbenv->err(dbenv, ret, "set_cachesize");

                dbenv->close(dbenv, 0);

                return (1);

        }

        (void)dbenv->set_data_dir(dbenv, data_dir);

        if ((ret = dbenv->open(dbenv, home, DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL | DB_INIT_TXN, 0644)) != 0) {

                dbenv->err(dbenv, ret, "environment open: %s", home);

                dbenv->close(dbenv, 0);

                return (1);

        }

        if ((ret = db_create(&dbp, dbenv, 0)) != 0){

                fprintf(errfp, "%s: %s\n", progname, db_strerror(ret));

                return (1);

        }

        if ((ret = dbp->open(dbp, NULL, "exenv_db1.db", NULL, DB_BTREE, DB_CREATE,0644)) != 0){

                fprintf(stderr, "database open: %s\n", db_strerror(ret));

                return (1);

        }

        if ((ret = dbp->close(dbp, 0)) != 0) {

                fprintf(stderr, "database close: %s\n", db_strerror(ret));

                return (1);

        }

        if ((ret = dbenv->close(dbenv, 0)) != 0) {

                fprintf(stderr, "DB_ENV->close: %s\n", db_strerror(ret));

                return (1);

        }

        return (0);

 

数据文件:

一个BDB的实例会产生数据存储文件,数据文件的目录由dbenv->set_data_dir(dbenv, data_dir);这条语句来指定。涉及的文件类型有:Data Files,Log Files,Region Files,Temporary Files。

Data Files:数据文件,存储实际的数据;

Log Files:日志文件;

Region Files:是各个子系统保存信息的文件,如果在Env中设置了DB_PRIVATE选项,这些信息是被一个进程私有,即它们保存在内存中,这些文件在此种情况下不产生;

Temporary Files: 临时文件,特使情况会被创建;

 

数据的存数格式:

Berkeley DB提供了以下四种文件存储方法:哈希文件、B树、定长记录(队列)和变长记录(基于记录号的简单存储方式),应用程序可以从中选择最适合的文件组织结构。以上代码通过db->open函数中设置了DB_BTREE这个选项指定其使用B树方式存储。其它的三种存储格式对应的类型为:DB_HASH,DB_QUEUE,DB_RECNO。

 

事务提交:

BDB中的事务提交有两种方式:DB_AUTO_COMMIT和显式提交事务。如果设置为DB_AUTO_COMMIT,则每步操作多作为单独的事务自动提交;如果需要显示提交,则需要显示调用具体事务相关的begin/end API(相见文档BerkeleyDB-Core-C-Txn.pdf)。

BDB在事务提交时也是遵循先写日志并刷新到磁盘的方式,但是为了提高性能,其又引入了两个选项:DB_TXN_NOSYNC和DB_TXN_WRITE_NOSYNC。DB_TXN_NOSYNC的作用是使BDB在事务提交的时候不严格要求日志到磁盘,刷新与否取决于日志缓冲;DB_TXN_WRITE_NOSYNC会比DB_TXN_NOSYNC稍显严格,其含义是要求事务提交刷新日志,但只是刷到操作系统文件缓存当中。

BDB的事务隔离性级别有三个:READ UNCOMMITED、READ COMMITED、SERIALIZABLE

 

CheckPoint:

执行一个检查点会完成的工作有:Flushes all dirty pages from the in-memory cache to database files;Writes a checkpoint record;Flushes the log to log files;Writes a list of open databases.

调用API DB_ENV->txn_checkpoint(); 即可完成,如果是非DB_PRIVATE的Env,也可以使用BDB自带的工具db_checkpoint。为了避免出现一个检查点提交大量数据的情况,BDB还提供了轻量级刷新脏页的API:DB_ENV->memp_trickle();

 

Replication:

    BDB中提供了两种方式来支持复制技术:Replication Base API和Replication Manager。可以说Replication Base API是最基础的API,实现方式灵活,功能强大,但是编码量大;Replication Manager相当于框架,使用方式简单,编码量小。Replication Manager可能能够满足大部分用户的需求,但不是所有需求,所以灵活性不足。如果您的需要是Replication Manager不能满足的,请使用Replication Base API自己实现复制策略。Replication Manager的主从策略有两种:指定主从、自动推举主从。

 

分区:

BDB的分区机制是从db-4.8.x之后刚引入的新功能,涉及到的API有两个:

DB->set_partition() 设置分区方式,包含了一个分区方式的回调函数,用户可以通过编写代码来自己实现分区方式,非常灵活。(详见API手册BDB-C_APIReference.pdf)

DB->set_partition_dirs() 设置分区目录。(详见API手册BDB-C_APIReference.pdf)

 

备份:

BDB有三种备份方式:

Offline Backups:离线备份,停服务拷贝数据目录;

Hot Backups:使用API或者BDB自带工具db_backup在DB在使用情况做备份;

Incremental Backups:增量备份;

具体细节详见BerkeleyDB-Core-C-Txn.pdf。

 

6. 以下是可能获取到Berkeley DB资源的链接:

官方主页:

  http://www.oracle.com/database/berkeley-db/db/index.html

产品下载:

  http://www.oracle.com/technology/software/products/berkeley-db/index.html

官方开发者文档中心:

  http://www.oracle.com/technology/documentation/berkeley-db/db/index.html

优惠劵

技术为王Y

关注

关注

0

点赞

0

收藏

觉得还不错?

一键收藏

知道了

0

评论

bdb入门第一步

NoSQL是现在互联网Web2.0时代备受关注的技术之一,被用来存储大量的非关系型的数据。Berkeley DB作为一款优秀的Key/Value存储引擎自然也在讨论之列。最近使用BDB来发一个KV系统,并将这段时间的BDB的学习和使用经验记录如下。(项目中使用了BDB的4.8.30版本,本文所有涉及的具体问题都基于该版本)。 1. Berkeley DB的简介Berke

复制链接

扫一扫

专栏目录

SVN repository BDB转FSFS

02-23

SVN客户端升级以后打开原来版本库报错Failed to load module for FS type 'bdb',使用该资源下载后解压将原版本库文件夹更名为bdb放到dbd2fsfs.bat同一目录,双击dbd2fsfs.bat,生成fsfs文件夹。用新SVN客户端就可以浏览fsfs文件夹了。

bdb练习

03-16

NULL

博文链接:https://malixxx.iteye.com/blog/452676

参与评论

您还未登录,请先

登录

后发表或查看评论

BDB in kernel

03-06

Berkeley DB in kernel for linux-3.13

bdb性能测试

02-09

bdb性能测试(包括查询、插入、删除)批量和单条的比较

深入了解mysql它BDB系列(1)---BDB基础知识

weixin_33975951的博客

06-09

164

    深入了解mysql它BDB系列(1)

---BDB关基础知识

作者:杨万富

 

一:BDB体系结构

1.1.BDB体系结构

BDB总体的体系结构如图1.1所看到的,包括五个子系统(见图1.1中相关数)。1)数据存取子系统,2)事务子系统,3)锁子系统。4)内存池管理子系统。5)日志子系统。

在一个应用程序中。并不一定须要全然具备这5大子系统。

假设程序仅仅使用了数据存取...

Berkeley DB数据库最新版

07-19

Berkeley DB6.0.20 Berkeley DB BDB Berkeley DB数据库

mysql bdb_深入理解mysql之BDB系列(1)---BDB相关基础知识(摘自老杨)

weixin_39746869的博客

02-01

2158

一:BDB体系结构1.1.BDB体系结构BDB整体的体系结构如图1.1所示,包含五个子系统(见图1.1中相关数)。1)数据存取子系统,2)事务子系统,3)锁子系统,4)内存池管理子系统,5)日志子系统。在一个应用程序中,并不一定需要完全具备这5大子系统。如果程序只使用了数据存取子系统,它的体系结构如图1.2。在图1.2中,我们只使了两个子系统:数据存取以及内存池子系统。(备注:另外三个子系统在BD...

mysql bdb_深入了解mysql它BDB系列(1)---BDB基础知识

weixin_42495394的博客

01-19

586

深入了解mysql它BDB系列(1)---BDB关基础知识作者:杨万富一:BDB体系结构1.1.BDB体系结构BDB总体的体系结构如图1.1所看到的,包括五个子系统(见图1.1中相关数)。1)数据存取子系统,2)事务子系统,3)锁子系统。4)内存池管理子系统。5)日志子系统。在一个应用程序中。并不一定须要全然具备这5大子系统。假设程序仅仅使用了数据存取子系统,它的体系结构如图1.2。在图1.2中,...

关于 Berkeley DB 的WIKI

perddy的专栏

01-25

1055

 来自ITwiki,开放的信息技术大百科Jump to: navigation, Berkeley DB (DB)是一个高性能的,嵌入数据库编程库,和C语言,C++,Java,Perl,Python,PHP,Tcl以及其他很多语言都有绑定。Berkeley DB可以保存任意类型的键/值对,而且可以为一个键保存多个数据。Berkeley DB可

BerkerleyDb-18.1.40.tar.gz

06-19

BerkerleyDb18.1.40的linux/mac的安装包,使用scrapy-deltafetch插件的必须要安装的依赖

bdb 数据库linux

06-08

Berkeley DB is a family of embedded key-value database libraries providing scalable high-performance data management services to applications. The Berkeley DB products use simple function-call APIs for data access and management.

Linux 系统下安装 Berkeley DB

ivHornet的专栏

12-11

989

Berkeley DB是历史悠久的嵌入式数据库系统,主要应用在UNIX/LINUX操作系统上,其设计思想是简单、小巧、可靠、高性能。

现由Sleepycat公司维护,提供对DB的商业之支持。(Sleepycat被Oracle收购)

DB支持几乎所有的现代操作系统,如LINUX、UNIX、WINDOWS等,也提供了丰富的应用程序接口,支持C、C++、JAVA、PERL、TCL、P

时钟域交叉设计——Clock Domain Crossing Design

qq_46264636的博客

03-06

717

任何关于时钟域交叉(CDC)的讨论,都应从对可变性和同步性的基本了解开始。通俗地说,可变性是指一种不稳定的中间状态,在这种状态下,最轻微的干扰也会导致稳定状态的恢复。当应用于数字电路中的触发器时,它指的是触发器的输出可能尚未稳定到最终预期值的状态。触发器进入可变状态的方式之一是其设置或保持时间受到破坏。在异步时钟域交叉(CDC)中,源时钟和目的时钟没有频率关系,来自源域的信号在其驱动的目的触发器的设置或保持时间内发生变化的概率为非零。

Docker-部署若依项目

最新发布

2302_76705099的博客

03-06

428

1.构建Dockerfile镜像 1 )切换到家目录 cd ~ #新建文件夹 mkdir ruoyi-admin #切进去 cd ruoyi-admin 2 )上传ruoyi-admin.jar到Dockerfile_ruoyi-admin文件所在目录#重命名 mv Dockerfile_ruoyi-admin Dockerfile 4 )ruoyi-admin为镜像名称,开始制作镜像 docker build -t ruoyi-admin .查看自己做的镜像#运行容器docker ps。

春招!启动了

欢迎关注【微信公众号】测试开发Guide,从功能测试进阶测试开发

03-03

593

大家好,我是洋子。今年的春招很多企业已经开始招聘了,像美团今年继续发力,24届春招以及25届暑期转正实习一共招聘4000人。另外,阿里,京东,顺丰等公司也已经开始春招,可以说招聘的号角已经正式吹响了春招基本是24届上岸的最后机会,不要等着毕业以后再去找工作,那样会更加困难,一定把握好校招的机会,实话说,春招肯定是比秋招更卷的,春招一般是补录性质,另外多了一批考研未上岸的同学来竞争名额有些双非的同学,投递后端、前端开发岗位石沉大海,

3.3日学习打卡----初学Redis(一)

m0_74436895的博客

03-03

973

,意即“不仅仅是SQL”,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在应付特别是超大规模和高并发类型纯动态网站已经显得力不从心,暴露了很多难以克服的问题。结构化数据和非结构化数据结构化数据指的是由二维表结构来逻辑表达和实现的数据,严格遵循数据格式与长度规范,也称作为行数据。非结构化数据,指的是数据结构不规则或不完整,没有任何预定义的数据模型,不方便用二维逻辑表来表现的数据,例如办公文档(Word)、文本、图片、HTML、各类报表、视频音频等。

数据库原理(一)

2303_77275067的博客

03-02

936

长期储存在计算机内、有组织的可共享的大量数据集合是对现实世界数据特征的抽象,用来描述数据、组织数据和对数据进行操作。举个例子:计算机不能直接处理现实世界中的具体事物,所以人们必须把具体事物转化成计算机能够处理的数据,也就是首先要数字化,把现实世界中具体的人、物、活动等用数据模型这个工具来抽象、表示和处理。通俗来讲,数据模型就是现实世界的模拟。数据模型是数据库系统的核心和基础外模式(External Schema):某一用户能够看到和处理的数据的结构描述。

php 截取字符串004532bb-9852-48c2-bffd-f928eb97bdb1-迅捷文字转语音-1685676314013.txt 倒数第二个 "-" 之前的内容

06-03

可以使用 PHP 的字符串函数 `strrpos()` 和 `substr()` 来截取。代码如下:

```php

$str = '004532bb-9852-48c2-bffd-f928eb97bdb1-迅捷文字转语音-1685676314013.txt';

$pos = strrpos($str, '-'); // 获取倒数第二个 "-" 的位置

$result = substr($str, 0, $pos); // 截取倒数第二个 "-" 之前的内容

echo $result; // 输出结果为 "004532bb-9852-48c2-bffd-f928eb97bdb1-迅捷文字转语音"

```

希望能够帮到您!

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

技术为王Y

CSDN认证博客专家

CSDN认证企业博客

码龄11年

暂无认证

3

原创

128万+

周排名

202万+

总排名

1万+

访问

等级

210

积分

7

粉丝

1

获赞

1

评论

2

收藏

私信

关注

热门文章

bdb入门第一步

2808

linux 通信

984

Berkeley db使用方法简介(c接口)

958

select模型讲解

881

BMP图像格式学习

797

分类专栏

网络编程

6篇

流媒体

3篇

图像处理

1篇

数据库开发

2篇

多线程多进程

2篇

linux系统

3篇

最新评论

实现RTP协议的H.264视频传输系统

华少ss:

谢谢分享

最新文章

实现RTP协议的H.264视频传输系统

flv格式详解

rtp

2013年17篇

目录

目录

分类专栏

网络编程

6篇

流媒体

3篇

图像处理

1篇

数据库开发

2篇

多线程多进程

2篇

linux系统

3篇

目录

评论

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

bdb --- 调试器框架 — Python 3.13.0a4 文档

bdb --- 调试器框架 — Python 3.13.0a4 文档

Theme

Auto

Light

Dark

上一主题

审计事件表

下一主题

faulthandler —— 转储 Python 的跟踪信息

当前页面

报告 Bug

显示源码

导航

索引

模块 |

下一页 |

上一页 |

Python »

3.13.0a4 Documentation »

Python 标准库 »

调试和分析 »

bdb --- 调试器框架

|

Theme

Auto

Light

Dark

|

bdb --- 调试器框架¶

源代码: Lib/bdb.py

bdb 模块处理基本的调试器函数,例如设置中断点或通过调试器来管理执行。

定义了以下异常:

exception bdb.BdbQuit¶

由 Bdb 类引发用于退出调试器的异常。

bdb 模块还定义了两个类:

class bdb.Breakpoint(self, file, line, temporary=False, cond=None, funcname=None)¶

这个类实现了临时性中断点、忽略计数、禁用与(重新)启用,以及条件设置等。

中断点通过一个名为 bpbynumber 的列表基于数字并通过 bplist 基于 (file, line) 对进行索引。 前者指向一个 Breakpoint 类的单独实例。 后者指向一个由这种实例组成的列表,因为在每一行中可能存在多个中断点。

当创建一个中断点时,它所关联的 文件名 应当为规范形式。 如果定义了 funcname,则当该函数的第一行被执行时将增加一次中断点 命中 次数。 有条件的 中断点将总是会计入 命中 次数。

Breakpoint 的实例具有下列方法:

deleteMe()¶

从关联到文件/行的列表中删除此中断点。 如果它是该位置上的最后一个中断点,还将删除相应的文件/行条目。

enable()¶

将此中断点标记为启用。

disable()¶

将此中断点标记为禁用。

bpformat()¶

返回一个带有关于此中断点的所有信息的,格式良好的字符串:

中断点编号 。

临时状态(删除或保留)。

文件/行位置。

中断条件

要忽略的次数。

命中的次数。

在 3.2 版本加入.

bpprint(out=None)¶

将 bpformat() 的输出打印到文件 out,或者如果为 None 则打印到标准输出。, to standard output.

Breakpoint 实例具有以下属性:

file¶

Breakpoint 的文件名。

line¶

Breakpoint 在 file 中的行号。

temporary¶

如果 (file, line) 上的 Breakpoint 是临时性的则返回 True。

cond¶

在 (file, line) 上对 Breakpoint 求值的条件。

funcname¶

用于定义在进入函数时一个 Breakpoint 是否命中的函数的名称。

enabled¶

如果 Breakpoint 被启用则为 True。

bpbynumber¶

一个 Breakpoint 单独实例的数字索引。

bplist¶

以 (file, line) 元组作为索引的 Breakpoint 实例的字典。

ignore¶

忽略一个 Breakpoint 的次数。

hits¶

命中一个 Breakpoint 的次数统计。

class bdb.Bdb(skip=None)¶

Bdb 类是作为通用的 Python 调试器基类。

这个类负责追踪工具的细节;所派生的类应当实现用户交互。 标准调试器类 (pdb.Pdb) 就是一个例子。

如果给出了 skip 参数,它必须是一个包含 glob 风格的模块名称模式的可迭代对象。 调试器将不会步进到来自与这些模式相匹配的模块的帧。 一个帧是否会被视为来自特定的模块是由帧的 __name__ 全局变量来确定的。

在 3.1 版本发生变更: 增加了 skip 形参。

Bdb 的以下方法通常不需要被重写。

canonic(filename)¶

返回 filename 的规范形式。

对于真实的文件名称,此规范形式是一个依赖于具体操作系统的,大小写规范的 绝对路径。 在交互模式下生成的带有尖括号的 filename,如 "",会被不加修改地返回。

reset()¶

将 botframe, stopframe, returnframe 和 quitting 属性设为准备开始调试的值。

trace_dispatch(frame, event, arg)¶

此函数被安装为被调试帧的追踪函数。 它的返回值是新的追踪函数(在大多数情况下就是它自身)。

默认实现会决定如何分派帧,这取决于即将被执行的事件的类型(作为字符串传入)。 event 可以是下列值之一:

"line": 一个新的代码行即将被执行。

"call": 一个函数即将被调用,或者进入了另一个代码块。

"return": 一个函数或其他代码块即将返回。

"exception": 一个异常已发生。

"c_call": 一个 C 函数即将被调用。

"c_return": 一个 C 函数已返回。

"c_exception": 一个 C 函数引发了异常。

对于 Python 事件,调用了专门的函数(见下文)。 对于 C 事件,不执行任何操作。

arg 形参取决于之前的事件。

请参阅 sys.settrace() 的文档了解追踪函数的更多信息。 对于代码和帧对象的详情,请参考 标准类型层级结构。

dispatch_line(frame)¶

如果调试器应该在当前行上停止,则发起调用 user_line() 方法(该方法应当在子类中被重写)。 如果设置了 quitting 旗标(可通过 user_line() 来设置)则将引发 BdbQuit 异常。 返回一个对 trace_dispatch() 方法的引用以便在该作用域内进一步地追踪。

dispatch_call(frame, arg)¶

如果调试器应该在此函数调用上停止,则发起调用 user_call() 方法(该方法应当在子类中被重写)。 如果设置了 quitting 旗标(可通过 user_call() 来设置)则将引发 BdbQuit 异常。 返回一个对 trace_dispatch() 方法的引用以便在该作用域内进一步地追踪。

dispatch_return(frame, arg)¶

如果调试器应当在此函数调用上停止,则发起调用 user_return() 方法(该方法应当在子类中被重写)。 如果设置了 quitting 旗标(可通过 user_return() 来设置)则将引发 BdbQuit 异常。 返回一个对 trace_dispatch() 方法的引用以便在该作用域内进一步地追踪。

dispatch_exception(frame, arg)¶

如果调试器应当在此异常上停止,则发起调用 user_exception() 方法(该方法应当在子类中被重写)。 如果设置了 quitting 旗标(可通过 user_exception() 设置)则将引发 BdbQuit 异常。 返回一个对 trace_dispatch() 方法的引用以便在该作用域内进一步地追踪。

通常情况下派生的类不会重写下列方法,但是如果想要重新定义停止和中断点的定义则可能会重写它们。

is_skipped_line(module_name)¶

如果 module_name 匹配到任何跳过模式则返回 True。

stop_here(frame)¶

如果 frame 在栈的起始帧之下则返回 True。

break_here(frame)¶

如果该行有生效的中断点则返回 True。

检测某行或某函数是否存在中断点且处于生效状态。 基于来自 effective() 的信息删除临时中断点。

break_anywhere(frame)¶

如果存在任何针对 frame 的文件名的中断点则返回 True。

派生的类应当重写这些方法以获取调试器操作的控制权。

user_call(frame, argument_list)¶

如果中断可能在被调用的函数内停止则会从 dispatch_call() 来调用。

user_line(frame)¶

当 stop_here() 或 break_here() 返回 True 时则会从 dispatch_line() 来调用。

user_return(frame, return_value)¶

当 stop_here() 返回 True 时则会从 dispatch_return() 来调用。

user_exception(frame, exc_info)¶

当 stop_here() 返回 True 时则会从 dispatch_exception() 来调用。

do_clear(arg)¶

处理当一个中断点属于临时性中断点时是否必须要移除它。

此方法必须由派生类来实现。

派生类与客户端可以调用以下方法来影响步进状态。

set_step()¶

在一行代码之后停止。

set_next(frame)¶

在给定的帧以内或以下的下一行停止。

set_return(frame)¶

当从给定的帧返回时停止。

set_until(frame, lineno=None)¶

在 lineno 行大于当前所到达的行或者在从当前帧返回时停止。

set_trace([frame])¶

从 frame 开始调试。 如果未指定 frame,则从调用者的帧开始调试。

set_continue()¶

仅在中断点上或是当结束时停止。 如果不存在中断点,则将系统追踪函数设为 None。

set_quit()¶

将 quitting 属性设为 True。 这将在对某个 dispatch_*() 方法的下一次调用中引发 BdbQuit。

派生的类和客户端可以调用下列方法来操纵中断点。 如果出现错误则这些方法将返回一个包含错误消息的字符串,或者如果一切正常则返回 None。

set_break(filename, lineno, temporary=False, cond=None, funcname=None)¶

设置一个新的中断点。 如果对于作为参数传入的 filename 不存在 lineno,则返回一条错误消息。 filename 应为规范的形式,如在 canonic() 方法中描述的。

clear_break(filename, lineno)¶

删除位于 filename 和 lineno 的中断点。 如果未设置过中断点,则返回一条错误消息。

clear_bpbynumber(arg)¶

删除 Breakpoint.bpbynumber 中索引号为 arg 的中断点。 如果 arg 不是数字或超出范围,则返回一条错误消息。

clear_all_file_breaks(filename)¶

删除位于 filename 的所有中断点。 如果未设置过中断点,则返回一条错误消息。

clear_all_breaks()¶

删除所有现存的中断点。 如果未设置过中断点,则返回一条错误消息。

get_bpbynumber(arg)¶

返回由指定数字所指明的中断点。 如果 arg 是一个字符串,它将被转换为一个数字。 如果 arg 不是一个表示数字的字符串,如果给定的中断点不存在或者已被删除,则会引发 ValueError。

在 3.2 版本加入.

get_break(filename, lineno)¶

如果 filename 中的 lineno 上有中断点则返回 True。

get_breaks(filename, lineno)¶

返回 filename 中在 lineno 上的所有中断点,或者如果未设置任何中断点则返回一个空列表。

get_file_breaks(filename)¶

返回 filename 中的所有中断点,或者如果未设置任何中断点则返回一个空列表。

get_all_breaks()¶

返回已设置的所有中断点。

派生类与客户端可以调用以下方法来获取一个代表栈回溯信息的数组结构。

get_stack(f, t)¶

返回一个栈回溯中 (frame, lineno) 元组的列表,及一个大小值。

最近调用的帧将排在列表的末尾。 大小值即调试器被发起调用所在帧之下的帧数量。

format_stack_entry(frame_lineno, lprefix=': ')¶

返回一个字符串,其内容为有关以 (frame, lineno) 元组表示的特定栈条目的信息。 返回的字符串包含:

包含该帧的规范文件名。

函数名称或 ""。

输入参数。

返回值。

代码的行(如果存在)。

以下两个方法可由客户端调用以使用一个调试器来调试一条以字符串形式给出的 statement。

run(cmd, globals=None, locals=None)¶

调试一条通过 exec() 函数执行的语句。 globals 默认为 __main__.__dict__,locals 默认为 globals。

runeval(expr, globals=None, locals=None)¶

调试一条通过 eval() 函数执行的表达式。 globals 和 locals 的含义与在 run() 中的相同。

runctx(cmd, globals, locals)¶

为了保证向下兼容性。 调用 run() 方法。

runcall(func, /, *args, **kwds)¶

调试一个单独的函数调用,并返回其结果。

最后,这个模块定义了以下函数:

bdb.checkfuncname(b, frame)¶

如果要在此中断则返回 True,具体取决于 Breakpoint b 的设置方式。

如果是通过行号设置的,它将检查 b.line 是否与 frame 中的行一致。 如果中断点是通过 函数名称 设置的,则必须检查是否位于正确的 帧 (正确的函数) 以及是否位于其中第一个可执行的行。

bdb.effective(file, line, frame)¶

返回 (active breakpoint, delete temporary flag) 或 (None, None) 作为目标中断点。

激活的中断点 是 bplist 中对应 (file, line) 的第一个 已启用的 条目 (它必须存在),对应的 checkfuncname() 为 True,并且没有 False cond 或为正值的 ignore 计数。 flag 表示临时中断点应当被删除,它仅在 cond 无法被求值时 (在此情况下,ignore 计数会被忽略) 才会为 False。

如果不存在这样的条目,则返回 (None, None)。

bdb.set_trace()¶

使用一个来自调用方的帧的 Bdb 实例开始调试。

上一主题

审计事件表

下一主题

faulthandler —— 转储 Python 的跟踪信息

当前页面

报告 Bug

显示源码

«

导航

索引

模块 |

下一页 |

上一页 |

Python »

3.13.0a4 Documentation »

Python 标准库 »

调试和分析 »

bdb --- 调试器框架

|

Theme

Auto

Light

Dark

|

© 版权所有 2001-2024, Python Software Foundation.

This page is licensed under the Python Software Foundation License Version 2.

Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.

See History and License for more information.

The Python Software Foundation is a non-profit corporation.

Please donate.

最后更新于 Mar 06, 2024 (23:01 UTC).

Found a bug?

由 Sphinx 7.2.6创建。

Oracle Berkeley DB | Oracle 中国

Oracle Berkeley DB | Oracle 中国

单击查看我们的辅助功能政策

跳到内容

产品

行业

资源

客户

合作伙伴

开发人员

关于公司

关闭搜索

搜索 Oracle.com

快速链接

Oracle Cloud Infrastructure

Oracle Fusion Cloud Applications

Oracle Database

下载 Java

Oracle 职业机会

搜索

Country

查看帐户

返回

云帐户

登录云

注册云免费套餐

Oracle 帐户

登录

创建帐户

帮助

注销

联系销售

菜单

菜单

Database

数据库技术

Database A-Z

Oracle Berkeley DB

Oracle Berkeley DB

Downloads

Oracle Berkeley DB

Berkeley DB is a family of embedded key-value database libraries providing scalable high-performance data management services to applications. The Berkeley DB products use simple function-call APIs for data access and management.

Berkeley DB enables the development of custom data management solutions, without the overhead traditionally associated with such custom projects. Berkeley DB provides a collection of well-proven building-block technologies that can be configured to address any application need from the hand-held device to the data center, from a local storage solution to a world-wide distributed one, from kilobytes to petabytes.

Get the Details

Announcing Berkeley DB, Version 18.1 (June 14, 2018) (PDF)

Data sheet: Berkeley Database Products (PDF)

Guide to the Berkeley DB Example Programs (PDF)

Learn More

Oracle Berkeley DB

Oracle Berkeley DB 12c provides the foundational storage services for your application, no matter how demanding and unique your requirements may seem to be. Using Berkeley DB you can:

Reduce time to market

Reduce development costs

Simplify data storage on mobile devices

Lower the cost of deployment

Eliminate costly re-writes as your system grows

Eliminate costly administrative overhead

Eliminate data loss and corruption

Provide internet-scale, highly-available services

Get the Details

Product Solution Areas

 

Storage Layer

 

SQL

 

Object Persistence

 

High Availability

 

XQuery & XML

Learn More

Sample Applications and Use Cases

High Throughput Message Processing (C)

Priority Message Processing example bundle (.zip)

Firewall example bundle (.zip)

Event Processing (C)

Toll booth example overview (HTML)

Location-based advertising overview (HTML)

Toll booth example bundle (.zip)

Location-based advertising example bundle (.zip)

Inventory Management System (C#)

Overview (.ppt)

IMS Windows installer bundle (.zip)

Parking Lot Fees (Java)

Overview (.ppt)

Parking lot example code bundle (.zip)

Medical Imaging - DICOM (Mobile devices with back-end store)

Overview (.ppt)

DICOM example code bundle (.zip)

Oracle Berkeley DB

Products

Berkeley DB

Written in C

Software Library

Key/value API

SQL API by incorporating SQLite

BTREE, HASH, QUEUE, RECNO storage

C++, Java/JNI, C#, Python, Perl, ...

Java Direct Persistence Layer (DPL) API

Java Collections API

Replication for High Availability

Berkeley DB Java Edition

Written in Java

Java Software Archive (JAR)

Key/value API

Java Direct Persistence Layer (DPL) API

Java Collections API

Replication for High Availability

Berkeley DB XML

Written in C++

Software Library

Layered on Berkeley DB

XQuery API by incorporating XQilla

Indexed, optimized XML storage

C++, Java/JNI, C#, Python, Perl, ...

Replication for High Availability

White Papers

Berkeley DB: Performance Metrics and Benchmarks

(PDF)

Berkeley DB JE High

Availability (PDF)

Berkeley DB Performance for Queries

(PDF)

Managing Consistency with

Berkeley DB-High Availability (PDF)

Unleash High Availability Applications

with Berkeley DB (PDF)

BDB

powers Oracle Unified Directory(PDF)

Berkeley DB on Amazon (.html)

Berkeley DB Java Edition on Android

(PDF)

Berkeley DB Insert Performance Program (C

code)

BDB vs SQLite comparisons

(.zip)

Webcasts and Other Product Tutorials

Presentation At CMU : Oracle Berkeley DB, An Open Source Embedded Key/Value Database System 12/2015

Tutorial: Getting Started with ADO.Net and Berkeley DB

Tutorial: Best Practices in Developing C# Applications with Berkeley DB

Tutorial: Android Development with Berkeley DB

TechCast: Embedded Data Storage with Berkeley DB

TechCast: Oracle Berkeley DB and SQLite, Together at Last

Adaptive Mobile Video: BDB high performance secures mobile devices

Podcast: Berkeley DB helps Berkeley DB helps Adaptive Mobile Secure Your Cell Phone from Cyber Attack

UnboundID PodCast: BDB JE enables cloud-scalable Identity Management

Data Sheets

Berkeley Database Products (PDF)

Berkeley Database (PDF)

Berkeley DB Java Edition (PDF)

Berkeley DB XML (PDF)

Product Resources

Berkeley DB Products Overview

Berkeley DB FAQ

Berkeley DB Java Edition FAQ

Berkeley DB XML FAQ

Videos

Inventory Management System (C#)

Parking Lot Fees (Java)

Eclipse

UNIX/Linux command line

Join in the conversation about Oracle Berkeley DB

 

@berkeleydb

 

Blog

 

Berkeley DB

 

Berkeley DB JE

 

Berkeley DB XML

注:为免疑义,本网页所用以下术语专指以下含义:

Oracle专指Oracle境外公司而非甲骨文中国。

相关Cloud或云术语均指代Oracle境外公司提供的云技术或其解决方案。

按角色查看

招贤纳士

开发人员

投资者

合作伙伴

研究员

学生和教育工作者

为什么选择 Oracle

分析报告

基于云的优秀 ERP

云经济学

企业责任

多元化与包容性

安全实践

学习

什么是云计算?

什么是 CRM?

什么是 Docker?

什么是 Kubernetes?

什么是 Python?

什么是 SaaS?

新闻与活动

新闻

Oracle CloudWorld

Oracle CloudWorld Tour

Oracle Health Summit

Oracle DevLive

活动

软件产品登记证书

完整使用程序使用通知申请流程

联系我们

销售: 400-699-8888

您需要什么帮助?

订阅电子邮件

举报热线

国家/地区

© 2024 Oracle

使用条款和隐私政策

京ICP备10049020号-1

广告选择

招贤纳士

WeChat

甲骨文中国新浪微博

bdb (Debugging & Profiling) - Python 中文开发手册 - 开发者手册 - 腾讯云开发者社区-腾讯云

(Debugging & Profiling) - Python 中文开发手册 - 开发者手册 - 腾讯云开发者社区-腾讯云腾讯云开发者社区文档建议反馈控制台首页学习活动专区工具TVP最新优惠活动文章/答案/技术大牛搜索搜索关闭发布登录/注册搜索Bootstrap 4Bootstrap 3CC++Clojure 1.8Codeigniter 3CSSDocker 17ElectronElixir 1.5Erlang 20EslintExpressGitGoHTMLHTTPImmutable 3.8.1JavaScriptLodash 4Lua 5.3NginxPHPPhpunit 6Python内置常量 | Built-in Constants内置例外 | Built-in Exceptions内置函数 | Built-in Functions内置类型 | Built-in Types编译器 | Compiler加密 | Cryptography数据压缩 | Data Compression数据持久性 | Data Persistence数据类型 | Data Types调试和分析 | Debugging & ProfilingbdbhotshotpdbThe Python Profilerstimeittrace开发工具 | Development Tools文件和目录访问 | File & Directory Access文件格式 | File Formats构架 | Frameworks输入 | Importing输入/输出 | Input/ouput国际化 | Internationalization网络 | Internet网络数据 | Internet Data翻译 | Interpreters语言 | Language记录 | LoggingMac OSMS Windows多媒体 | Multimedia联网 | Networking数字与数学 | Numeric & Mathematical操作系统 | Operating System可选操作系统 | Optional Operating System限制执行 | Restricted Execution运行 | RuntimeSGI IRIX软件包装与分销 | Software Packaging & Distribution字符串 | String结构化标记 | Structured MarkupTkUnixReactReact nativeRedisReduxRuby 2.4SassScikit imageSocket.IOSqliteSVGTensorFlow GuideTypescriptUnderscoreVue 2WebpackXslt & XpathYarnRxJS 5Rollup.jsBabel ParcelMobXKoaAngularGulpGruntStylelintStandard JS Element UIiView UILavasMint UIPostCSS ThinkJSNestnpmNode.js教程JSON教程Groovy教程vb.net教程Storm入门教程Hibernate 教程Slick教程MongoDB教程Yii 2.0Python调试和分析 | Debugging & Profilingbdbbdb源代码: Lib / bdb.py该bdb模块处理基本的调试器功能,如设置断点或通过调试器管理执行。以下例外被定义:exception bdb.BdbQuitBdb班级提出的用于退出调试器的异常。该bdb模块还定义了两个类:class bdb.Breakpoint(self, file, line, temporary=0, cond=None, funcname=None)该类实现临时断点,忽略计数,禁用和(重新)启用以及条件。断点由数通过一个名为列表索引bpbynumber和(file, line)通过对bplist。前者指向一个类的单个实例Breakpoint。后者指向这种情况的列表,因为每行可能有多个断点。创建断点时,其关联的文件名应为规范形式。如果定义了一个funcname,当该函数的第一行被执行时,将会计算一个断点命中。一个条件断点总是计数一个命中。Breakpoint 实例具有以下方法:deleteMe()从与文件/行关联的列表中删除断点。如果它是该位置的最后一个断点,它也会删除文件/行的条目。enable()将断点标记为已启用。disable()将断点标记为禁用。pprint([out])打印所有关于断点的信息:断点编号。如果它是暂时的或不是。它的文件,行位置。导致休息的条件。如果它必须被忽略N次。断点击数。class bdb.Bdb(skip=None)的Bdb类作为一个通用的Python调试基类。该课程负责跟踪设施的细节; 派生类应该实现用户交互。标准调试器类(pdb.Pdb)是一个例子。在跳跃的说法,如果有,一定要全域式的模块名称模式的迭代。调试器不会进入与匹配其中一种模式的模块相关的帧。框架是否被认为起源于某个模块是由__name__框架全局决定的。2.7版本中的新功能:跳过参数。Bdb通常不需要重写以下方法。canonic(filename)用于获取规范形式的文件名的辅助方法,即以规范化(不区分大小写的文件系统)绝对路径为例,删除周围的尖括号。reset()设置botframe,stopframe,returnframe并quitting用准备开始调试属性值。trace_dispatch(frame, event, arg)该功能作为调试帧的跟踪功能进行安装。它的返回值是新的跟踪函数(在大多数情况下,也就是它本身)。默认实现决定如何分派帧,具体取决于即将执行的事件类型(作为字符串传递)。事件可以是以下之一:"line":一行新的代码将被执行。"call":函数即将被调用,或输入另一个代码块。"return":函数或其他代码块即将返回。"exception":发生异常。"c_call":AC功能即将被调用。"c_return":AC功能已返回。"c_exception":AC函数引发了一个异常。对于Python事件,调用专用函数(见下文)。对于C事件,不采取任何行动。该ARG参数取决于前面的事件。有关sys.settrace()跟踪功能的更多信息,请参阅文档。有关代码和框架对象的更多信息,请参阅标准类型层次结构。dispatch_line(frame)如果调试器应停在当前行上,则调用该user_line()方法(应在子类中重写)。BdbQuit如果Bdb.quitting标志已设置(可以从中设置user_line()),引发异常。trace_dispatch()在该范围内返回对进一步跟踪的方法的引用。dispatch_call(frame, arg)如果调试器应停止此函数调用,请调用user_call()方法(应在子类中重写)。BdbQuit如果Bdb.quitting标志已设置(可以从中设置user_call()),引发异常。trace_dispatch()在该范围内返回对进一步跟踪的方法的引用。dispatch_return(frame, arg)如果调试器应停止此函数返回,请调用该user_return()方法(应在子类中重写)。BdbQuit如果Bdb.quitting标志已设置(可以从中设置user_return()),引发异常。trace_dispatch()在该范围内返回对进一步跟踪的方法的引用。dispatch_exception(frame, arg)如果调试器应该停止在这个异常处,调用user_exception()方法(应该在子类中重写)。BdbQuit如果Bdb.quitting标志已设置(可以从中设置user_exception()),引发异常。trace_dispatch()在该范围内返回对进一步跟踪的方法的引用。通常派生类不会覆盖以下方法,但如果他们想重新定义停止点和断点的定义,它们可能会出现。stop_here(frame)该方法检查框架是否botframe在调用堆栈的下方。botframe是开始调试的框架。break_here(frame)此方法检查文件名中是否存在断点以及属于帧的行,或至少在当前函数中是否存在断点。如果断点是临时断点,则此方法将其删除。break_anywhere(frame)此方法检查当前帧的文件名中是否存在断点。派生类应该重写这些方法来获得对调试器操作的控制权。user_call(frame, argument_list)从dispatch_call()被调用函数内部任何地方有可能需要中断时调用此方法。user_line(frame)这种方法从dispatch_line()任何一个stop_here()或break_here()收益时被调用True。user_return(frame, return_value)这个方法dispatch_return()在stop_here()yield 时被调用True。user_exception(frame, exc_info)这个方法dispatch_exception()在stop_here()yield 时被调用True。do_clear(arg)处理临时断点时如何删除断点。该方法必须由派生类实现。派生类和客户端可以调用以下方法来影响步进状态。set_step()在一行代码后停止。set_next(frame)在给定帧中或下方的下一行停止。set_return(frame)从给定帧返回时停止。set_until(frame)当到达当前行的行不超过或从当前帧返回时停止。set_trace([frame])从框架开始调试。如果未指定帧,则调用从调用者的帧开始。set_continue()只在断点或完成时停止。如果没有断点,请将系统跟踪功能设置为None。set_quit()将该quitting属性设置为True。这会BdbQuit在下一次调用其中一种dispatch_*()方法时引发。派生类和客户端可以调用以下方法来操作断点。如果出现问题,或者None一切正常,这些方法将返回一个包含错误消息的字符串。set_break(filename, lineno, temporary=0, cond=None, funcname=None)设置一个新的断点。如果lineno行不存在作为参数传递的文件名,则返回错误消息。的文件名应为规范形式,如在所描述的canonic()方法。clear_break(filename, lineno)删除文件名和lineno中的断点。如果没有设置,则返回错误消息。clear_bpbynumber(arg)删除具有索引断点精氨酸的Breakpoint.bpbynumber。如果arg不是数字或超出范围,则返回错误消息。clear_all_file_breaks(filename)删除文件名中的所有断点。如果没有设置,则返回错误消息。clear_all_breaks()删除所有现有的断点。get_break(filename, lineno)检查是否有一个断点LINENO的文件名。get_breaks(filename, lineno)返回所有断点LINENO的文件名,或一个空列表,如果没有设置。get_file_breaks(filename)返回文件名中的所有断点,如果没有设置,则返回空列表。get_all_breaks()返回设置的所有断点。派生类和客户端可以调用以下方法来获取表示堆栈跟踪的数据结构。get_stack(f, t)获取一个帧的记录列表,以及所有更高(呼叫)和更低帧的记录以及更高部分的大小。format_stack_entry(frame_lineno[, lprefix=': '])返回一个字符串,其中包含由(frame, lineno)元组标识的关于堆栈条目的信息:包含该帧的文件名的规范形式。函数名称或""。输入参数。返回值。代码行(如果存在)。客户端可以调用以下两种方法来使用调试器来调试以字符串形式给出的语句。run(cmd[, globals[, locals]])调试通过语句执行的exec语句。全局变量默认为__main__.__dict__,局部变量默认为全局变量。runeval(expr[, globals[, locals]])调试通过eval()函数执行的表达式。全局和当地人具有相同的含义在run()。runctx(cmd, globals, locals)为了向后兼容。调用run()方法。runcall(func, *args, **kwds)调试一个函数调用,并返回其结果。最后,模块定义了以下功能:bdb.checkfuncname(b, frame)检查我们是否应该在这里休息,这取决于断点b的设置方式。如果它是通过行号设置的,它将检查是否b.line与也作为参数传递的帧中的一样。如果断点是通过函数名设置的,那么我们必须检查我们是否在正确的框架中(正确的功能),以及我们是否在第一个可执行行中。bdb.effective(file, line, frame)确定在这行代码中是否存在有效(有效)断点。返回断点的元组以及指示是否可以删除临时断点的布尔值。如果没有匹配的断点,则返回(None, None)。bdb.set_trace()Bdb从调用者的框架开始调试实例。 https://docs.python.org/2.7/library/bdb.html本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com最后更新于:2017-12-18分享分享手册到朋友圈分享手册到 QQ分享手册到微博复制手册链接到剪贴板分享扫描二维码扫码关注腾讯云开发者领取腾讯云

BDB (Berkeley DB)数据库简介(转载)_数据库有哪些bitdb-CSDN博客

>

BDB (Berkeley DB)数据库简介(转载)_数据库有哪些bitdb-CSDN博客

BDB (Berkeley DB)数据库简介(转载)

最新推荐文章于 2022-08-22 21:42:50 发布

Destina

最新推荐文章于 2022-08-22 21:42:50 发布

阅读量1.9w

收藏

4

点赞数

1

文章标签:

数据库

算法

数据结构

存储

数据库服务器

unix

最近要使用DBD,于是搜了下相关的资料,先贴个科普性的吧:

转自http://www.javaeye.com/topic/202990

 

DB综述DB最初开发的目的是以新的HASH访问算法来代替旧的hsearch函数和大量的dbm实现(如AT&T的dbm,Berkeley的ndbm,GNU项目的gdbm),DB的第一个发行版在1991年出现,当时还包含了B+树数据访问算法。在1992年,BSD UNIX第4.4发行版中包含了DB1.85版。基本上认为这是DB的第一个正式版。在1996年中期,Sleepycat软件公司成立,提供对DB的商业支持。在这以后,DB得到了广泛的应用,当前最新版本是4.3.27。

DB支持几乎所有的现代操作系统,如LINUX、UNIX、WINDOWS等,也提供了丰富的应用程序接口,支持C、C++、JAVA、PERL、TCL、PYTHON、PHP等。DB的应用十分广泛,在很多知名的软件中都能看到其身影。例如参考资料2中作者谈到利用DB在LINUX下实现内核级文件系统;参考资料3中通过实际测试数据说明DB提高了OPENLDAP的效率。LINUX下的软件包管理器RPM也使用DB管理软件包相关数据,可以使用命令file查看RPM数据目录/var/lib/rpm下的文件,则有形式如下的输出:

Dirnames: Berkeley DB (Btree, version 9, native byte-order) Filemd5s: Berkeley DB (Hash, version 8, native byte-order)

值得注意的是DB是嵌入式数据库系统,而不是常见的关系/对象型数据库,对SQL语言不支持,也不提供数据库常见的高级功能,如存储过程,触发器等。

 

DB的设计思想DB的设计思想是简单、小巧、可靠、高性能。如果说一些主流数据库系统是大而全的话,那么DB就可称为小而精。DB提供了一系列应用程序接口(API),调用本身很简单,应用程序和DB所提供的库在一起编译成为可执行程序。这种方式从两方面极大提高了DB的效率。第一:DB库和应用程序运行在同一个地址空间,没有客户端程序和数据库服务器之间昂贵的网络通讯开销,也没有本地主机进程之间的通讯;第二:不需要对SQL代码解码,对数据的访问直截了当。

DB对需要管理的数据看法很简单,DB数据库包含若干条记录,每一个记录由关键字和数据(KEY/VALUE)构成。数据可以是简单的数据类型,也可以是复杂的数据类型,例如C语言中结构。DB对数据类型不做任何解释, 完全由程序员自行处理,典型的C语言指针的"自由"风格。如果把记录看成一个有n个字段的表,那么第1个字段为表的主键,第2--n个字段对应了其它数据。DB应用程序通常使用多个DB数据库,从某种意义上看,也就是关系数据库中的多个表。DB库非常紧凑,不超过500K,但可以管理大至256T的数据量。

DB的设计充分体现了UNIX的基于工具的哲学,即若干简单工具的组合可以实现强大的功能。DB的每一个基础功能模块都被设计为独立的,也即意味着其使用领域并不局限于DB本身。例如加锁子系统可以用于非DB应用程序的通用操作,内存共享缓冲池子系统可以用于在内存中基于页面的文件缓冲。

 

DB核心数据结构数据库句柄结构DB:包含了若干描述数据库属性的参数,如数据库访问方法类型、逻辑页面大小、数据库名称等;同时,DB结构中包含了大量的数据库处理函数指针,大多数形式为 (*dosomething)(DB *, arg1, arg2, …)。其中最重要的有open,close,put,get等函数。

数据库记录结构DBT:DB中的记录由关键字和数据构成,关键字和数据都用结构DBT表示。实际上完全可以把关键字看成特殊的数据。结构中最重要的两个字段是 void * data和u_int32_t size,分别对应数据本身和数据的长度。

数据库游标结构DBC:游标(cursor)是数据库应用中常见概念,其本质上就是一个关于特定记录的遍历器。注意到DB支持多重记录(duplicate records),即多条记录有相同关键字,在对多重记录的处理中,使用游标是最容易的方式。

数据库环境句柄结构DB_ENV:环境在DB中属于高级特性,本质上看,环境是多个数据库的包装器。当一个或多个数据库在环境中打开后,环境可以为这些数据库提供多种子系统服务,例如多线/进程处理支持、事务处理支持、高性能支持、日志恢复支持等。

DB中核心数据结构在使用前都要初始化,随后可以调用结构中的函数(指针)完成各种操作,最后必须关闭数据结构。从设计思想的层面上看,这种设计方法是利用面向过程语言实现面对对象编程的一个典范。

 

DB数据访问算法在数据库领域中,数据访问算法对应了数据在硬盘上的存储格式和操作方法。在编写应用程序时,选择合适的算法可能会在运算速度上提高1个甚至多个数量级。大多数数据库都选用B+树算法,DB也不例外,同时还支持HASH算法、Recno算法和Queue算法。接下来,我们将讨论这些算法的特点以及如何根据需要存储数据的特点进行选择。

B+树算法:B+树是一个平衡树,关键字有序存储,并且其结构能随数据的插入和删除进行动态调整。为了代码的简单,DB没有实现对关键字的前缀码压缩。B+树支持对数据查询、插入、删除的常数级速度。关键字可以为任意的数据结构。

HASH算法:DB中实际使用的是扩展线性HASH算法(extended linear hashing),可以根据HASH表的增长进行适当的调整。关键字可以为任意的数据结构。

Recno算法: 要求每一个记录都有一个逻辑纪录号,逻辑纪录号由算法本身生成。实际上,这和关系型数据库中逻辑主键通常定义为int AUTO型是同一个概念。Recho建立在B+树算法之上,提供了一个存储有序数据的接口。记录的长度可以为定长或不定长。

Queue算法:和Recno方式接近, 只不过记录的长度为定长。数据以定长记录方式存储在队列中,插入操作把记录插入到队列的尾部,相比之下插入速度是最快的。

对算法的选择首先要看关键字的类型,如果为复杂类型,则只能选择B+树或HASH算法,如果关键字为逻辑记录号,则应该选择Recno或Queue算法。当工作集关键字有序时,B+树算法比较合适;如果工作集比较大且基本上关键字为随机分布时,选择HASH算法。Queue算法只能存储定长的记录,在高的并发处理情况下,Queue算法效率较高;如果是其它情况,则选择Recno算法,Recno算法把数据存储为平面文件格式。

优惠劵

Destina

关注

关注

1

点赞

4

收藏

觉得还不错?

一键收藏

知道了

0

评论

BDB (Berkeley DB)数据库简介(转载)

最近要使用DBD,于是搜了下相关的资料,先贴个科普性的吧:转自http://www.javaeye.com/topic/202990 DB综述DB最初开发的目的是以新的HASH访问算法来代替旧的hsearch函数和大量的dbm实现(如AT&T的dbm,Berkeley的ndbm,GNU项目的gdbm),DB的第一个发行版在1991年出现,当时还包含了B+树数据访问算法。在1992年

复制链接

扫一扫

深入理解mysql之BDB系列(1)---BDB相关基础知识

ywf的专栏

12-10

1万+

    深入理解mysql之BDB系列(1)---BDB相关基础知识作者:杨万富 一:BDB体系结构1.1.BDB体系结构BDB整体的体系结构如图1.1所示,包含五个子系统(见图1.1中相关数)。1)数据存取子系统,2)事务子系统,3)锁子系统,4)内存池管理子系统,5)日志子系统。在一个应用程序中,并不一定需要完全具备这5大子系统。如果程序只使用了数据存取子系统,

Berkeley DB数据库最新版

07-19

Berkeley DB6.0.20 Berkeley DB BDB Berkeley DB数据库

参与评论

您还未登录,请先

登录

后发表或查看评论

开发者福利,BCH通用数据库Bitdb 2.0来了

weixin_34272308的博客

09-27

100

​​自BCH在今年5月份升级之后将OP_RETURN的容量进行扩充,BCH开发者利用OP_RETURN开发了很多应用程序,例如memo、matter等等。这些应用程序的数据都存储在OP_RETURN,为了给这些应用创建标准API,开发者unwriter 曾推出基于BCH的OP_RETURN数据库BitDB 1.0。它从区块链中抓取所有OP_RETURN并将它们存储在MongoDB实例中,通过便携式...

数据库常用的几种引擎,区别和比较

weixin_48302711的博客

08-22

1282

数据库常用的几种引擎

数据库设计工具BDB 最新版 v3.0

03-03

数据库设计工具BDB 最新版 v3.0

v3.0 下载:

1) 中文简体版: [url]http://www.bainsoft.com/downloads/BDB.rar[/url]

2) 英文版: [url]http://www.bainsoft.com/downloads/BDBEN.rar[/url]

v3.0版本更新:

1, 增加E-R图支持

2,增加数据库对象查询功能

3,添加方案右键菜单

4,SQL查询分析功能完善

5,修正了一些bug

v3.0浏览:

[url]http://www.bainsoft.com/products.html[/url]

贝恩网站:

[url]http://www.bainsoft.com[/url]

一些特性, SQL智能化查询分析:

[url]http://blog.csdn.net/12rain/archive/2008/03/12/2172068.aspx[/url]

关于BDB:

BDB是贝恩软件([url]WWW.bainsoft.COM[/url])发布的数据库设计和数据库部署软件,

支持Oracle,MS SQLServer,Access,MySQL,SQLAnyWhere和Sybase数据库。新版本加入SQL查询分析自动完成功能。

BDB的主要功能及特性:

1,数据库设计。

快速建立数据库模型。支持正向工程和反向工程;

支持数据库模型和实体数据库之间的比对更新和双向同步。

2,数据库部署。

自动创建数据库部署程序。

除常规调用外,在BDB中还提供了外部命令行调用数据库自动安装支持,

通过该功能可把数据库部署集成到软件安装程序中。

3,数据库自动升级。

通过BDB进行数据库自动升级部署。

可在不影响数据表数据的前提下进行数据库自动升级。

4,数据库迁移。

完整的数据库迁移方案。可进行跨数据库平台迁移。可迁移的数据对象包括:

数据表,索引,约束,缺省值,触发器,视图,存储过程,函数以及数据表数据。

5,查询分析

数据表数据快速查询,编辑及导出操作:

A,SQL智能化输入自动完成。

A,提供专用的SQL编辑器。支持语法高亮,脚本预定义。

B,支持脚本快速选择输入。

C,提供了不同数据库平台下统一的快速查询语法支持(如“DESC”)。

D,数据表数据和Excel文件之间的双向导入导出操作。

E,提供特定的数据文件格式,用于不同数据库之间的数据导入,导出。

6,SQL脚本预输出

数据库模型或实体数据库有所改动时,可预输出更新SQL脚本,同时还可以

进行数据库重建SQL脚本预览。

7,支持跨数据库平台。

只需按熟悉的数据库平台进行数据库设计,在部署到其他数据库平台时,

系统会进行数据类型转换及不同数据库平台下的语法差异处理。

8,方案模式。

支持多个数据库管理。

9,可重用属性定义及同步。

10,开发语言支持。

开放的数据库物理结构文件格式(XML标准格式),并提供了外部调用数据库结构源程序

(包含C#/Delphi/JAVA三个版本)。

11,支持多语言。

可根据需要增加新的语言包。

mysql bdb_深入了解mysql它BDB系列(1)---BDB基础知识

weixin_42495394的博客

01-19

586

深入了解mysql它BDB系列(1)---BDB关基础知识作者:杨万富一:BDB体系结构1.1.BDB体系结构BDB总体的体系结构如图1.1所看到的,包括五个子系统(见图1.1中相关数)。1)数据存取子系统,2)事务子系统,3)锁子系统。4)内存池管理子系统。5)日志子系统。在一个应用程序中。并不一定须要全然具备这5大子系统。假设程序仅仅使用了数据存取子系统,它的体系结构如图1.2。在图1.2中,...

BDB (Berkeley DB)数据库简单介绍(转载)

weixin_33969116的博客

08-19

222

近期要使用DBD,于是搜了下相关的资料,先贴个科普性的吧:

转自http://www.javaeye.com/topic/202990

 

DB综述DB最初开发的目的是以新的HASH訪问算法来取代旧的hsearch函数和大量的dbm实现(如AT&T的dbm,Berkeley的ndbm,GNU项目的gdbm),DB的第一个发行版在1991年出现,当时还包括了B+树数据訪问算法。...

数据库安装

m0_58212960的博客

05-31

475

1.数据库

数据库(Database DB)是按照数据结构来组织、存储和管理数据的仓库(存储数据的仓库),它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。

在信息化社会,充分有效地管理和利用各类信息资源,是进行科学研究和决策管理的前提条件。数据库技术是管理信息系统、办公自动化系统、决策支

Python bsddb模块操作Berkeley DB数据库介绍

12-23

bsddb模块是用来操作bdb的模块,bdb是著名的Berkeley DB,它的性能非常好,mysql的存储后端引擎都支持bdb的方式。这里简单介绍一些关于bsddb的使用方法。 bdb不同于一般的关系数据库,它存储的数据只能是以key和...

Berkeley DB

12-10

Berkeley DB(BDB)是OpenLDAP后台数据库的默认配置,因此在安装OpenLDAP之前应先安装BDB。

数据库设计和自动安装工具BDB V2.2(for Oracle/MS SQLServer/MySQL/Access/SQLAnywhere/Sybase)

11-30

BDB是跨数据库平台的数据库设计和自动安装工具、
支持Oracle、MS SQLServer、Access、MySQL、SQLAnyWhere、Sybase数据库。
通过BDB可以快速建立数据库模型、并随时与实体数据库进行双向同步。
同时它还可以为您的应用程序创建数据库自动安装(或自动升级)程序、
以及实现不同数据库平台间数据库迁移等。

此外、在BDB中提供了对开发语言的支持、
其数据库结构定义文件采用XML标准格式、
并且开放了外部读取数据库结构的源程序(C#/Delphi/JAVA)、
您可以通过使用BDB来简化软件开发和部署过程:

1、数据库设计、自动安装:支持和数据库之间的正向和反向工程。
既可以通过BDB进行新的数据库设计,自动创建或更新至实体数据库、
也可导出现有数据库结构,并为其创建数据库自动安装程序。
2、跨数据库平台:只需按熟悉的数据库平台进行一次定义,就可在上述各个
数据库平台中进行数据库自动安装和任意迁移。系统会自动进行语法、数据类型转换。
3、数据库迁移:在不同数据库平台间进行数据库结构(包括数据表、索引、约束、
视图和存储过程对象)和数据迁移。
4、查询分析、数据表查询、数据编辑功能。提供专用的SQL编辑器、
支持SQL语法高亮、快速脚本输入、脚本预定义等。
5、预输出创建、更新SQL脚本。
6、提供数据导入、导出功能。支持从Excel导入导出的双向编辑操作。
7、对开发语言的支持。开放的数据库物理结构文件格式、并提供外部调用源程序,
包含C#、Delphi、JAVA三个版本。
8、数据库物理结构定义和实体数据库之间的比对更新、同步。
9、可为可重用属性创建数据字典定义、并进行同步。
10、采用方案定义、支持多个工程模式。
11、提供自定义功能、可以根据需要扩展数据库结构定义文件。
12、支持多语言(目前版本语言:中/英文)。并提供了新的语言定义的说明、
可根据需要增加新的语言支持。


版本更新:
1、2007.11.23 查询分析清除数据效率改善处理
2、2007.11.23 加入Sybase支持。
3、2007.11.26 状态栏调整。
4、2007.11.26 加入执行中断功能。
5、2007.11.26 数据表头资源增加备注项。
6、2007.11.26 查询分析加入desc [data]取当前数据表数据语法支持
7、2007.11.26 增加启动界面
8、2007.11.26 界面默认背景颜色更改。
9、2007.11.28 方案列表中增加双击设置为当前方案处理。
10、2007.11.28 更正MySQL下删除索引语法问题。
11、2007.11.28 Oracle、MySQL下导入数据增加禁用、重新启用外键约束处理。
12、2007.11.28 更正MySQL下处理导入日期类型字段数据问题。
13、2007.11.28 更正SQLServer下处理sql_variant、uniqueidentifier类型字段问题。
14、2007.11.28 更正数据库迁移自定义数据库链接问题。
15、2007.11.29 更正根据外键引用关系进行数据表排序问题。
16、2007.11.30 更正初次保存数据表结构覆盖索引页记录问题。


website: http://www.bainsoft.com/
support: bainsoft@163.com
blog: http://blog.csdn.net/12rain

bdb 数据库linux

06-08

Berkeley DB is a family of embedded key-value database libraries providing scalable high-performance data management services to applications. The Berkeley DB products use simple function-call APIs for data access and management.

BDB数据库

07-24

BDB数据库BDB数据库

Oracle中BDB数据库的使用方法

10-08

Oracle的BDB数据库以键/值的方式来存储数据,数据的存取非常快,而本身又小,在开发小型项目的时候可以采用。

数据库设计软件——BDB

12-28

支持Oracle、SQLServer、Access、MySQL、SQLAnyWhere数据库

通过BDB可以快速建立数据库模型、并随时与实体数据库进行双向同步。

同时它还可以为您的应用程序创建数据库自动安装(或自动升级)程序、

以及实现不同数据库平台间数据库迁移等

Berkeley DB Java Edition学习报告

07-24

Berkeley DB Java Edition(以下简称JE)是由美国Sleepycat Software公司(后被Oracle公司收购)开发的一套开放源码的嵌入式数据库,它采用K/V存储,能为应用程序提供可伸缩的、高性能的、有事务保护功能的数据管理服务

Berkeley DB 读取样例

08-23

嵌入式数据库Berkeley DB Java Edition Berkeley DB的使用 使用Berkeley DB的一般步骤 创建、打开、操作、关闭数据库环境Environment

关于bdb(barkeley database)数据库的总结

weixin_42797139的博客

12-18

3851

BerkeleyDB(BDB)

优点

嵌入式数据库

KV型数据库文件型

数据库历史悠久、成熟、稳定、易布署、易运维、高性能跨语言支持全面

缺点

不支持直接网络访问数据共享

不方便不支持SQL(现在已支持,但应用的不多)

使用bdb在pom文件中加入依赖:

com.sleepycat

je

3.3.75

<repository>

<id>oracle...

嵌入式数据库BDB的介绍与使用案例

weixin_30323631的博客

11-06

232

一、BerkeleyDB简介

BerkeleyDB是一个开放源代码的内嵌式数据库管理系统,能够为应用程序提供高性能的数据管理服务。应用它程序员只需要调用一些简单的API就可以完成对数据的访问和管理。与常用的数据库管理系统(如MySQL和Oracle等)有所不同,在BerkeleyDB中并没有数据库服务器的概念。应用程序不需要事先同数据库服务...

error: rpmdb: BDB0113 Thread/process 5906/140132313581632 failed: BDB1507 Thread died in Berkeley DB library error: db5 error(-30973) from dbenv->failchk: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery error: cannot open Packages index using db5 - (-30973) error: cannot open Packages database in /var/lib/rpm CRITICAL:yum.main: Error: rpmdb open failed

最新发布

06-01

这个错误提示是由于 RPM 数据库出现了问题,可能是由于系统意外关闭或磁盘空间不足等原因导致的。你可以尝试以下步骤来解决这个问题:

1. 清除 RPM 数据库缓存。使用以下命令:

```

sudo rm -rf /var/lib/rpm/__db*

sudo db_verify /var/lib/rpm/Packages

```

2. 重建 RPM 数据库缓存。使用以下命令:

```

sudo rpm --rebuilddb

```

3. 使用 `yum clean all` 命令清除缓存。使用以下命令:

```

sudo yum clean all

```

4. 如果上述步骤无法解决问题,你可以尝试使用 `rpm --initdb` 命令重新初始化 RPM 数据库。使用以下命令:

```

sudo rpm --initdb

```

如果问题仍然存在,你可能需要考虑重装操作系统或寻求更高级的技术支持。

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

Destina

CSDN认证博客专家

CSDN认证企业博客

码龄17年

暂无认证

23

原创

103万+

周排名

37万+

总排名

20万+

访问

等级

2415

积分

22

粉丝

12

获赞

7

评论

40

收藏

私信

关注

热门文章

ldconfig命令简介

22876

SVN的子命令SVN merge详解

20028

BDB (Berkeley DB)数据库简介(转载)

19011

LCA(最近公共祖先)问题

12801

十个必用的Vim Plugin(ZZ)

9311

最新评论

Valgrind使用简介

Nick_Rhan:

很有帮助。不过错字有点多。

聚集索引与非聚集索引(转载)

cody0909:

xuexi le ,ganghao zuijin yong dao

与高手共事

whdugh:

看过K&R那本c程序设计语言,每段代码都很简练。突然想起一句话,“你必须非常努力,才能看起来毫不费力”。

grep高亮显示设置(zz)

茶汁:

应该是 export GREP_OPTIONS='--color=auto'

与高手共事

zlszkdeb:

有道理,把复杂的事做简单就是本事

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

正则表达式30分钟入门教程

LCA(最近公共祖先)问题

三大WEB服务器对比分析(apache ,lighttpd,nginx)

2013年1篇

2012年3篇

2011年34篇

2010年14篇

2009年4篇

2008年6篇

2007年11篇

目录

目录

最新文章

正则表达式30分钟入门教程

LCA(最近公共祖先)问题

三大WEB服务器对比分析(apache ,lighttpd,nginx)

2013年1篇

2012年3篇

2011年34篇

2010年14篇

2009年4篇

2008年6篇

2007年11篇

目录

评论

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

Oracle Berkeley DB

>

Oracle Berkeley DB

 

 

Home

Skip to Content

Skip to Search

Oracle

Menu

Sign In Account

 

Oracle Account

Account

Help

Sign Out

Oracle Account

Manage your account and access personalized content. Sign up for an Oracle Account

Sign in to my Account

Sign in to Cloud

Access your cloud dashboard, manage orders, and more. Sign up for a free trial

Sign in to Cloud

Country/Region

Contact

 

Oracle Technology Network

Database

berkeleydb

Database Downloads

Database In-Memory

Multitenant

More Key Features

Application Development

Big Data Appliance

Cloud Database Services

Private Database Cloud

Data Warehousing & Big Data

Database Appliance

Exadata Database Machine

High Availability

Manageability

Migrations

Security

Unstructured Data

Upgrades

Windows

Database A - Z

                              Oracle Berkeley DB

Berkeley DB 是嵌入式键值对数据库的一系列库,为应用提供可扩展的高性能数据管理服务。Berkeley DB 产品使用简单的函数调用 API 来访问和管理数据。您可以点击这里下载新的 Berkeley DB 版本。

Oracle Berkeley DB 有三种实现方式:

Oracle Berkeley DB — 用 C 实现

Oracle Berkeley JE — 用 Java 实现

Oracle Berkeley XML — 用 C++ 实现

Berkeley DB 支持开发自定义数据管理解决方案,消除了过去与这些自定义项目有关的开销。Berkeley DB 提供了一组经实践证明行之有效的构建块技术,可以对这些技术进行配置以满足任何应用需要,其范围从手持设备到数据中心、从本地存储解决方案到世界范围的分布存储解决方案、从 KB 到 PB。

看看客户如何评价 Oracle Berkeley DB。点击这里。

近期 Berkeley DB 公告

发布 Berkeley DB Java 版,版本 7.5(2017 年 11 月 8 日)

发布 Berkeley DB Java 版,版本 7.0(2016 年 6 月 27 日)

发布 Berkeley DB,版本 6.2(2016 年 4 月 18 日)

产品解决方案专区

存储层

SQL

对象持久性

高可用性

XQuery 和 XML

 

下载 Berkeley DB 并查看源代码,选择您的构建选件,然后用适合您需要的配置对库进行编译。Berkeley DB 库是一个构建块,提供企业级数据库所具备的许多复杂数据管理特性。这些管理特性包括:高吞吐量、低延迟读取、无阻塞写入、高并发性、数据可扩展性、内存缓存、ACID 事务,以及应用、系统或硬件故障时的自动灾难恢复,还有高可用性和复制,这些都包括在一个应用可配置的软件包中。只需对库进行配置并使用提供的某些特殊特性,即可满足您的特殊应用需求。Berkeley DB 是一个可靠的解决方案,拥有 15 年的产品历史,使用范围从手机到电子商务。Berkeley DB 的主要目标是在保持对最终用户透明度的同时,为您的应用提供快速、可扩展、灵活的数据管理服务。  

无论您使用哪种编程语言、硬件平台或存储介质,Oracle Berkeley DB 均能满足您的需要。Berkeley DB API 几乎适用于所有编程语言,包括 ANSI-C、C++、Java、C#、Perl、Python、Ruby 以及 Erlang 等。还设计了一个纯 Java 版本的 Berkeley DB 库,专门用于必须完全在 Java 虚拟机 (JVM) 中运行的产品。我们使用 C# API 支持 Microsoft .NET 环境及公共语言运行时 (CLR)。Oracle Berkeley DB 在所有现代操作系统上都进行了编译和运行测试,均已获得认证,这些操作系统包括 Solaris、Windows、Linux、Android、Mac OS/X、BSD、iPhone OS、VxWorks 以及 QNX 等。

无论您的要求多高、多特殊,Oracle Berkeley DB 12c 都为您的应用提供了基础存储服务。使用 Berkeley DB,您可以:

缩短上市时间

降低开发成本

简化移动设备上的数据存储

降低部署成本

消除随系统扩容而带来的重写程序的昂贵代价

消除高昂的管理开销

避免数据丢失和数据损坏

提供互联网规模的高可用服务

产品

Berkeley DB

Berkeley DB Java 版

Berkeley DB XML

用 C 编写

软件库

键/值 API

合并了 SQLite 的 SQL API

B 树、散列、队列、RECNO 存储

C++、Java/JNI、C#、Python、Perl 等

Java Direct Persistence Layer (DPL) API

Java Collections API

支持高可用性的复制

用 Java 编写

Java 软件存档 (JAR)

键/值 API

Java Direct Persistence Layer (DPL) API

Java Collections API

支持高可用性的复制

用 C++ 编写

软件库

在 Berkeley DB 上实现分层

合并了 XQilla 的 XQuery API

索引的、优化的 XML 存储

C++、Java/JNI、C#、Python、Perl 等

支持高可用性的复制

产品信息

订阅 Berkeley DB 发布公告即可通知您未来的版本和其他 Berkeley DB 产品更新。

产品介绍:Berkeley DB 产品 (PDF)

产品介绍:Berkeley DB (PDF)

产品介绍:Berkeley DB Java 版 (PDF)

产品介绍:Berkeley DB XML (PDF)

   

E-mail this page   

 Printer View

Resources for

Developers

Startups

Students and Educators

Partners

Oracle PartnerNetwork

Find a Partner

Log in to OPN

How We Operate

Corporate Security Practices

Corporate Responsibility

Diversity and Inclusion

Contact Us

US Sales: +1.800.633.0738

Global Contacts

Subscribe to emails

Facebook

Twitter

LinkedIn

YouTube

Oracle

Integrated Cloud Applications & Platform Services

© 2019 Oracle

Site Map

Terms of Use and Privacy

 

Ad Choices

Careers

 

BerkeleyDB库简介 - 如果的事 - 博客园

BerkeleyDB库简介 - 如果的事 - 博客园

会员

周边

新闻

博问

AI培训

云市场

所有博客

当前博客

我的博客

我的园子

账号设置

简洁模式 ...

退出登录

注册

登录

千里之外

专注高性能web服务器架构和开发

博客园

首页

新随笔

联系

订阅

管理

BerkeleyDB库简介

BerkeleyDB库简介

 

BerkeleyDB(简称为BDB)是一种以key-value为结构的嵌入式数据库引擎:

嵌入式:bdb提供了一系列应用程序接口(API),调用这些接口很简单,应用程序和bdb所提供的库一起编译/链接成为可执行程序;

NOSQL:bdb不支持SQL语言,它对数据的管理很简单,bdb数据库包含若干条记录,每条记录由关键字和数据(key-value)两部分构成。数据可以是简单的数据类型,也可以是复杂的数据类型,例如C语言的结构体,bdb对数据类型不做任何解释,完全由程序员自行处理,典型的C语言指针的自由风格;

 

DB的设计思想是简单、小巧、可靠、高性能。如果说一些主流数据库系统是大而全的话,那么DB就可称为小而精。DB提供了一系列应用程序接口(API),调用本身很简单,应用程序和DB所提供的库在一起编译成为可执行程序。这种方式从两方面极大提高了DB的效率。第一:DB库和应用程序运行在同一个地址空间,没有客户端程序和数据库服务器之间昂贵的网络通讯开销,也没有本地主机进程之间的通讯;第二:不需要对SQL代码解码,对数据的访问直截了当。

DB对需要管理的数据看法很简单,DB数据库包含若干条记录,每一个记录由关键字和数据(KEY/VALUE)构成。数据可以是简单的数据类型,也可以是复杂的数据类型,例如C语言中结构。DB对数据类型不做任何解释, 完全由程序员自行处理,典型的C语言指针的"自由"风格。如果把记录看成一个有n个字段的表,那么第1个字段为表的主键,第2--n个字段对应了其它数据。DB应用程序通常使用多个DB数据库,从某种意义上看,也就是关系数据库中的多个表。DB库非常紧凑,不超过500K,但可以管理大至256T的数据量。

DB的设计充分体现了UNIX的基于工具的哲学,即若干简单工具的组合可以实现强大的功能。DB的每一个基础功能模块都被设计为独立的,也即意味着其使用领域并不局限于DB本身。例如加锁子系统可以用于非DB应用程序的通用操作,内存共享缓冲池子系统可以用于在内存中基于页面的文件缓冲。

 

BDB可以分为几个子系统:

存储管理子系统 (Storage Subsystem)

内存池管理子系统 (Memory Pool Subsystem)

事务子系统 (Transaction Subsystem)

锁子系统 (Locking Subsystem)

日志子系统 (Logging Subsystem)

BDB的每一个基础功能模块都被设计为独立的,也即意味着其使用领域并不局限于BDB本身,例如加锁子系统可以用于非BDB应用程序的通用操作,内存共享缓冲池子系统可以用于在内存中基于页面的文件缓冲。

 

BDB库的安装方法:从官网下载、解压后执行下面的命令

cd build_unix

../dist/configure

make

make install

DB缺省把库和头文件安装在目录 /usr/local/BerkeleyDB.6.1/ 下,使用下面的命令就可正确编译程序:

gcc test.c -I/usr/local/BerkeleyDB.6.1/include/ -L/usr/local/BerkeleyDB.6.1/lib/ -ldb -lpthread

 

 

下面是一个BDB API使用的例子:

#include

#include

#include

#include

#include

typedef struct customer {

int c_id;

char name[10];

char address[20];

int age;

} CUSTOMER;

/* 数据结构DBT在使用前,应首先初始化,否则编译可通过但运行时报参数错误 */

void init_DBT(DBT * key, DBT * data)

{

memset(key, 0, sizeof(DBT));

memset(data, 0, sizeof(DBT));

}

int main(void)

{

DB_ENV *dbenv;

DB *dbp;

DBT key, data;

int ret = 0;

int key_cust_c_id = 1;

CUSTOMER cust = {1, "chenqi", "beijing", 30};

/* initialize env handler */

if (ret = db_env_create(&dbenv, 0)) {

printf("db_env_create ERROR: %s\n", db_strerror(ret));

goto failed;

}

u_int32_t flags = DB_CREATE | DB_INIT_MPOOL | DB_INIT_CDB | DB_THREAD;;

if (ret = dbenv->open(dbenv, "/data0/bdb_test", flags, 0)) {

printf("dbenv->open ERROR: %s\n", db_strerror(ret));

goto failed;

}

/* initialize db handler */

if (ret = db_create(&dbp, dbenv, 0)) {

printf("db_create ERROR: %s\n", db_strerror(ret));

goto failed;

}

flags = DB_CREATE | DB_THREAD;

if (ret = dbp->open(dbp, NULL, "single.db", NULL, DB_BTREE, flags, 0664)) {

printf("dbp->open ERROR: %s\n", db_strerror(ret));

goto failed;

}

/* write record */

/* initialize DBT */

init_DBT(&key, &data);

key.data = &key_cust_c_id;

key.size = sizeof(key_cust_c_id);

data.data = &cust;

data.size = sizeof(CUSTOMER);

if (ret = dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE)) {

printf("dbp->put ERROR: %s\n", db_strerror(ret));

goto failed;

}

/* flush to disk */

dbp->sync(dbp, 0);

/* get record */

init_DBT(&key, &data);

key.data = &key_cust_c_id;

key.size = sizeof(key_cust_c_id);

data.flags = DB_DBT_MALLOC;

if (ret = dbp->get(dbp, NULL, &key, &data, 0)) {

printf("dbp->get ERROR: %s\n", db_strerror(ret));

goto failed;

}

CUSTOMER *info = data.data;

printf("id = %d\nname=%s\naddress=%s\nage=%d\n",

info->c_id,

info->name,

info->address,

info->age);

/* free */

free(data.data);

if(dbp) {

dbp->close(dbp, 0);

}

if (dbenv) {

dbenv->close(dbenv, 0);

}

return 0;

failed:

if(dbp) {

dbp->close(dbp, 0);

}

if (dbenv) {

dbenv->close(dbenv, 0);

}

return -1;

}

 上面的例子中使用了很多BDB库中的API,在下面会再具体介绍它们。 

 

 

 

访问方法

访问方法对应了数据在硬盘上的存储格式和操作方法。在编写应用程序时,选择合适的算法可能会在运算速度上提高1个甚至多个数量级。大多数数据库都选用B+树算法,DB也不例外,同时还支持HASH算法、Recno算法和Queue算法。接下来,我们将讨论这些算法的特点以及如何根据需要存储数据的特点进行选择。

BTree:有序平衡树结构;

Hash:扩展线性哈希表结构(extended linear hashing);

Queue:由有固定长度的记录组成的队列结构,每个记录使用一个逻辑序列号作为键值,逻辑纪录号由算法本身生成,这和关系型数据库中逻辑主键通常定义为int AUTO型是同一个概念;支持在队尾快速插入,和从队首取出(或删除)记录;并提供记录级别的加锁操作,从而支持对队列的并发访问。

Recno:同时支持固定长度的记录和变长记录,并且提供支持flat text file的永久存储和数据在读时提供一个快速的临时存储空间;

 

说明:

BTree和Hash的key和value都支持任意复杂类型,并且也允许存在key重复的记录;

Queue和Recno的key只能是逻辑序列号,两者基本上都是建立在Btree算法之上,提供存储有序数据的接口。前者的序列号是不可变的,后者的序列号可以是可变,也可以是不变;

可变,指的是当记录被删除或者插入时,编号改变;不变,指的是不管数据库如何操作,编号都不改变。在Queue算法中编号总被不变的。在Recno算法中编号是可变的,即当记录被删除或者插入时,数据库里的其他记录的编号也可能会改变。

另外,Queue的value为定长结构,而Recno的value可以为定长,也可以为变长结构;

 

对算法的选择首先要看关键字的类型,如果为复杂类型,则只能选择BTree或HASH算法,如果关键字为逻辑记录号,则应该选择Recno或Queue算法。

当工作集key有序时,BTree算法比较合适;如果工作集比较大且基本上关键字为随机分布时,选择HASH算法。

Queue算法只能存储定长的记录,在高的并发处理情况下,Queue算法效率较高;如果是其它情况,则选择Recno算法,Recno算法把数据存储为flat text file。

 

Access Method

Description

Choosing Occasion

BTree

关键字有序存储,并且其结构能随数据的插入和删除进行动态调整。为了代码的简单,Berkeley DB没有实现对关键字的前缀码压缩。B+树支持对数据查询、插入、删除的常数级速度。关键字可以为任意的数据结构。

1、 当Key为复杂类型时。

2、 当Key有序时。

Hash

DB中实际使用的是扩展线性HASH算法(extended linear hashing),可以根据HASH表的增长进行适当的调整。关键字可以为任意的数据结构。

1、 当Key为复杂类型。

2、 当数据较大且key随机分布时。

 

Recno

要求每一个记录都有一个逻辑纪录号,逻辑纪录号由算法本身生成。相当于关系数据库中的自动增长字段。Recho建立在B+树算法之上,提供了一个存储有序数据的接口。记录的长度可以为定长或不定长。

1、 当key为逻辑记录号时。

2、 当非高并发的情况下。

Queue

和Recno方式接近, 只不过记录的长度为定长。数据以定长记录方式存储在队列中,插入操作把记录插入到队列的尾部,相比之下插入速度是最快的。

1、当key为逻辑记录号时。

2、定长记录。

3、 高并发的情况下。

 

 

 

 

 

数据结构

数据库环境句柄结构DB_ENV:环境在DB中属于高级特性,本质上看,环境是多个数据库的包装器。当一个或多个数据库在环境中打开后,环境可以为这些数据库提供多种子系统服务,例如多线/进程处理支持、事务处理支持、高性能支持、日志恢复支持等。

数据库句柄结构DB:包含了若干描述数据库属性的参数,如数据库访问方法类型、逻辑页面大小、数据库名称等;同时,DB结构中包含了大量的数据库处理函数指针,大多数形式为 (*dosomething)(DB *, arg1, arg2, …),其中最重要的有open、close、put、get等函数。

数据库记录结构DBT:DB中的记录由关键字和数据构成,关键字和数据都用结构DBT表示。实际上完全可以把关键字看成特殊的数据。结构中最重要的两个字段是 void * data和u_int32_t size,分别对应数据本身和数据的长度。

数据库游标结构DBC:游标(cursor)是数据库应用中常见概念,其本质上就是一个关于特定记录的遍历器。注意到DB支持多重记录(duplicate records),即多条记录有相同关键字,在对多重记录的处理中,使用游标是最容易的方式。

DB中核心数据结构在使用前都要初始化,随后可以调用结构中的函数(指针)完成各种操作,最后必须关闭数据结构。从设计思想的层面上看,这种设计方法是利用面向过程语言实现面对对象编程的一个典范。

 

DB_ENV    *dbenv; // 环境句柄

DB     *dbp; // 数据库句柄

DBT     key, value; // 纪录结构

DBC     *cur; // 游标结构

 

 

数据库每条记录包含两个DBT结构,一个是key,一个是value。

typedef struct {

void *data; // 数据buf

u_int32_t size; // 数据大小

u_int32_t ulen; //

u_int32_t dlen; // 数据长度

u_int32_t doff; // 数据开始处

u_int32_t flags;

} DBT;

 

 

 

数据库环境

BDB环境是对一个或多个数据库的封装,环境对应一个目录,数据库对应该目录下面的一个文件。

 

环境支持:

在一个磁盘文件中包含多个数据库;

多进程和多线程支持;

事务处理;

高可用支持(主从库复制);

日志系统(可用于数据库异常恢复);

 

与环境相关的API:

DB_ENV *dbenv;

db_env_create(&dbenv, 0); // 创建数据库环境句柄

dbenv->open(dbenv, path, flags, 0); // 打开数据库环境, path是环境的目录路径, flag参数参考下面介绍

dbenv->close(dbenv, 0); // 关闭数据库环境

dbenv->err(dbenv, ret, formart, ...); // 错误调试

 

打开环境时的flags标志位:

DB_CREATE // 打开的环境不存在的话就创建它

DB_THREAD // 支持线程

DB_INIT_MPOOL // 初始化内存中的cache

DB_INIT_CDB

 

 

BDB 环境的使用例子:

/* 定义一个环境变量,并创建 */

DB_ENV *dbenv;

db_env_create(&dbenv, 0);

/* 在环境打开之前,可调用形式为dbenv->set_XXX()的若干函数设置环境 */

/* 通知DB使用Rijndael加密算法(参考资料>)对数据进行处理 */

dbenv->set_encrypt(dbenv, "encrypt_string", DB_ENCRYPT_AES);

/* 设置DB的缓存为5M */

dbenv->set_cachesize(dbenv, 0, 5 * 1024 * 1024, 0);

/* 设置DB查找数据库文件的目录 */

dbenv->set_data_dir(dbenv, "/usr/javer/work_db");

/* 设置出错时的回调函数 */

dbenv->set_errcall(dbenv, callback);

/* 将错误信息写到指定文件 */

dbenv->set_errfile(dbenv, file);

/* 打开数据库环境,注意后四个标志分别指示DB启动日志、加锁、缓存、事务处理子系统 */

dbenv->open(dbenv,home,DB_CREATE|DB_INIT_LOG|DB_INIT_LOCK| DB_INIT_MPOOL |DB_INIT_TXN, 0);

/* 在环境打开后,则可以打开若干个数据库,所有数据库的处理都在环境的控制和保护中。

注意db_create函数的第二个参数是环境变量 */

db_create(&dbp1, dbenv, 0);

dbp1->open(dbp1, ……);

db_create(&dbp2, dbenv, 0);

dbp1->open(dbp2, ……);

/* do something with the database */

/* 最后首先关闭打开的数据库,再关闭环境 */

dbp2->close(dbp2, 0);

dbp1->close(dbp1, 0);

dbenv->close(dbenv, 0);

 

 

 

数据库操作

DB数据库是一组K-V记录的集合,key和value都是DBT结构存储的,与数据库操作有关的API:

DB* dbp;

db_create(&dbp, dbenv, 0); // 获取数据库句柄

dbp->open(dbp, NULL, filename, NULL, DB_BTREE, flags, 0);       

dbp->close(&dbp, 0); // 在关闭数据库前,先关闭所有打开的游标

dbp->sync(dbp, 0) // 刷新cache,同步到磁盘,close操作会隐含调用该过程

dbp->remove(dbp, filename, NULL, 0)    // 移除数据库,不要移除已打开的数据库

dbp->rename(dbp, oldname, NULL, newname, 0)       // 数据库重命名,不要重命名已打开的数据库

dbp->put(dbp, NULL, &key, &data, DB_NOOVERWRITE);         // DB_NOOVERWRITE不允许重写已存在的key

dbp->get(dbp, NULL, &key, &data, flags); // 如果存在key重复的记录,只返回第一个,或者使用游标

dbp->del(dbp, NULL, &key, 0); // 删除指定key的记录

dbp->truncate(dbp, NULL, u_int32_t* count, 0);    // 删除所有记录,count中返回被删除的记录个数

dbp->get_open_flags(dbp, &open_flags);    // 获取打开的flags,仅对已打开的数据库才有意义

dbp->set_flags(dbp, flags); // 设置打开的flags

 

 打开数据库时的flags标志位

DB_CREATE  //如果打开的数据库不存在,就创建它;不指定这个标志,如果数据库不存在,打开失败!

DB_EXC    //与DB_CREATE一起使用,如果打开的数据库已经存在,则打开失败;不存在,则创建它;

DB_RDONLY  //只读的方式打开,随后的任何写操作都会失败;

DB_TRUNCATE  //清空对应的数据库磁盘文件;

DB_DUPSORT   //

  

get方法返回DB_NOTFOUND时表示没有匹配记录,其最后一个参数flags:

DB_GET_BOTH   // get方法默认只匹配key,该flag将返回key和data都匹配的第一条记录

DB_MULTIPLE   // get方法默认只返回匹配的第一条记录,该flag返回所有匹配记录

 

使用get方法时,data参数是DBT结构,该DBT的flags参数可以定义为:

DB_DBT_USERMEM // 使用自己的内存存储检索的data

DB_DBT_MALLOC // 使用DB分配的内存,用完后要手动free

DB提供的内存对齐方式可能不符合用户数据结构的需求,所以尽量使用我们自己的内存。

用DB_DBT_USERMEM方式改写前面的例子:

   /* get record */

CUSTOMER info;

init_DBT(&key, &data);

key.data = &key_cust_c_id;

key.size = sizeof(key_cust_c_id);

data.data = &info;

data.ulen = sizeof(CUSTOMER);

data.flags = DB_DBT_USERMEM;

if (ret = dbp->get(dbp, NULL, &key, &data, 0)) {

printf("dbp->get ERROR: %s\n", db_strerror(ret));

goto failed;

}

printf("id = %d\nname=%s\naddress=%s\nage=%d\n",

info.c_id,

info.name,

info.address,

info.age);

 

 

 

 

错误处理

DB接口调用成功通常返回0,失败返回非0值,此时可以检查错误码errno;

由系统调用失败引起的错误errno>0,否则errno<0。

db_strerror(errno) // 将错误编码映射成一个字符串

dbp->set_errfile(dbp, FILE*) // 设置错误文件

dbp->set_errcall(dbp, void(*)(const DB_ENV *dbenv, const char* err_pfx, const char* msg)) // 定义错误处理的回调函数

dbp->set_errpfx(dbp, format...) // 加上错误消息前缀

dbp->err(dbp, ret, format...) // 生成错误消息,并按优先级发给set_errcall定义的错误处理回调函数、set_errfile定义的文件、stderr;

dbp->errx(dbp, format...) // 与dbp->err类似,但没有返回值ret这个额外参数

错误消息由一个前缀(由set_errpfx定义)、消息本身(由err或errx定义)和一个换行符组成。

 

 

 

 

游标

如果DB数据库中存在键值相同的多条记录,使用dbp->get()方法默认只能获取一条记录(除非打开DB_MULTIPLE标志),这个时候有必要使用游标(cursor),游标可以迭代DB数据库中的记录。

DBC *cur;dbp->cursor(dbp, NULL, &cur, 0); // 初始化游标对象

cur->close(cur); // 关闭游标

cur->get(cur, &key, &data, flags); // 迭代记录,当没有可迭代的记录时,返回DB_NOTFOUND

cur->put(cur, &key, &data, flags);

cur->del(cur, 0); // 删除游标指向的记录

 

cur->get()方法中flags参数的取值:

1、迭代整个数据库中的纪录集合:

DB_NEXT    // 从第一条纪录遍历到最后一条纪录;

DB_PREV    // 逆序遍历,从最后一条纪录开始;

 

 

2、查找符合条件的记录集:

DB_SET          // 移动游标到键值等于给定值的第一条纪录;

DB_SET_RANGE      // 如果数据库使用BTREE的算法,移动游标到键值大于或等于给定值的纪录集合;

DB_GET_BOTH      // 移动游标到键值和数据项均等于给定值的第一条记录;

DB_GET_BOTH_RAGNE   // 移动游标到键值等于给定值,数据项大于或等于给定值的纪录集合;

DB_NEXT_DUP      // 获取下一个key重复的记录;

DB_PREV_DUP      // 获取上一个key重复的记录;

DB_NEXT_NODUP     // 获取下一个key不重复的记录;

DB_PREV_NODUP    // 获取上一个key不重复的记录;

 

 

cur->put()方法中flags参数的取值:

DB_NODUPDATA   // 如果插入的key已存在,返回DB_KEYEXIST,如果不存在,则记录的插入顺序由其在数据库的插入顺序决定;

DB_KEYFIRST    // 在key重复的集合里面放在第一个位置;

DB_KEYLAST    // 在key重复的集合里面放在最后一个位置;

DB_CURRENT    // replace

 

 

 

 

secondary数据库

通常,对DB数据库的检索都是基于key的,如果想通过value(或value的部分信息)来检索数据可以通过secondary database来实现。

如果我们把存放K-V记录的数据库称为 primary database,那么secondary database索引的是其它字段,而对应的value就是primary database的key。从secondary database中读取记录时,DB自动返回primary database中对应的value;

在创建secondary database时需要提供一个callback函数,用来创建key,这个key是根据primary database的key或value生成的。这个callback函数返回0时才允许索引到secondary中,我们可以在callback中返回DB_DONOTINDEX或其它错误码告诉secondary不要索引该记录。

建立secondary database之后,如果在primary database中新增或删除记录,会触发对secondary database的更新。注意:我们不能直接更新secondary database,任何写secondary database的操作都会失败,secondary database的变更需要通过修改primary database实现。但这里有一个例外,允许在secondary database中删除记录。

 

将secondary绑定到primary database的接口:

primary_dbp->associate(primary_dbp, NULL, second_dbp, key_creator, 0);

int key_creator(DB* dbp, const DBT* pkey, const DBT* pdata, DBT* skey);

 

 

 一个例子:

DB *dbp, *sdbp; /* Primary and secondary DB handles */

u_int32_t flags; /* Primary database open flags */

int ret; /* Function return value */

typedef struct vendor {

char name[MAXFIELD];         /* Vendor name */

char street[MAXFIELD];        /* Street name and number */

char city[MAXFIELD];         /* City */

char state[3];            /* Two-digit US state code */

char zipcode[6];           /* US zipcode */

char phone_number[13];       /* Vendor phone number */

char sales_rep[MAXFIELD];      /* Name of sales representative */

char sales_rep_phone[MAXFIELD]; /* Sales rep's phone number */

} VENDOR;

/* Primary */

ret = db_create(&dbp, NULL, 0);

if (ret != 0) {

/* Error handling goes here */

}

/* Secondary */

ret = db_create(&sdbp, NULL, 0);

if (ret != 0) {

/* Error handling goes here */

}

/* Usually we want to support duplicates for secondary databases */

ret = sdbp->set_flags(sdbp, DB_DUPSORT);

if (ret != 0) {

/* Error handling goes here */

}

/* Database open flags */

flags = DB_CREATE; /* If the database does not exist, create it.*/

/* open the primary database */

ret = dbp->open(dbp, NULL, "my_db.db", NULL, DB_BTREE, flags, 0);

if (ret != 0) {

/* Error handling goes here */

}

/* open the secondary database */

ret = sdbp->open(sdbp, NULL, "my_secdb.db", NULL, DB_BTREE, flags, 0);

if (ret != 0) {

/* Error handling goes here */

}

/* Callback used for key creation. Not defined in this example. See the next section. */

int get_sales_rep(DB *sdbp, /* secondary db handle */

const DBT *pkey,    /* primary db record's key */

const DBT *pdata,   /* primary db record's data */

DBT *skey)       /* secondary db record's key */

{

VENDOR *vendor;

/* First, extract the structure contained in the primary's data */

vendor = pdata->data;

/* Now set the secondary key's data to be the representative's name */

memset(skey, 0, sizeof(DBT));

skey->data = vendor->sales_rep;

skey->size = strlen(vendor->sales_rep) + 1;

/* Return 0 to indicate that the record can be created/updated. */

return (0);

}

/* Now associate the secondary to the primary */

dbp->associate(dbp, NULL, sdbp, get_sales_rep, 0);

 

 

 

 

页面大小

BDB记录的key和value都是存放在内存页(page)里面,所以页面大小(page size)对数据库性能有很大影响。

对BTree库,page size的理想大小至少是记录大小的4倍。

 

DB* dbp;

dbp->set_pagesize() // 设置page size

dbp->stat() // 查看page size

 

 

page size的影响:

1、overflow pages

溢出页(overflow pages)是用来存放那些单个page无法存放的kye或value的page。

如果page size设置过低,会产生溢出页,从而影响数据库性能。

 

2、locking

page size对多线程(或多进程)的BDB应用也会产生影响,这是因为BDB使用了page级的加锁(Queue除外)。

通常一个page包含多条记录,如果某个线程正在访问一条记录,则该记录所在的page会被锁住,导致同一个page下面的其他记录也无法被其他线程访问。

如果page size设置过高,会加大锁发生的概率,但page size过小,会导致BTree的深大变大,同样损失性能。

 

3、I/O

DB数据库的页面大小要和文件系统的block size一致;

 

 

 

 

 

缓存

DB可以将那些经常访问到记录cache 到内存里面,从而加快读写速度。

dbp->set_cachesize(dbp, gbytes, bytes, ncache); // 通过数据库句柄设置cache大小

dbenv->set_cachesize(dbp, gbytes, bytes, ncache); // 通过环境句柄设置cache大小(全局)

 

======专注高性能web服务器架构和开发=====

posted @

2015-10-10 18:15 

如果的事 

阅读(10696) 

评论(2) 

编辑 

收藏 

举报

会员力量,点亮园子希望

刷新页面返回顶部

公告

Copyright © 2024 如果的事

Powered by .NET 8.0 on Kubernetes

bdb — 调试器框架 — Python 文档 - 菜鸟教程

bdb — 调试器框架 — Python 文档 - 菜鸟教程

首页

随机页面

分类

bdb — 调试器框架 — Python 文档

来自菜鸟教程

Python/docs/3.10/library/bdb跳转至:导航、​搜索

bdb — 调试器框架

源代码: :source:`Lib/bdb.py`

bdb 模块处理基本的调试器功能,例如设置断点或通过调试器管理执行。

定义了以下异常:

exception bdb.BdbQuit

Bdb 类为退出调试器引发的异常。

bdb 模块还定义了两个类:

class bdb.Breakpoint(self, file, line, temporary=0, cond=None, funcname=None)

此类实现临时断点、忽略计数、禁用和(重新)启用以及条件。

断点通过名为 bpbynumber 的列表按编号进行索引,并通过 (file, line) 对通过 bplist 进行索引。 前者指向类 Breakpoint 的单个实例。 后者指向此类实例的列表,因为每行可能有多个断点。

创建断点时,其关联的文件名应采用规范格式。 如果定义了 funcname,则在执行该函数的第一行时将计算断点命中。 条件断点始终计为命中。

Breakpoint 实例有以下方法:

deleteMe()

从与文件/行关联的列表中删除断点。 如果它是该位置的最后一个断点,它还会删除文件/行的条目。

enable()

将断点标记为已启用。

disable()

将断点标记为禁用。

bpformat()

返回一个包含断点所有信息的字符串,格式很好:

断点编号。

如果是暂时的。

它的文件,行位置。

导致中断的条件。

如果它必须在接下来的 N 次被忽略。

断点命中数。

3.2 版中的新功能。

bpprint(out=None)

将 bpformat() 的输出打印到文件 out,如果是 None,则打印到标准输出。

class bdb.Bdb(skip=None)

Bdb 类充当通用 Python 调试器基类。

这个类负责跟踪设施的细节; 派生类应该实现用户交互。 标准调试器类 (pdb.Pdb) 就是一个例子。

skip 参数(如果给定)必须是全局样式模块名称模式的可迭代对象。 调试器不会进入源自与这些模式之一匹配的模块的帧。 帧是否被认为源自某个模块由帧全局变量中的 __name__ 决定。

3.1 版新功能: skip 参数。

Bdb 的以下方法通常不需要被覆盖。

canonic(filename)

以规范形式获取文件名的辅助方法,即作为大小写规范化(在不区分大小写的文件系统上)绝对路径,去掉周围的尖括号。

reset()

将 botframe、stopframe、returnframe 和 quitting 属性设置为准备开始调试的值。

trace_dispatch(frame, event, arg)

此功能安装为调试帧的跟踪功能。 它的返回值是新的跟踪函数(在大多数情况下,也就是它自己)。

默认实现决定如何分派帧,具体取决于即将执行的事件类型(作为字符串传递)。 event 可以是以下之一:

"line":将要执行新的一行代码。

"call":一个函数即将被调用,或者另一个代码块被输入。

"return":函数或其他代码块即将返回。

"exception":发生异常。

"c_call":即将调用AC函数。

"c_return":AC 功能已返回。

"c_exception":AC 函数引发异常。

对于 Python 事件,会调用专门的函数(见下文)。 对于 C 事件,不采取任何行动。

arg 参数取决于前一个事件。

有关跟踪功能的更多信息,请参阅 sys.settrace() 的文档。 有关代码和框架对象的更多信息,请参阅 标准类型层次结构 。

dispatch_line(frame)

如果调试器应该在当前行停止,调用 user_line() 方法(应该在子类中覆盖)。 如果设置了 Bdb.quitting 标志(可以从 user_line() 设置),则引发 BdbQuit 异常。 返回对 trace_dispatch() 方法的引用,以便在该范围内进一步跟踪。

dispatch_call(frame, arg)

如果调试器应在此函数调用上停止,请调用 user_call() 方法(应在子类中覆盖)。 如果设置了 Bdb.quitting 标志(可以从 user_call() 设置),则引发 BdbQuit 异常。 返回对 trace_dispatch() 方法的引用,以便在该范围内进一步跟踪。

dispatch_return(frame, arg)

如果调试器应在此函数返回时停止,请调用 user_return() 方法(应在子类中覆盖)。 如果设置了 Bdb.quitting 标志(可以从 user_return() 设置),则引发 BdbQuit 异常。 返回对 trace_dispatch() 方法的引用,以便在该范围内进一步跟踪。

dispatch_exception(frame, arg)

如果调试器应在此异常处停止,则调用 user_exception() 方法(应在子类中覆盖)。 如果设置了 Bdb.quitting 标志(可以从 user_exception() 设置),则引发 BdbQuit 异常。 返回对 trace_dispatch() 方法的引用,以便在该范围内进一步跟踪。

通常派生类不会覆盖以下方法,但如果他们想重新定义停止和断点的定义,它们可能会覆盖。

stop_here(frame)

此方法检查 帧 是否在调用堆栈中的 botframe 以下某处。 botframe 是调试开始的帧。

break_here(frame)

此方法检查文件名和属于 frame 的行中或至少在当前函数中是否存在断点。 如果断点是临时断点,则此方法将其删除。

break_anywhere(frame)

此方法检查当前帧的文件名中是否存在断点。

派生类应该覆盖这些方法以获得对调试器操作的控制。

user_call(frame, argument_list)

当在被调用函数内部的任何地方可能需要中断时,从 dispatch_call() 调用此方法。

user_line(frame)

当 stop_here() 或 break_here() 产生 True 时,从 dispatch_line() 调用此方法。

user_return(frame, return_value)

当 stop_here() 产生 True 时,从 dispatch_return() 调用此方法。

user_exception(frame, exc_info)

当 stop_here() 产生 True 时,从 dispatch_exception() 调用此方法。

do_clear(arg)

处理当断点是临时断点时必须如何删除它。

此方法必须由派生类实现。

派生类和客户端可以调用以下方法来影响步进状态。

set_step()

一行代码后停止。

set_next(frame)

停在给定帧中或下方的下一行。

set_return(frame)

从给定帧返回时停止。

set_until(frame)

当到达不大于当前行的行或从当前帧返回时停止。

set_trace([frame])

从帧开始调试。 如果未指定 frame,则调试从调用者的帧开始。

set_continue()

仅在断点处或完成时停止。 如果没有断点,将系统跟踪功能设置为None。

set_quit()

将 quitting 属性设置为 True。 这会在下一次调用 dispatch_*() 方法之一时引发 BdbQuit。

派生类和客户端可以调用以下方法来操作断点。 如果出现问题,这些方法将返回一个包含错误消息的字符串,如果一切正常,则返回 None。

set_break(filename, lineno, temporary=0, cond, funcname)

设置一个新的断点。 如果作为参数传递的 filename 不存在 lineno 行,则返回错误消息。 文件名 应采用规范形式,如 canonic() 方法中所述。

clear_break(filename, lineno)

删除 filename 和 lineno 中的断点。 如果没有设置,则返回错误消息。

clear_bpbynumber(arg)

删除Breakpoint.bpbynumber中索引为arg的断点。 如果 arg 不是数字或超出范围,则返回错误消息。

clear_all_file_breaks(filename)

删除 filename 中的所有断点。 如果没有设置,则返回错误消息。

clear_all_breaks()

删除所有现有断点。

get_bpbynumber(arg)

返回由给定数字指定的断点。 如果 arg 是一个字符串,它将被转换为一个数字。 如果 arg 是非数字字符串,如果给定的断点从未存在或已被删除,则会引发 ValueError。

3.2 版中的新功能。

get_break(filename, lineno)

检查 filename 的 lineno 是否有断点。

get_breaks(filename, lineno)

返回 filename 中 lineno 的所有断点,如果没有设置,则返回空列表。

get_file_breaks(filename)

返回 filename 中的所有断点,如果没有设置,则返回空列表。

get_all_breaks()

返回所有设置的断点。

派生类和客户端可以调用以下方法来获取表示堆栈跟踪的数据结构。

get_stack(f, t)

获取帧和所有更高(调用)和更低帧的记录列表,以及更高部分的大小。

format_stack_entry(frame_lineno, lprefix=': ')

返回一个包含堆栈条目信息的字符串,由 (frame, lineno) 元组标识:

包含框架的文件名的规范形式。

函数名称,或 ""。

输入参数。

返回值。

代码行(如果存在)。

客户端可以调用以下两种方法来使用调试器来调试以字符串形式给出的 语句 。

run(cmd, globals=None, locals=None)

调试通过 exec() 函数执行的语句。 globals 默认为 __main__.__dict__,locals 默认为 globals。

runeval(expr, globals=None, locals=None)

调试通过 eval() 函数执行的表达式。 globals 和 locals 与 run() 具有相同的含义。

runctx(cmd, globals, locals)

为了向后兼容。 调用 run() 方法。

runcall(func, /, *args, **kwds)

调试单个函数调用,并返回其结果。

最后,该模块定义了以下函数:

bdb.checkfuncname(b, frame)

根据设置断点 b 的方式,检查我们是否应该在这里中断。

如果它是通过行号设置的,它会检查 b.line 是否与作为参数传递的帧中的相同。 如果断点是通过函数名设置的,我们必须检查我们是否在正确的框架(正确的函数)中,以及我们是否在它的第一个可执行行中。

bdb.effective(file, line, frame)

确定在这行代码处是否存在有效(活动)断点。 返回断点的元组和指示是否可以删除临时断点的布尔值。 如果没有匹配的断点,则返回 (None, None)。

bdb.set_trace()

使用调用者框架中的 Bdb 实例开始调试。

取自“https://cainiaojiaocheng.com/index.php?title=Python/docs/3.10/library/bdb&oldid=23095”

分类:​Python 3.10 文档

隐私政策

关于菜鸟教程

免责声明

京ICP备19005578号-2