计划您的服务
在创建 Oracle NoSQL Database Cloud Service 服务之前,请花一些时间规划该服务。在开始之前,请思考此处概述的问题并确定要执行的操作。
本文包含以下主题:
开发者概述
全面了解服务架构,选择可满足您的应用开发需求的 SDK/驱动程序。
NDCS 开发人员任务
Oracle NoSQL Database Cloud Service (NDCS) 是一项完全高可用性服务。它专为需要低延迟响应时间、灵活的数据模型和动态工作负载弹性扩展的高要求应用而设计。作为一项完全托管的服务,Oracle 可处理所有管理任务,例如软件升级、安全补丁程序、硬件故障和打补丁。

NoSQL 数据库 SDK/驱动程序—这些 SDK 遵循通用许可协议 (Universal Permissive License,UPL) 许可,可以在 NoSQL Cloud Service 或内部部署数据库中使用。这些是功能齐全的 SDK,并提供丰富的功能。这些驱动程序还可用于针对在其他供应商云中运行的 Oracle NoSQL 集群执行的应用程序。
有关指向 SDK、API 指南和示例的链接,请参阅下表:
-
SDK (GitHub) - 提供有关如何安装、连接和开始使用 SDK 的详细信息
-
API 指南 - 提供 SDK 中提供的程序包、类、方法和接口
-
示例 - 提供您可以试用的代码示例
OCI 控制台 - 提供快速创建表、修改表、删除表、加载数据、快速创建索引、删除索引、基本查询、变更表容量和查看指标的功能。
OCI SDK/驱动程序 - Oracle Cloud Infrastructure 提供了许多软件开发工具包 (SDK),以促进定制解决方案的开发。这些通常在 UPL 下获得许可。
NoSQL Database SDK/Drivers 与 OCI SDK/Drivers 的区别:
OCI SDK 基于 REST。它们易于使用,但功能有限。另一方面,NoSQL 数据库 SDK 提供了丰富的功能集。建议您使用 NoSQL 数据库 SDK,因为这些 SDK 具备以下优势,而非 OCI SDK。
-
可以将 NoSQL 数据库 SDK 用于连接到云服务、内部部署数据存储和 NoSQL 云模拟器的应用。
-
NoSQL 数据库 SDK 提供了更加丰富的开发体验。它们支持 REST 不支持的更多 SQL 功能。
-
您可以将第三方实施(如 Jakarta NoSQL 或 Eclipse TopLink)与 NoSQL 数据库 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 | 在托管环境中不允许/不需要 |
| 更改预配模式 | 表 | 将表的预配模式从“已预配”更改为“按需”,反之亦然。 | 每天只能更改一次。 | 不适用 |
| 最大表数 | 区域 | 最大表数。 | 30 | 这可以使用请求服务限制更新进行自定义 |
| 最大列数 | 表 | 最大列数。 | 50 | 这可以使用请求服务限制更新进行自定义 |
| 最大表方案更新数 | 表 | 表方案更新的最大数量。 | 100 | 这可以使用请求服务限制更新进行自定义 |
| 最大索引数量 | 表 | 最大索引数。 | 5 | 这可以使用请求服务限制更新进行自定义 |
| 吞吐量和存储限制的最大更改数 | 表 | 吞吐量和存储限制的最大更改数。 | Oracle 允许:
|
这可以使用请求服务限制更新进行自定义 |
| 索引名称 | 指数 | 最大字符数、允许的字符数和初始字符数。 | 索引名称最多可以有 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 允许:
Oracle 允许在每个租户中实现 5-TB 的最大存储大小。该区域可以具有存储大小为 5 TB 的单个表,在这种情况下,该区域无法创建另一个表。或者拥有多个表,并确保所有这些表中的数据都位于 5 TB 的最大存储大小范围内。 |
420,000 个写入单元,280,000 个读取单元,17.5 TB 存储 |
估计能力
了解如何估算 Oracle NoSQL Database Cloud Service 的吞吐量和存储容量。
计算背后的基本信息
在学习如何估计服务的吞吐量和存储之前,让我们查看吞吐量和存储单元定义。
-
Write Unit,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 字节。
-
查询模式:查询操作的成本取决于检索的行数、谓词数、源数据的大小、预测以及是否存在索引。最便宜的查询指定分片键或索引键(带有关联的索引),以允许系统利用主索引和辅助索引。应用程序可以尝试不同的查询,并检查消耗的吞吐量以帮助优化操作。
Real World 示例:如何估计应用工作量
以电子商务应用程序为例,了解如何估计每秒的读取数和写入数。在此示例中,Oracle NoSQL Database Cloud Service 用于存储应用程序的产品目录信息。
-
确定应用的数据模型(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 -
确定表上的操作列表(通常为 CRUD 操作和索引读取),以及它们预期的速率(每秒)。
操作 操作数(每秒) 范例 创建记录 3 创建产品。 使用主键读取记录。 200 使用产品 ID 读取产品详细信息。 使用辅助索引读取记录。 1 获取屏幕大小为 13 英寸的所有产品。 更新属性或将属性添加到记录中。 5 更新相机的产品说明
或者
添加有关相机重量的信息。
删除记录 5 删除现有产品。 -
确定读写消耗量(以 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_matched11KB *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 * 2Write consumption = original_record_size + new_record_size + 1 KB (index) * (number of writes)1 KB * 2 1 KB + 1 KB + 1KB(1) *(2) = 4 KB 使用 query(SQL 语句)更新行时,会同时使用读取单位和写入单位。根据更新,可能需要读取主键、辅助键,甚至记录本身。需要绝对一致的读取,以保证我们正在阅读最新的记录。绝对一致性读数是最终一致性读数成本的两倍。这就是公式中乘以 2 的原因。
读取消耗量:索引和记录大小为 1 KB 不收取费用。如果使用选项 setReturnRow 执行,则读取消耗量 = 2 * 记录大小
写入消耗量:一个索引的原始记录大小和新记录大小为 1 KB 和 1KB。
删除录音 Read consumption = 1 KB (index) * 2Write 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 次写入。下载 Capacity Estimator
注:上述计算假定最终一致的读取请求。对于绝对一致性读取请求,该操作消耗容量单位的两倍。因此,读取容量单位为 4844 读取单位。
估计每月成本
了解如何估算 Oracle Cloud 订阅的每月成本。
当您准备好订购 Oracle Cloud 服务时,Oracle 会为您提供一个成本估算器,在您提交订阅模式或金额之前,先计算每月使用量和成本。
成本估算器会根据您输入的读取单位数、写入单位数和存储量自动计算每月成本。但是,要了解如何计算应用程序的读写单位,请执行以下步骤:
-
步骤 1:导航至估计能力主题。使用本主题中介绍的示例和公式估算应用程序工作量。
从 Oracle Technology Network 下载并使用 Capacity Estimator ,根据应用工作负载和数据库操作标准来估计应用的写入单位、读取单位和存储容量。
-
第 2 步:访问 Oracle Cloud 网站上的成本估算器。选中数据管理复选框。滚动浏览以查找 Oracle NoSQL Database Cloud ,然后选择添加以在“配置选项”下为 Oracle NoSQL Database Cloud 添加条目。展开 NoSQL Database 以查找不同的利用率和配置选项。利用率和配置参数的输入值,用于估算 Oracle Cloud Pay-As-Go 和月计服务订阅中 Oracle NoSQL Database Cloud Service 使用的成本。
-
第 3 步:访问 Oracle Cloud 网站上的成本估算器。在下拉列表中选择“Data Management(数据管理)”。您会看到“Data Management(数据管理)”下显示的各种选项。滚动浏览以查找 Oracle NoSQL Database Cloud。单击“Add(添加)”在“Configuration Options(配置选项)”下为 Oracle NoSQL Database Cloud 添加一个条目。
-
第 4 步:展开“Database(数据库)”-“NoSQL”以查找不同的利用率和配置选项。“Configuration(配置)”下有两个选项。您可以从“始终免费”选项(仅在 Phoenix 区域中可用)开始,也可以为实例预配所需的配置。
- 步骤 4a:如果需要“Always Free(始终免费)”选项,请在“Configuration(配置)”下展开“Oracle NoSQL Database Cloud - Read(Oracle NoSQL 数据库云 - Read(读取)”、“Oracle NoSQL Database Cloud Service - Storage(Oracle NoSQL 数据库云服务)”和“Oracle NoSQL Database Cloud Service - Write(Oracle NoSQL 数据库云服务 - 写入)”,并将读取、存储和写入容量更改为 0。然后,您的总成本估计显示为 0 ,您可以继续执行始终免费选项。
-
步骤 5:或者,如果要预配的读取、写入和存储容量高于“始终免费”中的容量,则可以通过在 Database-NoSQL 下输入配置值来执行此操作。
-
步骤 5a:在“利用率”下,请勿修改默认值,因为 Oracle NoSQL Database Cloud Service 不使用这些值中的任何值。
-
步骤 5b:在“Configuration(配置)”下,添加您在上一步中估计的读取单位数、写入单位数和存储容量。成本是根据输入值估算的,并显示在页面上。
-
注:如果您使用自动缩放功能,系统将在月末生成发票,以便实时实际消耗读写单位。因此,您可能希望在应用中收集自己的审计日志,以验证月末计费。建议在每次 API 调用时记录 NoSQL Database Cloud 服务返回的已用读写单元。您可以使用此数据与来自 Oracle Cloud 计量和计费系统的月末开票数据相关联。
要详细了解可用的不同定价模式,请参阅 NoSQL Database Cloud Service 定价。
全局有效表的成本/开单
“全局活动”表的成本/开单包含两个组件。第一个组件是单例表的定价模型,该模型考虑了每月读取单位数、每月写入单位数和每月千兆字节 (GB) 存储容量。第二个组件是针对全局活动表的每个区域表副本的复制写入。传入复制写入将根据使用的写入数计费。