程序包
安装完成后,将在安装根目录下创建以下子目录结构和文件。使用C、C++、Java和Python构建所需的组件、文档以及SDK示例都可以在根目录中获得。
目录 | 说明 |
---|---|
/host | 开发工具mcocomp.exe (如果SmartEDB SQL可用,则使用sql2mco.exe )。 |
/include | C源代码头文件。 |
license.txt | SmartEDB授权文件。 |
makefile | 可用于构建所有SDK示例的make命令文件。(如果源代码可用,也可用于构建SmartEDB库)。 |
/odbc | ODBC库、示例和makefile(如果SmartEDB SQL可用) |
/samples | 所有C、C++、Java、C#、Python API、SQL(如果SmartEDB SQL可用)的SDK示例应用程序。 |
/target | 所有API平台相关编译文件、源代码和项目文件。 |
如果您使用的是SmartEDB HPC,安装后当前目录将如下所示:
./documentation
./host
./include
./odbc
./samples
./target
./license.txt
./makefile
程序包
主机端组件
/host.bin
目录包含SmartEDB数据定义语言编译器mcocomp
。- 如果SmartEDB SQL可用,则包含SQL数据定义语言编译器
sql2mco
。
目标端组件
子目录包含所有支持的API库、源代码(如果可用)和项目文件。
直接指针
特殊构建的直接指针(Direct Pointer)的目录将命名为/bin.dptr
和 /bin.dptr.so
。
基本库
Java库
安装根目录下的/target/bin
目录包含Java程序所需的smartedb.jar
和smartedb_jdbc.jar
。
Python库
/target/bin
下/python
子目录包含Python实现的源文件exdb.py
和以下库:
SmartEDB.so
- 发布模式版本。SmartEDB_debug.so
- 调试模式版本。SmartEDB_load.so
- 运行时动态加载请求模块的加载器。
本地C库
本地C库包含C++、Java和Python包装器所依赖的库,其中每个库以两种形式提供:
- 调试 - 在开发期间使用,以帮助发现应用程序级别的错误;包含多个级别的检查,以检查可能的错误参数值和其他在应用程序部署之前应该捕获和解决的错误条件;可通过文件名中的
_debug
后缀来识别。 - 发布 - 当开发周期完成或需要进行性能比较时使用;因为大多数内置于调试版本中的检查都被删除了,所以这个版本的库的执行速度要快得多。
Java和Python应用程序在运行时加载共享对象所需的库,C和C++应用程序将静态链接所需要的库。
系统访问层库
下表列出了实现SmartEDB功能库。与平台相关的功能是在为系统访问层(SAL)的库集中实现的。每个类别中的库必须至少有一个与支持的SAL库一起链接到C和C++应用程序。
- libmcosalatomic.a - 原子操作。
- libmcosallatches.a - 锁存实现。
- libmcosaltimer.a - 低分辨率和高分辨率定时器实现。
- libmconet.a - 系统网络层。
- libmcosalmem.a - 系统内存管理。
- libmcosalsmp.a - 系统互斥锁,信号量,线程和其他多线程/进程相关的代码。
- libmcosaldload.a - 系统动态加载器。
- libmcosalhollow.a - 存根函数(仅用于内存中数据库单线程应用程序 )。
核心运行时
在下列库中,libcolib.a
是用于基本功能。libcovtmem.a
或libcovtdsk.a
则是根据是否使用持久数据库。
- libmcolib.a - 主数据库功能。
- libmcovtmem.a - 用于内存数据库虚拟表管理。
- libmcovtdsk.a - 用于持久和混合数据库的虚拟表管理。
内存设备管理器
根据所使用的数据库内存设备类型,需要以下库之一。
- libmcomconv.a - 传统存储设备。
- libmcomalloc.a - 一个由运行时分配内部内存的常规内存设备。
- libmcomipc.a - 基于Linux IP于Unix-LC的共享内存设备。
- libmcompsx.a - 基于Unix-Linux POSIX的共享内存设备。
事务管理器
根据事务管理器的选择,需要以下库之一。
- libmcotmursiw.a - MURSIW (MUlti-Read-Single-Write) 多读单写事务管理器。
- libmcotmvcc.a - MVCC (Multi Version Concurrency Control) 多版本并发控制事务管理器。
- libmcotexcl.a - EXCLusive 独占事务管理器。
并发管理
管理来自多个线程或进程的数据库访问的同步时,需要下列库之一。
- libmcoslnxp.a - POSIX同步实现比基于SysV的更快,但只适用于传统的内存应用程序。如果pthread支持多进程应用程序,并且操作系统不是MacOS,则此库适用于多进程应用程序。
- libmcoslnxs5.a - 纯SysV同步实现,最慢,但适用于所有应用程序。
- libmcoslnx.a - 具备原子操作的SysV。适用于共享内存或常规内存中的所有应用程序。原子操作避免了不必要的内核调用,可以提供更好的性能。
单线程
在单线程内存数据库应用程序中,库libmcosalhllow.a
中没有同步代码,因此是实现速度最快,但仅适用于单线程应用程序。
如果应用程序与libmcosalhllow.a
链接。则不需要其他同步库。
持久支持
所有使用持久存储API的C和C++应用程序都必须链接libmcovtdsk
,而不是libmcovtmem
来进行“虚拟表”控制,此外,根据所使用的文件系统,需要以下库之一:
- libmcofuni.a - 支持Unix-Linux文件系统。
- libmcofu98.a - 对Unix98 文件系统的支持。
- libmcofu98zip.a - LZ压缩和数据库+ mmap。
- libmcofu98ziplog.a - LZ压缩和序列日志。
实用函数
SmartEDB内部使用的其他功能在以下库中提供。根据是否使用标准C运行时库,需要以下其中一个:
- libmcouwrt.a - C运行时。
- libmcounrt.a - 不使用C运行时。
可选特性库
以下为特定特性所需的可选库。
动态模块加载器
下面的库提供了根据请求动态加载核心部分的能力。
- libmcoloader.a - 提供
mco_core_load()
API来根据请求动态加载核心的部分。
序列数据类型支持
这些库提供基本的序列数据类型操作,如读取和插入序列数据。所有使用sequence数据类型的应用程序必须链接到以下库之一。
- libmcoseq.a - 序列数据类型API支持。
- libmcoseqrle.a - RLE压缩序列数据类型API支持。
分析函数库
如果除了基本的序列操作外,还需要对序列进行操作的数学和统计函数,则应用程序必须链接以下库之一。
- libmcoseqmath.a - 对数列进行运算的数学和统计函数。
- libmcoseqrlemath.a - 用RLE压缩对序列进行运算的数学和统计函数。
主动复制结构支持
主动复制结构包提供以下库。所有使用ARF (IoT) API的应用程序必须与以下两者链接。
- libmcoiotcomm.a - 物联网通信库。
- libmcoiotrepl.a - 物联网复制库。
事务日志接口
- libmcolog.a - 事务日志API实现。所有使用事务日志API的应用程序必须链接。
备份
- libmcobackup.a - 使用增量备份特性在持久介质上备份和恢复数据库的应用程序。
序列化
- libmcoseri.a - 使用
save/load
在持久介质上存储和检索数据库或类快照程序提供全内存数据库的序列化。
保存和加载
此功能不需要文件系统包装器。save/load
特性通过应用程序将数据传输到操作系统。
统一数据访问
- libmcouda.a - 对于使用统一数据访问功能(UDA接口)的应用程序需要配置。
调试错误和跟踪诊断
- libmcotrace.a - 跟踪框架允许应用程序将跟踪和调试信息输出到日志文件中。
数据库计算器
- libmcodbcalc.a - 使用数据库计算器需要配置。
HTTP数据库查看器
- libmcoews.a - HTTP服务器实现。
- libmcohv.a - HTTP数据库查看器(不具备SQL功能)。
数据库加密
- libmcocryptaes.a - AES加密算法。
- libmcocryptstub.a - 用于自定义实现的空加密API。
扩展库
除了基本库之外,安装根目录下的/target/bin
目录还包含依赖于扩展模块(如果可用)的其他内容。对于使用这些附加特性的C和C++应用程序,将需要如下一个或多个库。
重要
使用下列任何功能,都需要系统访问层库(System Access Layer, SAL)。
与基本库一样,本机C库以调试模式和发布模式两种形式提供。
SQL Support
用于嵌入式本地和远程SQL数据库支持的库。所有使用嵌入式SQL API的应用程序都需要以下库。
- libmcosql.a - SQL核心库。
- libmcocomp.a - 支持在xSQL中导入结构文件。
具有SQL功能的HTTP查看器
可用于在HTTP查看器中提供SQL功能。
- libmcohv_sql.a - 带有SQL接口的HTTP查看器。
提示
libmcohv_sql.a
取代了 libmcohv.a
,并且必须与libmcocgi.a
或 libmcoews_cgi_cud.a
一起使用。
远程SQL
- libmcorsql.a - 远程SQL应用程序。
仅远程SQL客户端
如果获得定制化SQL包,其中仅包含RSQL客户端源文件,那么以下目录中的附加内容将被添加到标准目标代码发行版中:
target/mcosql
target/mcorsql
target/sal
include
提示
- 不支持序列数据类型,只有一个占位符库libmcorsqlstub.a,必须与运行时链接。
- 可以构建RSQL客户端应用程序,而无需向核心运行时或任何其他运行时组件添加依赖项。
以下运行时库必须与应用程序链接。
- libmcosql.a - SQL核心库。
- libmcorsql.a - 远程SQL应用程序。
- libmcorsqlstdln.a - 远程SQL的标准输入实现。
- libmconet.a - 系统网络层。
- libmcosalmem.a - 系统内存管理。
- libmcosalsmp.a - 系统互斥,信号量,线程和其他多线程/进程相关的代码。
高可用性支持
- libmcoha.a - 高可用性API。
传输层库可选择以下任一库或者自定义。
- libmconwpipes.a - PIPE传输层。
- libmconwtcp.a - TCP/IP传输层。
- libmconwudp.a - UDP 传输层。
- libmcoiter.a - 用于发布所有数据库更改的详细信息以及副本端操作
更多请参阅高可用性API开发文档。
集群支持
libmcocluster.a - 集群核心实现(在高可用性包内提供)。
libmcocltcp.a - TCP/IP传输层。(可自定义)
性能监视器
性能监控API可以在自定义应用程序中实现(只包括libmcoperf
库),或者同时使用两个库(libmcoperf
与libcohvperf
)提供的HTTP实现。
- libmcoperf.a - 性能监视器实现。
- libmcohvperf.a - HTTP接口。
Web服务
使用Web服务的C和c++应用程序必须与以下库链接。
- libmcorest.a - 嵌入式Web服务REST API。
- libmcoews.a - HTTP服务器实现。
- libmcosaltimer.a - 低分辨率和高分辨率定时器实现。
- libmcosalsmp.a - 需要多线程支持。
公网访问Web服务的应用程序将链接以下库及其依赖项。
- libmcorestdb.a - 数据库Web服务(需
mcouda
) - libmcorestsql.a - SQL Web服务(需
mcosql
)。 - libmcorestperf.a - 性能监视器
perfmon
Web服务( 需mcoperf
)。
共享对象库
在安装根目录下的/target/bin.so
目录中有许多共享对象库(.so
)。可以在运行时加载到C/C++、Java或Python应用程序中,也可以按需加载到xSQL中。每个库都包含调试和发布模式两种形式。
/target/bin
目录中存在的每个静态库都有单独的共享对象版本(.so
二进制包)。
Java应用
对于Java应用程序,当应用程序实例化数据库对象时,将动态加载单个库libextremedbjni.so
(发布模式)。然后根据DatabaseOpenParameters
设置,自动加载适当的个别共享对象库。
xSQL
xSQL在启动时动态加载单个库libmcoxsql.so
(发布模式),然后根据命令行选项和/或配置文件设置,自动加载适当的单个共享对象库