您的位置:首页 > 运维架构 > Linux

libzdb简介

2015-07-21 16:06 435 查看
第1节 Libzdb 简介

api地址:http://www.tildeslash.com/libzdb/#api

Libzdb 实现了一个小型、快速、易用、线程安全的连接池数据库API,可连接多种数据库,零配置,通过URL指定连接信息。

它具有以下特性:

1.线程安全的数据库连接池

2.连接到多个数据库系统

3.零配置,通过URL指定连接信息

4.支持MySQL, PostgreSQL, SQLite and Oracle 可以不断进行扩展。

支持平台:ios、Linux、FreeBSD、Solaris、OpenBSD和其他 POSIX 系统。

支持开发语言:C、C++、Object C。

缺点:不支持window,所以若要在windows下进行开发,可能不是很方便,但是libzdb的邮件列表反馈很及时,在列表中提出的问题,

一般一两天就会得到官方工程师的回答。

它的几个相关网站如下:
http://www.tildeslash.com/libzdb/# libzdb的offiCal website; libzdb是由这家公司开发的,所以质量应该可以值得信任

libzdb的代码使用googlecode上代管https://code.google.com/p/libzdb/

当时的安装系统是redhatlinux ,直接下载代码编译安装

./configure;

make ;

make install

当时的数据库环境为oracle11gr2,基本的使用可以参看源代码中的示例代码,在test目录下。

基本的使用为:

在程序启动的时候,调用url_new 和 connectpool_new来初始化连接池:

1、调用 connection_start启动连接池

2、在线程中或者在具体的处理流程中调用getcon来获得连接,进而执行sql语句即可

3、在程序结束的时候,要对应调用url_free和connection_pool_free来释放资源

第2讲 数据库连接池

连接池基本的思想是:在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,

并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,

而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,

还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、

最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。

线程安全:

如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果

和单线程运行的结果是一样的,而且其他变量的值也和预期的是一样的,就是线程安全的。就是说,一个类或者

程序所提供的接口对于线程来说是原子操作,或者多个线程之间的切换不会导致该接口的执行结果存在二义性,

也就是说,我们不用考虑同步的问题。

线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,

一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话,

就可能影响线程安全。

第3讲 设计模式之代理模式

简介

为其他对象提供一种代理以控制对这个对象(过程化中,可以考虑一下特殊的接口,如数据库API接口)的访问。

在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介作用。

优点

1)职责清晰

真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一个完整事务,

附带的结果就是编程简洁清晰。

2)代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了保护目标对象的作用。

3)高扩展性,假如引入其他数据库。

关系数据库:

MYSQL

ORALCE OCI

SQLITE

模块化设计:

要编写复杂软件又不至于一败涂地的唯一方法,就是用定义清晰的接口把若干简单模块组合起来,如此一来,

多数问题只会出现在局部,那么还有希望对局部进行改进或优化,而不至于牵动全身。(参考Unix编程艺术)

Libzdb使用场景:

要使系统兼容各类数据库、多进程等。

Libzdb源码结构:

各模块简单分析

1. Exception

异常模块,主要是为整个系统提供异常处理接口。处理异常包括数据库异常和内存异常等其他非法操作。

捕获异常的好处是,不使程序由于异常而非法退出。

2.System

一些时间处理、内存操作、系统操作等接口。方便其他模块调用。

3.Net

统一资源定位符(UniformResource Locator,缩写为URL)是对可以从互联网上得到的资源的位置和访问方法的

一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件

的位置以及浏览器应该怎么处理它。

整个数据库的初始化和代理对象的初始化,都是通过这个URL来进行处理。

示例:

mysql://localhost:3306/test?user=root&password=swordfish

这个模块是针对这个URL地址进行处理的函数接口。

4.Util

这个模块主要负责一些工具的封装,封装了字符串的处理函数,还封装了面向对象中的向量(vector)、StringBuffer等工具,

方便整个模块的处理。

5.Db

这个模块主要包括实现连接代理模式、结果集代理模式、SQL语句代理模式和数据库连接池、各类数据库连接的

真实实现等。这个模块是整个程序的核心。

Prepared statement:

PreparedStatement_T p = Connection_prepareStatement(con,

"INSERT INTO employee(name, picture) VALUES(?, ?)");

PreparedStatement_setString(p, 1, "Kamiya Kaoru");

PreparedStatement_setBlob(p, 2, jpeg, jpeg_size);

PreparedStatement_execute(p);

Here, we use a Prepared Statement to execute a query which returns a Result Set:

PreparedStatement_T p = Connection_prepareStatement(con,

"SELECT id FROM employee WHERE name LIKE ?");

PreparedStatement_setString(p, 1, "%Kaoru%");

ResultSet_T r = PreparedStatement_executeQuery(p);

while (ResultSet_next(r))

printf("employee.id = %d\n", ResultSet_getInt(r, 1));

libzdb的API接口图为:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  libzdb mysql linux