- 1 数据库概述
- 1.1 DBMS 简史
- 1.2 数据库理论
- 1.3 事务 Transaction
- 1.4 SQL
- 1.5 数据库接口
- 本章参考
- 2 Relational 关系数据库
- 2.1 关系理论
- 2.2 Oracle
- 2.5 Microsoft SQL Server
- 2.6 DB2
- RDBS 比较
- 本章参考
- 3 NoSQL 非关系数据库
- 3.1 NoSQL 分类
- 3.2 键值 key-value 数据库
- 3.3 列存储数据库
- 3.4 图形数据库
- 本章参考
- 4 NewSQL
- 4.1 NewSQL 分类
- 4.2 分布式数据库 Distributed
- 本章参考
- 5 时序数据库 TSDB
- 5.1 简介
- 5.2 时序数据库比较
- 本章参考
- 6 SQL 引擎
- 6.1 SQL 引擎分类
- 6.2 SQL On Hadoop
- 本章参考
- 7 其它数据库
- 7.1 内存数据库 In-memory
- 7.2 嵌入式数据库 Embed
- 7.3 搜索引擎
- 本章参考
- 8 各种数据库分析比较
- 8.1 数据库排行 db-engines
- 8.2 数据库技术选型
- 8.3 DB 性能比较
- 8.4 国产数据库产品列表
- 8.5 DB 常用 SQL 比较
- 本章参考
- 9 SQL 调优
- 9.1 SQL JOIN
- 9.2 SQL 执行流程
- 10 数据库大型应用实例
- 10.1 负载均衡技术
- 10.2 数据库的高可用 HA
- 10.3 数据库的读写分离
- 10.4 数据库拆分(分布式)
- 10.5 跨库查询
- 本章参考
- 参考资料
- 附录
7.2 嵌入式数据库 Embed
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
- 程序安装
$ ../dist/configure
$ make
$ make install
- 程序提供服务
dbcreate(&dbp), dbp->open(), put, get, close
- 程序可用性测试
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 的主要特征:
管理简单,甚至可以认为无需管理。
操作方便,SQLite 生成的数据库文件可以在各个平台无缝移植。
可以非常方便
SQLite 的主要优势在于灵巧、快速和可靠性高。
SQLite 的主要优点 :
一致性的文件格式:可以当作文件使用。
在嵌入式或移动设备上的应用
内部数据库
数据分析,比 CSV 文件方便。
产品 Demo 和测:减少系统部署时间。
相比 RDBMS,SQLite 的一些劣势 :
1.C/S 应用的多客户端
2.大数据量:查询效率较低,超大数据并不支持。
3.高并发
7.2.3 H2
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 Name | Description | Number of Files |
---|---|---|
test.mv.db | Database file. Contains the transaction log, indexes, and data for all tables. Format: <database>.mv.db | 1 per database |
test.newFile | Temporary file for database compaction. Contains the new MVStore file. Format: <database>.newFile | 0 or 1 per database |
test.tempFile | Temporary file for database compaction. Contains the temporary MVStore file. Format: <database>.tempFile | 0 or 1 per database |
test.lock.db | Database lock file. Automatically (re-)created while the database is in use. Format: <database>.lock.db | 1 per database (only if in use) |
test.trace.db | Trace 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.db | Temporary file. Contains a temporary blob or a large result set. Format: <database>.<id>.temp.db | 1 per object |
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论