use*_*893 2 c api postgresql rdbms libpq
我需要在C中为PostgreSQL(libpq)的数据库访问API 以及可能的其他一些关系数据库管理系统编写一个数据库抽象层.
我正在考虑在pqsql和其他数据库系统中编写自己的现有函数抽象.编写这样的数据库抽象API时,最好的策略是什么?
到目前为止,我首选的写作计划可能是:
但这种处理方式可能只允许一次使用一个关系数据库管理系统.这对于数据库抽象层来说是常见的吗?
还有什么其他选择可以考虑?
Cra*_*ger 10
不要重新发明这个轮子.
它已经反复完成,虽然最受欢迎的系统(ODBC)无疑是丑陋的,但它已经为你听过的每个数据库编写了抽象.使用UnixODBC项目,它也存在于UNIX和POSIX UNIX上,就像Mac OS X一样.
libdbi是一种稍微不那么丑陋的替代方案,具有更窄的数据库支持.你不会像libdbi那样从libdbi的供应商处获得驱动程序.
怎么反复?
如果C++没问题,我听到非常好的另一个数据库抽象层是诺基亚(曾经是TrollTech)提供的Qt框架的 数据库接口.它具有已经*编写*和测试的主要优点.主要的缺点是,如果您的应用核心不是基于C++和Qt,那么它有点笨拙.
其他C++选项,我个人没有使用过,是sqlapi ++,dtemplatelib和SOCI.
如果到目前为止你想知道为什么在C++中为所有这些数据库抽象层编写,也许这是一个暗示.如果你用C编写一个DB抽象层,我打赌你会通过函数指针的结构重新发明C++虚方法,并且可能最终创建一些像GObject一样难看的东西,在这种情况下你也可以使用libgdb/gnome -db.为了避免假的虚拟方法垃圾,你可以通过运行时库路径在链接时选择数据库层,只提供一堆普通的老函数,但我不知道为什么你这么做的时候会这么做选项在附近.
顺便说一句,如果事实证明你根本不需要DB抽象,只有一个更好的界面(因为你主要针对Pg),请查看libpqtypes(普通C,没有C++,非常便携),也称为"什么" libpq应该是".即使您要添加抽象层,也可能值得在libpqtypes上进行,而不仅仅是libpq.
如果ODBC,libdbi,libpqtypes,Qt等不适合您,则需要定义原因,并创建一组更具体的标准来满足.
或者:如果您的设计允许,您可能需要考虑使用Python(psycopg),Ruby,Perl或Java(JDBC)等数据库抽象层以嵌入式更高级语言进行数据库访问和相关工作.所有这些都有自己广泛采用且经过良好测试的数据库抽象层,您可以从中受益,同时仍然在C中编写大部分程序.或者,就此而言,您可以在C中编写程序的性能关键位作为库,并使用已经为您编写的理智的数据库抽象层,从您选择的语言中使用它.
数据库抽象很难.真的很难.数据库抽象使用起来并不太糟糕,表现得体面,并且足够灵活,可以使用数据库,因为不仅仅是愚蠢的行存储更难 - 迟早,你需要的不仅仅是一个笨拙的行存储.
| 归档时间: |
|
| 查看次数: |
2430 次 |
| 最近记录: |