当在文件地理数据库中创建数据集时,可以选择配置关键字来自定义存储数据的方式。每个关键字优化特定类型数据的存储,可略微提高存储的效率和性能。有七种可用的关键字。无法自定义这些关键字。
大多数情况下,当在文件地理数据库中创建要素类或栅格时,会指定 DEFAULTS 关键字。DEFAULTS 在大多数情况下都有效。只存在以下几种例外情况:
- 如果存储超过 1 TB 大小的大栅格数据集,需要指定 MAX_FILE_SIZE_256TB 关键字。
- 如果存储非拉丁字母的字符数据(例如中文或阿拉伯语),需要指定 TEXT_UTF16 关键字。
- 如果在文件地理数据库中存储地形数据集,需要指定 GEOMETRY_OUTOFLINE 关键字。
- 如果存储还包含大 BLOB 列的地形数据集,需要指定 GEOMETRY_AND_BLOB_OUTOFLINE 关键字。
- 如果存储包含不会经常访问的大 BLOB 列的要素类,需要指定 BLOB_OUTOFLINE 配置关键字。
如果没有指定任何配置关键字,则使用 DEFAULTS。
该关键字 | 影响数据存储的方式 |
---|---|
DEFAULTS | 存储最大 1 TB 大小的数据 文本用 UTF-8 格式存储。 |
TEXT_UTF16 | 存储最大 1 TB 大小的数据 文本用 UTF16 格式存储。 |
MAX_FILE_SIZE_4GB | 将数据大小限制为 4 GB 文本用 UTF-8 格式存储。 |
MAX_FILE_SIZE_256TB | 存储最大 256 TB 大小的数据 文本用 UTF-8 格式存储。 |
GEOMETRY_OUTOFLINE | 存储最大 1 TB 大小的数据 文本用 UTF-8 格式存储。 在文件中存储与非空间属性不同的几何属性 |
BLOB_OUTOFLINE | 存储最大 1 TB 大小的数据 文本用 UTF-8 格式存储。 在文件中存储与其余属性不同的 BLOB 属性 |
GEOMETRY_AND_BLOB_OUTOFLINE | 存储最大 1 TB 大小的数据 文本用 UTF-8 格式存储。 在文件中同时存储与其余属性不同的几何属性和 BLOB 属性 |
文本存储:UTF8 和 UTF16
如果文本数据是英语、另一种西欧语言或其他使用拉丁字母的语言(例如波兰语、土耳其语或印度尼西亚语),则 UTF8 是最有效的存储格式。UTF8 只用 1 个字节存储每个无重音的拉丁字符,用 2 到 6 个字节存储每个重音字符或任何在拉丁字母中不存在的其他字符。正因为 UTF8 只用 1 个字节存储绝大部分文本字符,对存储量的要求较低,所以提高了这些语言的性能。
对非拉丁字母的文本数据来说(比如中文、日语、朝鲜语、俄语、希腊语或阿拉伯语),UTF16 是最有效的存储格式。对这些语言,该格式针对每个字符只用 2 个字节。用 UTF8 表达同样的字符可能要用多达 6 个字节,这将增加存储要求并略微降低这些语言的性能。仅当关键字是 TEXT_UTF16(具有 1 TB 大小的限制)时才可以使用该存储文本的方法。
MAX_FILE_SIZE_4GB
使用该关键字存储小于 4GB 大小的数据集会比 DEFAULTS 关键字稍微提升效率,尽管节省的存储空间相对而言并不明显(每条记录节省 1 个字节或每百万条记录节省 1 MB)。举例来说,加利福尼亚所有公路(2,092,079 条记录)使用 DEFAULTS 关键字存储时用 312 MB,而使用 MAX_FILE_SIZE_4GB 关键字存储时用 310 MB。
该关键字将数据集最大大小限制为 4 GB,因此只有在确定要素类或栅格数据集永远也不会超过该大小时才指定这个关键字。
MAX_FILE_SIZE_256TB
指定 MAX_FILE_SIZE_256TB 配置关键字允许创建最大 256 TB 大小的数据集。通常只在存储大栅格数据集时才指定该关键字。
行内存储和行外存储
行内存储数据是指所有属性都在文件地理数据库的同一文件或虚拟表中。当行外存储数据时,数据存储在不同对象中。
如果所有数据都是行内存储的,当查询或编辑要素类时,数据就加载到内存中。因此,如果要素类包含的属性使用大量的存储空间,就需要花很长时间加载到内存中,并需要较大的缓存以存储到内存中。
几何属性类型和 BLOB 属性类型具有存储大量数据的潜能。例如,如果要素类中的许多要素包含上千个顶点,则需要行外存储几何。或者,如果属性数据量很大(由多个文本列或大 BLOB 列组成),则需要行外存储几何,这样,当访问几何时,就不必自动将所有属性信息放入内存。如果同时行外存储几何类型和 BLOB 类型或二者之一,则仅在应用程序需要它们时才会将其加载到内存。例如,如果在 ArcMap 中基于 BLOB 值选择要素,则会将 BLOB 属性加载到内存。
如果要素类包含大 BLOB 属性,则可以在创建要素类时指定 BLOB_OUTOFLINE 关键字。然后,仅当查询 BLOB 属性时,才会将其加载。