libzdb简介

第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简介_第1张图片

     

你可能感兴趣的:(mysql,linux,libzdb)