计划您的服务

在创建 Oracle NoSQL Database Cloud Service 服务之前,请花一些时间规划该服务。在开始之前,请考虑此处列出的问题并决定要做什么。

本文章包含以下主题:

开发者概览

简要了解服务架构,然后选择可以满足应用开发需求的 SDK/驱动程序。

NDCS 开发人员任务

Oracle NoSQL Database Cloud Service (NDCS) 是一种完全 HA 服务。它专为要求低延迟响应时间、灵活的数据模型和针对动态负载的弹性扩展的高要求应用而设计。作为完全托管的服务,Oracle 可以处理所有管理任务,例如软件升级、安全补丁程序、硬件故障和打补丁。


NoSQL 数据库 SDK/驱动程序 - 这些 SDK 采用通用许可 (Universal Permissive License,UPL) 许可,可用于 NoSQL Cloud Service 或内部部署数据库。这些是功能完备的 SDK,并提供一组丰富的功能。这些驱动程序还可用于针对在其他供应商云中运行的 Oracle NoSQL 集群执行的应用程序。
  1. NoSQL 适用于 Java 的 SDK
  2. NoSQL JavaScript SDK
  3. NoSQL Python SDK
  4. NoSQL .NET SDK
  5. NoSQL Go SDK
  6. NoSQL 用于 Spring Data 的 SDK

OCI 控制台 - 支持快速创建表、修改表、删除表、加载数据、快速创建索引、删除索引、基本查询、变更表容量和查看指标。

OCI SDK/驱动程序 - Oracle Cloud Infrastructure 提供多种软件开发工具包 (SDK),以促进定制解决方案的开发。这些通常根据 UPL 授权。这些功能通过编程接口与 OCI 控制台的功能相似。
  1. Rest API
  2. 适用于 Java 的 SDK
  3. 适用于 Python 的 SDK
  4. 适用于 Javascript 的 SDK
  5. 适用于 .NET 的 SDK
  6. 适用于 Go 的 SDK
  7. 适用于 Ruby 的 SDK

Oracle NoSQL Database Cloud Service 限制

Oracle NoSQL Database Cloud Service 具有各种默认限制。每当创建 Oracle NoSQL Database Cloud Service 表时,系统都会确保您的请求在指定的限制范围内。有些限制在表一级实施,有些限制在区域一级实施。

要了解有关服务限制、其范围以及如何通过提交请求来提高服务限制的更多信息,请参阅服务限制。下面列出了适用于 Oracle NoSQL Database Cloud Service 的当前限制。

限制 范围 说明 非托管环境中的值 托管环境中的值

最大表存储大小

每个租户的最大存储总大小。用于一个或多个表的总空间不能超过此值。

5 TB

17.5TB

表名称

表名的最大字符数、允许的字符数和初始字符数。

表名最多可以包含 256 个字符。所有名称都必须以字母开头(a-z、A-Z)。后续字符可以是字母(a-z、A-Z)、数字 (0-9) 或下划线。

与非托管环境相同

预配容量 - 最大读取和写入吞吐量

预配表时的最大读取和写入吞吐量。

每个表 40,000 个读取单位和 20,000 个写入单位。

对于托管环境中的所有表,总共最多 420,000 个读取单位和 280,000 个写入单位

按需容量 - 最大读取和写入吞吐量

使用 On Demand Capacity 预配表时的最大读取和写入吞吐量。

每个表有 10,000 个读取单位和 5,000 个写入单位。

托管环境中不允许/需要

按需容量 - 表数

区域

具有 On Demand Capacity 的表数。

3

托管环境中不允许/需要

更改预配模式

将表的预配模式从“预配”更改为“按需”,反之亦然。

每天只能更改一次。

N/A

最大表数

区域

最大表数。

30

这可以使用“请求服务限制更新”进行自定义

最大列数。

最大数字列数。

50

这可以使用“请求服务限制更新”进行自定义

最大表方案更新数

表方案更新的最大数量。

100

这可以使用“请求服务限制更新”进行自定义

最大索引数

最大索引数。

5

这可以使用“请求服务限制更新”进行自定义

吞吐量和存储限制的最大更改数

吞吐量和存储限制的最大更改数。

Oracle 允许:

  • 每天无限制的吞吐量和存储量增加

  • 每个 24 小时内至多可减少四个吞吐量或存储。

这可以使用“请求服务限制更新”进行自定义

索引名

指数

最大字符数、允许的字符数和初始字符数。

索引名称最多可以包含 64 个字符。所有名称都必须以字母开头(a-z、A-Z)。后续字符可以是字母(a-z、A-Z)、数字 (0-9) 或下划线。

这可以使用“请求服务限制更新”进行自定义

每个 WriteMultiple 请求的最大单个操作数

请求

每个 WriteMultiple 请求的最大单个操作数。

50

与非托管环境相同。还可以使用“请求服务限制更新”来增加此限制

WriteMultiple 请求的最大数据大小。

请求

WriteMultiple 请求的最大数据大小。

25 MB

与非托管环境相同。还可以使用“请求服务限制更新”来增加此限制

列名称

最大字符数、允许的字符数和初始字符数。

字段名称最多可以包含 64 个字符。所有名称都必须以字母开头(a-z、A-Z)。后续字符可以是字母(a-z、A-Z)、数字 (0-9) 或下划线。

与非托管环境相同。

最大辅助索引键大小

指数

最大索引密钥大小。

64 字节

这可以使用“请求服务限制更新”进行自定义

最大主索引键大小

指数

最大主键大小。

64 字节

这可以使用“请求服务限制更新”进行自定义

最大行大小

最大行大小。

512 KB

这可以使用“请求服务限制更新”进行自定义

查询字符串的最大长度。

查询

查询字符串的最大长度。

10 KB

这可以使用“请求服务限制更新”进行自定义

支持的最大 DDL 操作速率。

区域

支持的最大 DDL 操作速率。

4 每分钟

这可以使用“请求服务限制更新”进行自定义

吞吐量和数据存储资源的最大值。

区域

吞吐量和数据存储资源的最大值。

根据地区,Oracle 允许:

  • 最多 100,000 个读取单位

  • 最多 40,000 个写入单位

Oracle 允许每个租户的存储大小上限为 5 TB。该区域可以具有存储大小为 5 TB 的单个表,在这种情况下,区域无法创建另一个表。或者有多个表,并确保所有这些表中的数据都在最大存储大小 5 TB 内。

420,000 个写入单位、280,000 个读取单位、17.5 TB 存储

相关主题

估计容量

了解如何估算 Oracle NoSQL Database Cloud Service 的吞吐量和存储容量。

计算背后的基础知识

在了解如何估计服务的吞吐量和存储之前,让我们先了解吞吐量和存储单元定义。

  • 写入单位 (WU):一个写入单位定义为每秒最多 1 千字节 (KB) 数据的吞吐量。写入操作是导致插入、更新或删除记录的任何 Oracle NoSQL Database Cloud Service API 调用。NoSQL 表具有写入限制值,该值指定每秒可以使用的写入单位数。索引更新也会消耗写入单位。

    例如,如果记录大小小于 1 KB,则写入操作需要一个 WU。如果记录大小为 1.5 KB,则写入操作需要两个 WU。

  • 读取单位 (Read Unit,RU):对于最终一致的读取操作,一个读取单位定义为每秒最多 1 KB 数据的吞吐量。NoSQL 表具有读取限制值,该值指定每秒可以使用的读取单位数。

    例如,如果记录大小小于 1 KB,则最终一致的读取操作需要一个 RU。如果记录大小为 1.5 KB,则需要两个 RU 执行最终一致的读取操作,四个 RU 执行完全一致的读取操作。

  • 存储容量:一个存储单元是单个千兆字节 (GB) 数据存储。

  • 绝对一致性:返回的数据应为最近写入到数据库的数据。

  • 最终一致性:返回的数据可能不是最近写入到数据库的数据;如果没有对数据进行新的更新,最终对该数据的所有访问都将返回最新的更新值。

注意:

Oracle NoSQL Database Cloud Service 在使用按需容量时自动管理读取和写入容量,以满足动态工作负载的需求。建议验证容量需求是否不超过 On Demand 容量限制。有关详细信息,请参阅 Oracle NoSQL Database Cloud Service 限制

影响能力单位的因素

在预配容量单元之前,务必考虑影响读取、写入和存储容量的以下因素。

  • 记录大小:随着记录大小的增加,写入或读取数据使用的容量单位数也会增加。

  • 数据一致性:绝对一致性读取的成本是最终一致性读取的两倍。

  • 辅助索引:在表中,修改(添加、更新或删除)现有记录时,更新辅助索引会消耗写入单位。写入操作的总预配吞吐量成本是写入到表并更新本地辅助索引时消耗的写入单位总和。

  • 数据建模选择:使用无模式的 JSON,每个文档都可以自我描述,这会使元数据开销增加到记录的整体大小。对于固定方案表,每条记录的开销恰好为 1 个字节。

  • 查询模式:查询操作的成本取决于检索的行数、谓词数、源数据的大小、预测以及是否存在索引。最便宜的查询指定分片键或索引键(带有关联的索引),以便系统能够利用主索引和辅助索引。应用程序可以尝试不同的查询并检查消耗的吞吐量,以帮助优化操作。

现实世界示例:如何估计应用程序工作量

考虑一个电子商务应用程序示例,了解如何估计每秒读取和写入数。在此示例中,Oracle NoSQL Database Cloud Service 用于存储应用程序的产品目录信息。

  1. 确定应用的数据模型(JSON 或固定表)、记录大小和密钥大小。

    假设电子商务应用程序遵循 JSON 数据模型,开发人员创建了一个包含两列的简单表。产品特性和属性的记录标识符(主键)和 JSON 文档。低于 1 KB (0.8 KB) 的 JSON 文档如下所示:

    {
      "additionalFeatures": "Front Facing 1.3MP Camera",
      "os": "Macintosh OS X 10.7", 
      "battery": {      
        "type": "Lithium Ion (Li-Ion) (7000 mAH)",
        "standbytime" : "24 hours" },
      "camera": {    
        "features": ["Flash","Video"],
        "primary": "5.0 megapixels" },
      "connectivity": {
        "bluetooth": "Bluetooth 2.1",
        "cell": "T-mobile HSPA+ @ 2100/1900/AWS/850 MHz",
        "gps": true,
        "infrared": false,
        "wifi": "802.11 b/g" },
      "description": "Apple iBook is the best in class computer
        		for your professional and personal work.",
      "display": {
        "screenResolution": "WVGA (1280 x 968)",
        "screenSize": "13.0 inches" },
      "hardware": {
        "accelerometer": true,
        "audioJack": "3.5mm",
        "cpu": "Intel i7 2.5 GHz",
        "fmRadio": false,
        "physicalKeyboard": false,
        "usb": "USB 3.0" },
      "id": "appleproduct_1",
      "images": ["img/apple-laptop.jpg"],
      "name": "Myshop.com : Apple iBook",
      "sizeAndWeight": {
        "dimensions": [
          "300 mm (w)",
          "300 mm (h)",
          "12.4 mm (d)" ],
        "weight": "1250.0 grams" },
      "storage": {
        "hdd": "750GB",
        "ram": "8GB" }
    }

    假设应用程序具有 100,000 条此类记录,主键的大小约为 20 字节。此外,假设存在使用辅助索引读取记录的查询。例如,查找屏幕大小为 13 英寸的所有记录。因此,将在 screenSize 字段上创建一个索引。

    汇总信息如下:

    每个表的行数 每个表的列数 密钥大小(字节) 以字节为单位的值大小(所有列的总和) 索引 索引密钥大小(字节)

    1

    100000

    2

    20

    1 KB

    1

    20

  2. 确定表的操作列表(通常是 CRUD 操作和索引读取)及其预期速率(每秒)。

    操作 操作数(每秒) 范例

    创建记录。

    3

    创建产品。

    使用主键读取记录。

    200

    使用产品 ID 读取产品详细信息。

    使用辅助索引读取记录。

    1

    提取屏幕大小为 13 英寸的所有产品。

    更新或向记录添加属性。

    5

    更新相机的产品说明

    或者

    添加有关相机重量的信息。

    删除记录。

    5

    删除现有产品。

  3. 确定读取和写入使用量 (KB)。

    操作 假设(如果有) 公式 读取消耗量 (KB) 写入使用量 (KB) 附注/解释
    创建记录。 假设创建记录时不执行任何条件检查(如果存在)。 Record size (rounded to next KB) + 1 KB(index) * (number of indexes) 0 1 KB + 1 KB (1 ) = 2 KB

    记录大小为 1 KB(JSON 列为 0.8 KB,密钥列为 20 字节),有一个大小为 1 KB 的索引。

    如果使用某些选项执行 put 命令,则创建操作会产生读取单位成本。由于需要确保读取的是行的最新版本,因此使用了绝对一致的读取。在这种情况下,您可以在读取单位公式中使用乘数 2。以下是确定读取单位成本的不同选项:
    • 如果使用 Option.IfAbsent 或 Option.IfPresent,则读取消耗量 = 2
    • 如果使用 setReturnRow,则读取消耗量 = 2 * 记录大小
    • 如果使用 Option.IfAbsent 和 setReturnRow,则读取消耗量 = 2 * 记录大小
    使用主键读取记录。   Record size round up to KB 记录大小 = 1 KB 0 记录大小为 1 KB
    使用辅助索引读取记录。 假设返回了 100 条记录。 record_size * number_of_records_matched

    11KB *100 = 100KB

    100 KB + 10 KB = 110 KB

    0

    辅助索引不收费。记录大小为 1 KB。对于 100 条记录,为 100 KB。

    根据返回的批处理数和为查询设置的大小限制,可能发生的可变开销额外增加 10 KB。

    间接费用是读取批中最后一个关键字的成本。这是一个取决于 maxReadKB 和记录大小的变量。开销高达 (numBatches - 1) * 密钥读取成本 (1KB)。

    更新现有记录 假设更新的记录大小与旧记录大小 (1 KB) 相同。 Read consumption = record_size * 2

    Write consumption = original_record_size + new_record_size + 1 KB (index) * (number of writes)

    1 KB * 2 1 KB + 1 KB + 1 KB(1) *(2) = 4 KB

    使用查询(SQL 语句)更新行时,会同时使用读写单位。根据更新,可能需要读取主键、辅助键甚至记录本身。需要绝对一致的读取来保证我们正在读取最近的记录。绝对一致性读取是最终一致性读取成本的两倍。这就是公式中乘以 2 的原因。

    读取使用量:索引和记录大小不收取 1 KB 的费用。如果使用选项 setReturnRow 执行,则读取消耗量 = 2 * 记录大小

    写入使用量:一个索引的原始记录和新记录大小为 1 KB 和 1 KB。

    删除记录   Read consumption = 1 KB (index) * 2

    Write consumption = record_size + 1KB (index) * (number_of_indexes)

    1 KB (1) *2 = 2 KB 1 KB + 1 KB(1) * (1) = 2 KB

    删除操作会导致读取和写入单位成本。由于您必须保证查看行的最新版本,因此将使用绝对一致的读取,这就是在读取单位公式中使用 2 乘数的原因。

    如果使用选项 setReturnRow 执行,则读取消耗量 = 2 * 记录大小。否则,一个索引的读取使用量 = 1KB

    写入使用量:索引的记录大小为 1 KB 和 1 KB。索引数为 1。

    使用步骤 2 和 3 确定应用程序工作负荷的读取和写入单位。

    操作 操作速率 每秒读取数 每秒写入数

    创建记录

    3

    0

    6

    使用主键读取记录

    300

    300

    0

    使用辅助索引读取记录

    10

    1100

    0

    更新现有记录

    5

    10

    20

    删除记录

    1

    2

    2

    读取单位总数: 1412

    写入单位总数: 28

    因此,估计电子商务应用程序的工作负载为每秒 1412 次读取和每秒 28 次写入。下载 Oracle Technology Network 上提供的容量估算器工具,以输入这些值并估计应用的吞吐量和存储量。

注意:

上述计算假定最终一致的读取请求。对于绝对一致性读取请求,操作将消耗两倍的容量单元。因此,读取容量单位为 4844 个读取单位。

估计每月成本

了解如何估算 Oracle Cloud 订阅的每月成本。

当您准备好订购 Oracle Cloud 服务时,Oracle 会为您提供成本估算器,以便在您提交订阅模型或金额之前确定您的每月使用量和成本。

成本估算器根据您输入的读取单位、写入单位和存储量自动计算每月成本。但是,要了解如何计算应用程序的读取和写入单位,请执行以下步骤:

  1. 步骤 1:导航到估计容量主题。使用本主题中介绍的示例和公式估计应用程序工作量。

    步骤 2:从 Oracle Technology Network 下载并使用容量估算器,根据应用程序工作量和数据库操作标准估计应用程序的写入单位、读取单位和存储容量。

  2. 步骤 2:访问 Oracle Cloud 网站上的成本估算器。选中数据管理复选框。滚动以找到 Oracle NoSQL Database Cloud ,然后单击添加以在“配置选项”下为 Oracle NoSQL Database Cloud 添加条目。展开 NoSQL 数据库可查找不同的利用率和配置选项。利用率和配置参数的输入值,用于估计 Oracle Cloud Pay-As-You-GoMonthly Flex 订阅中的 Oracle NoSQL Database Cloud Service 使用成本。

  3. 步骤 3:访问 Oracle Cloud 网站上的成本估算器。在下拉列表中,选择“Data Management(数据管理)”。您可以在数据管理下看到各种选项。滚动以定位 Oracle NoSQL Database Cloud。单击“Add(添加)”在“Configuration Options(配置选项)”下为 Oracle NoSQL Database Cloud 添加一个条目。

  4. 步骤 4:展开数据库 -NoSQL 以查找不同的利用率和配置选项。配置下有两个选项。您可以从“始终免费”选项开始,也可以使用所需的配置预配实例。
    • 第 4a 步:如果需要“Always Free(始终免费)”选项,请在“Configuration(配置)”下展开“Oracle NoSQL Database Cloud - Read(读取)”、“Oracle NoSQL Database Cloud Service - Storage(存储)”和“Oracle NoSQL Database Cloud Service(写入)”,并将“Read(读取、存储)”和“Write(写入)”容量更改为 0。然后,总成本估计显示为 0 ,您可以继续执行始终免费选项。
  5. 步骤 5:或者,如果要预配的读取、写入和存储容量高于“始终免费”中的可用容量,则可以通过在 Database-NoSQL 下输入配置值来执行此操作。
    • 步骤 5a:使用不足时,请勿修改默认值,因为 Oracle NoSQL Database Cloud Service 不使用这些值中的任何一个。
    • 步骤 5 b:在 "Configuration"(配置)下,添加您在上一步中估计的读取单位数、写入单位数和存储容量。成本根据您的输入值进行估计,并显示在页面上。

注意:

如果您使用自动缩放功能,系统将为实时读取和写入单位的实际消耗量生成月末发票。因此,您可能希望在应用中收集自己的审计日志来验证月末计费。建议在每次 API 调用时记录 NoSQL Database Cloud 服务返回的消耗读写单位。您可以使用此数据与来自 Oracle Cloud 计量和计费系统的月末开票数据相关联。

要详细了解可用的不同定价模式,请参阅 NoSQL Database Cloud Service Pricing

全局活动表的成本/开单

“全局有效”表的成本/开单有两个组件。第一个组件是单例表遵循的定价模型,它考虑了每月读取单位数、每月写入单位数和每月 GB 存储容量。第二个组件用于全局活动表的每个区域表副本的复制写入。传入的复制写入将根据所消耗的写入进行计费。