

# 如何计量 S3 Files
<a name="s3-files-metering"></a>

S3 Files 是链接到您的 S3 存储桶的共享文件系统，旨在提供低延迟的文件访问，同时使成本与您的活跃工作集成正比。文件系统维护存储桶中对象的视图，并代表您智能地将文件系统操作转换为高效的 S3 请求。当您通过文件系统处理特定的文件和目录时，关联的文件元数据和内容会被放置到文件系统的高性能存储中，尤其是那些受益于低延迟访问的部分。许多读取操作会完全绕过文件系统，直接从您的 S3 存储桶以 S3 GET 请求速率提供数据，而不收取 S3 文件数据费用。您的权威数据始终保留在 S3 存储桶中。当您写入数据时，数据会存储在文件系统的高度耐用的高性能存储上，然后同步回您的 S3 存储桶，从而使文件系统和 S3 存储桶在两个方向上保持一致。

使用 S3 Files，您需要为文件系统的高性能存储上的活动数据部分支付存储费用，并在读取和写入文件系统的高功能存储时支付数据访问费用。本页说明了如何对每个维度进行计量，以便您可以了解和优化成本。有关按 AWS 区域的定价，请参阅 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)。

## 如何计量文件系统存储
<a name="s3-files-metering-storage"></a>

当您访问数据时，文件系统会根据需要将部分文件元数据和内容加载到文件系统的高性能存储中，从而在不复制整个数据集的情况下实现快速读取。您可以配置文件大小阈值（默认为 128 KiB），用于确定哪些文件存储在高性能存储上。等于或低于此阈值的文件会最受益于低延迟访问。超过阈值的文件将直接从您的 S3 存储桶流式传输，并且不会产生 S3 Files 存储费用。在可配置的时段（1 - 365 天，默认 30 天）内未访问的数据会自动从高性能存储中过期。您需要为驻留在高性能存储上的活动数据部分支付存储费率。通常，该部分很小，因为大文件直接从您的 S3 存储桶流式传输，陈旧的数据会自动过期，而只有对延迟敏感的小文件存储在高性能存储上。高性能存储上的最小可计费文件大小为 10 KiB。

## 如何计量数据访问
<a name="s3-files-metering-data-access"></a>

您需要对元数据操作以及对文件系统的高性能存储的读取和写入支付数据访问费用。大文件读取（1 MiB 或更大）始终直接从 S3 存储桶流式传输，即使数据驻留在文件系统的高性能存储上也是如此。S3 针对高吞吐量读取进行了优化，而高性能存储则针对低延迟的小文件访问进行了优化。直接读取会产生 S3 GET 请求和 S3 Files 元数据读取（4 KiB），而不收取文件读取费用。后台同步操作还会产生数据访问费用和 S3 请求费用。将数据导入到高性能存储会产生写入费用，而将更改导出回您的 S3 存储桶会产生读取费用。

## 如何从文件系统中计量数据访问
<a name="s3-files-metering-operations"></a>

S3 Files 将每个文件系统操作计量为一次读取或写入，并应用于文件或元数据。每个操作都有一个最小计量大小，然后四舍五入到下一个 1 KiB 增量。这意味着每个操作都属于以下四类中的一或两类：数据读取、元数据读取、数据写入或元数据写入。例如，读取文件计量为一次数据读取和一次元数据读取，而重命名文件则计量为一次元数据读取和一次元数据写入。任何单个操作都不会计量为两个以上的类别。

**从高性能存储进行的文件读取**按读取的数据大小进行计量，每个读取操作至少为 32 KiB。

**向高性能存储进行的文件写入**按写入的数据大小进行计量，每个写入操作最少为 32 KiB。

**元数据读取**按 4 KiB 的最小大小计量，并在 S3 Files 读取时适用。元数据读取操作示例包括列出目录和查看文件属性。

**元数据写入**以 4 KiB 的最小大小计量，并在 S3 Files 写入时适用。元数据写入操作示例包括创建或删除文件和目录、重命名、更改权限以及调用 `fsync`。

## 如何计量直接从 S3 存储桶中进行流式传输
<a name="s3-files-metering-s3-reads"></a>

在两种情况下，S3 Files 会直接从 S3 存储桶流式传输读取：文件的数据未存储在高性能存储上，或者读取为 1 MiB 或更大（即使数据也驻留在高性能存储上）。这种设计反映了每个存储层的优势。S3 存储桶针对高吞吐量进行了优化，而文件系统则针对低延迟访问进行了优化。

对于小文件（默认小于 128 KiB），S3 Files 会将数据异步导入到高性能存储中，以便以低延迟提供后续读取。对于直接存储桶流，您需要为 S3 GET 请求和 S3 Files 元数据读取（4 KiB）付费，而不收取文件读取费用。

## 如何计量存储桶同步
<a name="s3-files-metering-sync"></a>

S3 Files 自动使您的文件系统和关联的 S3 存储桶保持同步。同步按文件读取、文件写入和 S3 请求费用计量。有关更多信息，请参阅 [了解同步的工作原理](s3-files-synchronization.md)。

**将数据导入文件系统：**当 S3 根据您的设置将数据从 S3 存储桶复制到高性能存储时，该操作将计量为一次文件系统写入。首次访问目录、读取未存储在高性能存储上的文件以及 S3 Files 反映直接对 S3 存储桶所做的更改时，就会发生导入写入。计量大小是写入高性能存储和元数据写入的数据量。

**将更改导出到 S3 存储桶：**当 S3 Files 将文件系统更改复制回您的 S3 存储桶时，该操作将计量为一次文件系统元数据读取和一次文件读取。只有从高性能存储中读取的数据才计入此费用。例如，如果您向文件追加数据，S3 Files 会使用 `UploadPartCopy` 以避免在追加之前将整个对象导入高性能存储中。这可以优化您的高性能存储成本。

**重命名和移动操作：**S3 存储桶并不原生支持目录或重命名。S3 文件系统中显示为目录的是由存储桶中的对象键共享的公共前缀，S3 对象是不可变的。因此，当您重命名或移动文件时，S3 Files 使用更新的键将数据复制到新对象（计量为一个 S3 PUT 请求），然后删除原始对象。根据数据的位置，同步计量为一次元数据读取和一次文件读取。如果文件数据未存储在高性能存储上，则只计为一次 4 KiB 的元数据读取。对于文件重命名或目录移动，S3 Files 会对该前缀下的每个对象重复此复制和删除过程。有关更多信息，请参阅 [了解重命名和移动操作的影响](s3-files-synchronization.md#s3-files-sync-rename-move)。

**文件数据过期：**在 1 到 365 天（默认为 30 天）的可配置时段内未访问的文件数据会自动从高性能存储中过期。过期不会产生数据访问费用或元数据费用。

**元数据更新：**您的文件系统元数据（索引节点）反映了关联的 S3 存储桶的内容。随着存储桶发生变化，元数据会更新，以与存储桶的当前状态保持一致。被访问目录的元数据从不过期。您可以使用索引节点 CloudWatch 指标来监控您的元数据使用情况。元数据过期不产生任何费用。

## 计量示例
<a name="s3-files-metering-examples"></a>

**首次列出大目录**

首次列出目录时，S3 Files 会导入该目录中所有文件的元数据。每个文件的元数据导入计量为一次 4 KiB 的写入。根据您的导入配置（默认 128 KiB），S3 Files 还会将该目录中的小文件的数据预提取和复制到文件系统的高性能存储上，以优化来实现最低延迟。每个文件的数据导入均按文件的大小（最小 32 KiB）计量为一次写入。您可以通过配置导入规则来控制导入哪些文件的数据。有关更多信息，请参阅 [自定义 S3 Files 的同步](s3-files-synchronization-customizing.md)。

**读取未存储在高性能存储上的小文件**

S3 Files 直接从 S3 存储桶将读取流式传输到客户端，并异步将数据导入到文件系统的高性能存储，因此将来的读取速度更快。这计为一次文件系统读取，其大小为传输的数据量（最小 32 KiB）。将数据异步导入到文件系统的高性能存储计为一次写入，其大小为传输的数据大小。读取文件系统中其数据已过期的文件时，也会遵循类似的过程。当文件从高性能存储中过期时，不会产生任何文件系统操作费用。

**写入文件系统**

所有文件写入都存储在高性能存储上，并按写入的数据大小进行计量，最小为 32 KiB。在复制到 S3 存储桶之前，S3 Files 会等待一个非活跃的写入活动期（60 秒），以便汇总对同一文件的连续更改。快速写入是在单个 S3 PUT 中捕获的，而不是为每个单独的更改生成新的对象版本。这降低了 S3 请求成本和文件高性能存储成本。此存储桶同步计为一次文件系统读取（针对从高性能存储中读取的数据）和一个 S3 PUT 请求。