第九章 配置数据库(一)
数据库是使用数据库向导创建的 IRIS.DAT
文件。 IRIS
数据库保存称为全局变量的多维数组中的数据和称为例程的可执行内容,以及类和表定义。
全局变量和例程包括方法、类、网页、SQL、BASIC和JavaScript文件
注意:在 Windows
系统上,不要对 IRIS.DAT
数据库文件使用文件压缩。 (通过右键单击 Windows
资源管理器中的文件或文件夹并选择属性,然后选择高级,然后压缩内容以节省磁盘空间来压缩文件;压缩后,文件夹名称或文件名在 Windows
资源管理器中呈现为蓝色。)如果压缩IRIS.DAT
文件,它所属的实例将无法启动,并出现误导性错误。
IRIS
数据库根据需要动态扩展(假设有可用空间),但可以指定最大大小。如果使用默认的 8KB
块大小,数据库可以增长到 32 TB
。
可以动态更改大多数数据库配置;可以在系统运行时创建和删除数据库以及修改数据库属性。
注意:这些主题描述了使用管理门户手动配置数据库的过程。 IRIS
还包含可用于自动化数据库配置的编程工具。可以使用新选项卡类中的 Config.Databases
来创建和配置数据库;还可以使用 ^DATABASE
命令行实用程序配置数据库。
配置数据库的另一种方法是将 CreateDatabase
、ModifyDatabase
或 DeleteDatabase
操作与配置合并结合使用。配置合并允许通过应用声明性合并文件来自定义 IRIS
实例,该文件指定要应用于该实例的设置和操作。
Background
IRIS
将数据——持久多维数组(globals
)以及可执行代码(例程)——存储在一个或多个称为数据库的物理结构中。数据库由存储在本地操作系统中的一个或多个物理文件组成。一个 IRIS
系统可能(并且通常确实)有多个数据库。
每个 IRIS
系统都维护一个数据库缓存——一个本地共享内存缓冲区,用于缓存从物理数据库中检索到的数据。这种高速缓存大大减少了访问数据所需的昂贵 I/O
操作的数量,并提供了 IRIS
的许多性能优势。
IRIS
应用程序通过命名空间访问数据。命名空间提供存储在一个或多个物理数据库中的数据(全局变量和例程)的逻辑视图。一个 IRIS
系统可能(并且通常确实)有多个命名空间。 IRIS
将逻辑命名空间中可见的数据映射到一个或多个物理数据库。这种映射为应用程序提供了一种强大的机制,可以在不更改应用程序逻辑的情况下更改应用程序的物理部署。
在最简单的情况下,命名空间和数据库之间存在一一对应关系,但许多系统利用定义命名空间的能力来提供对多个数据库中数据的访问。例如,一个系统可以有多个命名空间,每个命名空间提供存储在一个或多个物理数据库中的数据的不同逻辑视图。
数据库注意事项
数据库总限制
可以在单个 IRIS
实例中配置的数据库数量的绝对限制(如果有足够的存储空间)是 15,998
。其他限制如下:
- 数据库的目录信息不能超过
256 KB
。这意味着,如果数据库目录名称的平均长度较长,则实例可以拥有较少的数据库总数。以下公式描述了这种关系:
maximum_DBs = 258048/ (avg_DB_path_length + 3)
例如,如果所有数据库目录路径的格式为 c:\InterSystems\IRIS\mgr\DBNNNN\
,则平均长度为 33
个字节。因此,最大数据库数为 7,168
,计算如下:258048/ (33 + 3) = 7168
。
- 镜像数据库在
15,998
的绝对限制中计数两次。如果实例上的所有数据库都进行了镜像,则有效限制为7,499
个数据库。这是因为IRIS
为镜像数据库创建了两个数据库定义;一个用于目录路径 (c:\InterSystems\IRIS\mgr\DBNNNN\
),另一个用于镜像定义 (:mirror:MIRRORNAME:MirrorDBName
)。 - 可以同时使用的数据库数量受操作系统对打开文件数量(每个进程或系统范围)的限制的限制。
IRIS
将大约一半的操作系统打开文件分配留给自己和设备使用。
数据库配置注意事项
以下是配置数据库时要考虑的提示:
-
IRIS
提供了一个无缝选项,可以在多个物理数据库 (IRIS.DAT
) 文件中传播数据。因此,可以根据需要构建具有多个数据库的应用程序或通过全局或下标级映射拆分数据。 - 根据可用于管理任务(如备份、恢复、完整性检查等)的基础设施,将数据库大小保持在可管理的范围内。
- 建议将流全局变量(如果将流存储在
IRIS.DAT
数据库文件中)全局映射到单独的数据库,并且将流数据库配置为大 (64 KB
) 块大小。 - 根据工作负载,考虑替代(更大)块大小可能比默认的
8 KB
数据库块大小更有利。
大数据块大小注意事项
除了 IRIS
支持的 8 KB
(默认)块大小(始终启用)之外,还可以启用以下块大小:
16 KB (16384)
32 KB (32768)
64 KB (65536)
但是,在创建使用大块的数据库时应该谨慎,因为使用它们会影响系统的性能。
在启用和使用大的块大小之前,请考虑以下几点:
- 如果应用程序工作负载主要由顺序插入或顺序读取/查询组成,那么大的块大小可以提高性能。
- 如果应用程序工作负载主要由随机插入或随机读取/查询组成,那么大的块大小可能会降低性能。
由于对于给定的数据库缓存总大小,较大的块大小会导致缓存更少的块,为了减少对随机数据库访问的影响,还应该考虑将更多的总内存用作数据库缓存。 - 对于索引类型的数据库,默认的块大小(
8 KB
)确保最佳性能;
较大的块大小可能会降低性能。
如果正在考虑为数据设置更大的块大小,那么应该考虑将索引全局变量映射到一个单独的8 KB
块大小的数据库。
要创建一个使用不支持的块大小的数据库,请执行以下操作:
- 使用启动设置页面(系统管理>附加设置>启动)的设置启用块大小,在配置参数文件引用的
DBSizesAllowed
条目中描述。
- 在启动设置页面(系统管理>附加设置>启动),按照内存和启动设置中的描述,为启用的块大小配置数据库缓存。
- 重新启动
- 按照创建本地数据库中的说明创建数据库。
数据库兼容性注意事项
如创建本地数据库过程中所述,可以通过复制或移动 IRIS.DAT
文件将 IRIS
数据库复制或移动到创建它的实例之外的实例,或临时装载在另一个实例中创建的数据库在同一个系统上。还可以将数据库的备份(请参阅数据完整性指南的“备份和恢复”一章)恢复到其原始实例以外的实例。但是,为避免数据不兼容,必须满足以下要求:
- 目标(新)实例必须使用相同的字符宽度(
8
位或Unicode
;
请参阅安装指南中的新选项卡中的字符宽度设置),并使用相同的区域设置(请参阅使用管理门户的NLS设置页面)作为创建数据库的实例。
此要求的一个例外是使用基于 ISO 8859 Latin-1
字符集的区域设置的 8
位实例与使用相应宽字符区域设置的 Unicode
实例兼容。例如,使用 enu8
语言环境在 8
位实例中创建的数据库可以在使用 enuw
语言环境的 Unicode
实例中使用。
- 如果源实例和目标实例位于不同字节序的系统上,则数据库必须转换为目标实例的字节序后才能使用。
根据平台的不同,多字节数据存储在最低内存地址(即首先)中的最高有效字节或最低有效字节:当最高有效字节首先存储时,称为“大端;”当首先存储最低有效字节时,它被称为“小端”。
当使用在不同端序的系统上创建的现有IRIS.DAT
定义数据库时,请在使用数据库之前使用cvendian
实用程。