返回介绍

7.2 嵌入式数据库 Embed

发布于 2024-09-26 01:07:51 字数 4903 浏览 0 评论 0 收藏 0

7.2.1 Berkeley DB

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

设计思想

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 应用程序的通用操作,内存共享缓冲池子系统可以用于在内存中基于页面的文件缓冲。

download: http://linux.softpedia.com/get/Database/Database-Engines/Berkeley-DB-75.shtml

  1. 程序安装
$ ../dist/configure
$ make
$ make install
  1. 程序提供服务

dbcreate(&dbp), dbp->open(), put, get, close

  1. 程序可用性测试

compile: gcc test.c -ldb -lpthread –I[INCLUDE_PATH] -L[LIB_PATH]

/***
 * Access methods.
 ***/
typedef enum {
    DB_BTREE=1,
    DB_HASH=2,
    DB_RECNO=3,
    DB_QUEUE=4,
    DB_UNKNOWN=5          /* Figure it out on open. */
} DBTYPE;

7.2.2 SQLite

SQLite 是目前最流行的开源嵌入式数据库,和很多其他嵌入式存储引擎相比(NoSQL),如

BerkeleyDB、MemBASE 等,SQLite 可以很好的支持关系型数据库所具备的一些基本特征,

如标准 SQL 语法、事务、数据表和索引等。

SQLite 的主要特征:

  1. 管理简单,甚至可以认为无需管理。

  2. 操作方便,SQLite 生成的数据库文件可以在各个平台无缝移植。

  3. 可以非常方便

SQLite 的主要优势在于灵巧、快速和可靠性高。

SQLite 的主要优点

  1. 一致性的文件格式:可以当作文件使用。

  2. 在嵌入式或移动设备上的应用

  3. 内部数据库

  4. 数据分析,比 CSV 文件方便。

  5. 产品 Demo 和测:减少系统部署时间。

相比 RDBMS,SQLite 的一些劣势
1.C/S 应用的多客户端
2.大数据量:查询效率较低,超大数据并不支持。
3.高并发

7.2.3 H2

官网 http://www.h2database.com/

H2 是一个用 Java 开发的嵌入式数据库,它本身只是一个类库,即只有一个 jar 文件,可以直接嵌入到应用项目中。H2 主要有如下三个用途:

第一个用途,也是最常使用的用途就在于可以同应用程序打包在一起发布,这样可以非常方便地存储少量结构化数据。

第二个用途是用于单元测试。启动速度快,而且可以关闭持久化功能,每一个用例执行完随即还原到初始状态。

第三个用途是作为缓存,即当做内存数据库,作为 NoSQL 的一个补充。当某些场景下数据模型必须为关系型,可以拿它当 Memcached 使,作为后端 MySQL/Oracle 的一个缓冲层,缓存一些不经常变化但需要频繁访问的数据,比如字典表、权限表。

H2 特性

  • 高性能

  • 开源

  • 纯 Java

  • 支持嵌入式、服务器和集群

  • 强安全特性

  • 数据库文件可以加密

    H2 目录结构

h2
 |---bin
 |    |---h2-1.1.116.jar  //H2 数据库的 jar 包(驱动也在里面)
 |    |---h2.bat  //Windows 控制台启动脚本
 |    |---h2.sh   //Linux 控制台启动脚本
 |    |---h2w.bat  //Windows 控制台启动脚本(不带黑屏窗口)
 |---docs     //H2 数据库的帮助文档(内有 H2 数据库的使用手册)
 |---service  //通过 wrapper 包装成服务。
 |---src      //H2 数据库的源代码
 |---build.bat  //windows 构建脚本
 |---build.sh   //linux 构建脚本

H2 连接方式

H2 支持以下三种连接模式:

1)嵌入式模式(使用 JDBC 的本地连接)

2)服务器模式(使用 JDBC 或 ODBC 在 TCP/IP 上的远程连接)

3)混合模式(本地和远程连接同时进行)

Database File Layout

The following files are created for persistent databases:

File NameDescriptionNumber of Files
test.mv.dbDatabase file. Contains the transaction log, indexes, and data for all tables. Format: <database>.mv.db1 per database
test.newFileTemporary file for database compaction. Contains the new MVStore file. Format: <database>.newFile0 or 1 per database
test.tempFileTemporary file for database compaction. Contains the temporary MVStore file. Format: <database>.tempFile0 or 1 per database
test.lock.dbDatabase lock file. Automatically (re-)created while the database is in use. Format: <database>.lock.db1 per database (only if in use)
test.trace.dbTrace file (if the trace option is enabled). Contains trace information. Format: <database>.trace.db Renamed to <database>.trace.db.old if too big.0 or 1 per database
test.123.temp.dbTemporary file. Contains a temporary blob or a large result set. Format: <database>.<id>.temp.db1 per object

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文