{"id":896,"date":"2026-04-16T14:39:59","date_gmt":"2026-04-16T14:39:59","guid":{"rendered":"https:\/\/www.devopsschool.com\/tutorials\/oracle-cloud-nosql-database-tutorial-architecture-pricing-use-cases-and-hands-on-guide-for-data-management\/"},"modified":"2026-04-16T14:39:59","modified_gmt":"2026-04-16T14:39:59","slug":"oracle-cloud-nosql-database-tutorial-architecture-pricing-use-cases-and-hands-on-guide-for-data-management","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/tutorials\/oracle-cloud-nosql-database-tutorial-architecture-pricing-use-cases-and-hands-on-guide-for-data-management\/","title":{"rendered":"Oracle Cloud NoSQL Database Tutorial: Architecture, Pricing, Use Cases, and Hands-On Guide for Data Management"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Category<\/h2>\n\n\n\n<p>Data Management<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Introduction<\/h2>\n\n\n\n<p>Oracle Cloud <strong>NoSQL Database<\/strong> is a fully managed, schema-flexible database service designed for applications that need predictable low latency, elastic throughput, and simple key-value or document-style access patterns without operating database servers.<\/p>\n\n\n\n<p>In simple terms: you create a table, define a primary key, choose how much read\/write capacity you want, and then your application reads\/writes data using SDKs, APIs, or query statements\u2014while Oracle Cloud Infrastructure (OCI) handles patching, scaling (within chosen limits), and high availability.<\/p>\n\n\n\n<p>Technically, NoSQL Database in Oracle Cloud (often referred to in Oracle documentation as <strong>Oracle NoSQL Database Cloud Service<\/strong>) is a managed NoSQL datastore built around <strong>tables<\/strong>, <strong>primary\/shard keys<\/strong>, <strong>optional secondary indexes<\/strong>, and a <strong>SQL-like query language<\/strong> for working with structured and semi-structured data. It integrates with core OCI controls such as <strong>IAM policies<\/strong>, <strong>compartments<\/strong>, <strong>Audit<\/strong>, and <strong>Monitoring<\/strong>.<\/p>\n\n\n\n<p>The main problem it solves is: <strong>storing and retrieving high-volume operational data with predictable performance<\/strong> (for example, user sessions, device telemetry, shopping carts, profiles, feature flags, and event metadata) without the operational overhead of running and scaling a database cluster yourself.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. What is NoSQL Database?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Official purpose<\/h3>\n\n\n\n<p>Oracle Cloud <strong>NoSQL Database<\/strong> is OCI\u2019s managed NoSQL offering for building modern applications that need:\n&#8211; Low-latency reads\/writes\n&#8211; Horizontal scalability through partitioning\/sharding\n&#8211; Flexible data modeling (records\/rows can contain nested JSON-like structures depending on API usage)\n&#8211; Managed operations with OCI-native governance<\/p>\n\n\n\n<p>You\u2019ll see the service referenced as <strong>NoSQL Database<\/strong> in the OCI Console, while Oracle marketing and documentation may use <strong>Oracle NoSQL Database Cloud Service<\/strong>. Treat these as the same OCI service; verify naming in the latest OCI Console and docs for your region.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Core capabilities (what it does)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create and manage <strong>NoSQL tables<\/strong><\/li>\n<li>Insert, update, retrieve, delete records by key<\/li>\n<li>Query records using a SQL-like query language (capabilities depend on API\/SDK)<\/li>\n<li>Configure capacity\/limits (read units, write units, storage) as supported by the service<\/li>\n<li>Add secondary indexes for additional query patterns (where supported)<\/li>\n<li>Apply time-to-live (TTL) patterns (where supported) for automatic expiry<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Major components<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Tenancy<\/strong>: Your OCI account boundary.<\/li>\n<li><strong>Region<\/strong>: NoSQL Database resources are created in an OCI region.<\/li>\n<li><strong>Compartment<\/strong>: Resource organization and access control boundary.<\/li>\n<li><strong>Table<\/strong>: Primary data container.<\/li>\n<li><strong>Primary key \/ shard key<\/strong>: Determines uniqueness and distribution.<\/li>\n<li><strong>Indexes<\/strong>: Optional, to support non-key query patterns (verify supported index types in official docs).<\/li>\n<li><strong>SDK\/CLI\/API<\/strong>: Application access methods (Java, Python, Node.js, Go, REST\u2014availability varies; verify in official SDK docs).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Service type<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Fully managed NoSQL database service<\/strong> (managed control plane and data plane).<\/li>\n<li>Typically used as an <strong>operational database<\/strong> (OLTP-style access patterns), not as an analytics warehouse.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Scope: regional\/global\/zonal and account\/project boundaries<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Regional<\/strong>: Tables are created in a specific OCI region.<\/li>\n<li><strong>Tenancy-scoped governance<\/strong>: Access is controlled through OCI IAM at tenancy\/compartment scope.<\/li>\n<li><strong>Compartment-scoped resources<\/strong>: Tables live in compartments for lifecycle and policy control.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">How it fits into the Oracle Cloud ecosystem<\/h3>\n\n\n\n<p>NoSQL Database is part of OCI\u2019s <strong>Data Management<\/strong> portfolio and commonly integrates with:\n&#8211; <strong>OCI IAM<\/strong> for authentication\/authorization\n&#8211; <strong>OCI Monitoring<\/strong> for metrics and alarms\n&#8211; <strong>OCI Audit<\/strong> for recording administrative API calls\n&#8211; <strong>VCNs + Service Gateway<\/strong> to access OCI services privately from private subnets (where applicable)\n&#8211; <strong>OCI Functions<\/strong>, <strong>API Gateway<\/strong>, <strong>Container Engine for Kubernetes (OKE)<\/strong>, and compute instances for application runtimes\n&#8211; <strong>OCI Streaming<\/strong> and <strong>Object Storage<\/strong> for event ingestion and archival patterns (integration often implemented at the application layer; verify official reference architectures)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Why use NoSQL Database?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Business reasons<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Faster time-to-market: reduce operational burden (no cluster management, patching, or replication setup handled by your team).<\/li>\n<li>Predictable performance for customer-facing apps (low-latency reads\/writes matter more than complex joins).<\/li>\n<li>Better alignment of cost with throughput demand (capacity-based pricing is common; confirm the model for your region).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Technical reasons<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fits key-value\/document workloads naturally (session state, profiles, IoT device state).<\/li>\n<li>Encourages application-driven data modeling (denormalized, query-by-access-pattern).<\/li>\n<li>Supports very high request rates with low latency when keys are well-designed and capacity is correctly provisioned.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Operational reasons<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Managed HA characteristics (service handles infrastructure redundancy within the region\u2014verify details in official docs).<\/li>\n<li>Tight OCI integration: compartments, IAM policies, tags, audit trails, and monitoring.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Security\/compliance reasons<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Integrates with OCI IAM policies and compartments for least-privilege access.<\/li>\n<li>Uses encryption controls expected of OCI managed services (at-rest and in-transit; verify specifics in the security documentation).<\/li>\n<li>OCI Audit provides governance visibility for administrative actions.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Scalability\/performance reasons<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Designed for horizontal scaling using shard\/partition keys.<\/li>\n<li>Predictable latency for key-based operations.<\/li>\n<li>Capacity controls allow you to plan throughput and reduce \u201cnoisy neighbor\u201d effects.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">When teams should choose it<\/h3>\n\n\n\n<p>Choose Oracle Cloud NoSQL Database when:\n&#8211; Your access patterns are known and mostly key-based.\n&#8211; You need low latency and high throughput at scale.\n&#8211; You want a managed NoSQL service integrated with OCI governance.\n&#8211; You can design a good shard\/partition key and avoid heavy cross-partition queries.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">When teams should not choose it<\/h3>\n\n\n\n<p>Avoid (or re-check fit) if:\n&#8211; You need complex relational joins, multi-table transactions, or ad hoc analytics queries (consider Oracle Autonomous Database).\n&#8211; Your query patterns are unpredictable and require flexible multi-field querying without careful indexing.\n&#8211; You need advanced full-text search (consider a search service or OpenSearch\/Elasticsearch patterns).\n&#8211; You require multi-region active-active behavior and can\u2019t confirm NoSQL Database supports it for your use case (verify in official docs).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Where is NoSQL Database used?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Industries<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Retail\/e-commerce: carts, product personalization, sessions<\/li>\n<li>Financial services: user\/device state, fraud feature lookups (not typically system of record ledgers)<\/li>\n<li>Gaming: player profiles, inventory, matchmaking metadata<\/li>\n<li>Telecom: subscriber\/device state and configuration<\/li>\n<li>SaaS: tenant metadata, feature flags, rate-limiting counters<\/li>\n<li>IoT\/manufacturing: device telemetry pointers, digital twin state snapshots<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Team types<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Application developers building APIs and microservices<\/li>\n<li>Platform teams standardizing operational datastores<\/li>\n<li>DevOps\/SRE teams needing managed services with strong IAM\/monitoring<\/li>\n<li>Security teams needing compartment-based governance and auditability<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Workloads<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>High-volume OLTP-style workloads (reads\/writes by key)<\/li>\n<li>Event metadata storage (store pointers\/aggregates; keep bulk events in Object Storage)<\/li>\n<li>User state\/session storage<\/li>\n<li>Configuration and feature flagging<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Architectures<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Microservices on OKE or Compute calling NoSQL Database directly via SDK<\/li>\n<li>API Gateway \u2192 Functions \u2192 NoSQL Database for serverless APIs<\/li>\n<li>Streaming ingestion pipelines where consumers write state to NoSQL Database<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Real-world deployment contexts<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Production: capacity provisioned based on SLOs, alarms on throttling, strong IAM controls, and private networking patterns where feasible<\/li>\n<li>Dev\/test: smaller table limits, shorter TTLs, ephemeral environments and automated cleanup<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">5. Top Use Cases and Scenarios<\/h2>\n\n\n\n<p>Below are realistic scenarios where Oracle Cloud NoSQL Database is commonly a strong fit. Each assumes you model data around access patterns and keys.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\n<p><strong>User Session Store<\/strong>\n   &#8211; <strong>Problem:<\/strong> Maintain login sessions and refresh tokens with fast lookups.\n   &#8211; <strong>Why this fits:<\/strong> Key-based reads\/writes with predictable latency; TTL patterns can expire sessions automatically (verify TTL support).\n   &#8211; <strong>Example:<\/strong> <code>sessionId<\/code> as shard key; store userId, issuedAt, scopes.<\/p>\n<\/li>\n<li>\n<p><strong>Shopping Cart Service<\/strong>\n   &#8211; <strong>Problem:<\/strong> Persist carts reliably during user browsing spikes.\n   &#8211; <strong>Why this fits:<\/strong> High write\/read throughput during peak traffic; schema flexibility for cart items.\n   &#8211; <strong>Example:<\/strong> Key by <code>(tenantId, userId)<\/code>; record contains item list and pricing snapshot.<\/p>\n<\/li>\n<li>\n<p><strong>Device Digital Twin State<\/strong>\n   &#8211; <strong>Problem:<\/strong> Track the latest known state of millions of devices.\n   &#8211; <strong>Why this fits:<\/strong> \u201cLast write wins\u201d state updates are common; reads are by deviceId.\n   &#8211; <strong>Example:<\/strong> <code>deviceId<\/code> shard key; store lastSeen, firmware, desiredConfig.<\/p>\n<\/li>\n<li>\n<p><strong>Feature Flags and Remote Config<\/strong>\n   &#8211; <strong>Problem:<\/strong> Serve configuration at runtime with very low latency.\n   &#8211; <strong>Why this fits:<\/strong> Frequent reads, occasional writes; low operational overhead.\n   &#8211; <strong>Example:<\/strong> Key by <code>(appId, flagName)<\/code>; store rules and rollout percentages.<\/p>\n<\/li>\n<li>\n<p><strong>Rate Limiting \/ Quota Counters<\/strong>\n   &#8211; <strong>Problem:<\/strong> Enforce API quotas per tenant\/user in near real time.\n   &#8211; <strong>Why this fits:<\/strong> Simple get\/update patterns; can be implemented with atomic update patterns (verify transaction\/atomic features).\n   &#8211; <strong>Example:<\/strong> Key by <code>(tenantId, windowStart)<\/code>; store counters per API.<\/p>\n<\/li>\n<li>\n<p><strong>User Profile and Preferences<\/strong>\n   &#8211; <strong>Problem:<\/strong> Store semi-structured preferences that evolve frequently.\n   &#8211; <strong>Why this fits:<\/strong> Flexible schema; low-latency reads for personalization.\n   &#8211; <strong>Example:<\/strong> Key by <code>userId<\/code>; record contains notification settings, UI preferences.<\/p>\n<\/li>\n<li>\n<p><strong>Order Status Read Model (CQRS)<\/strong>\n   &#8211; <strong>Problem:<\/strong> Fast read model for order tracking, separate from write-heavy order system.\n   &#8211; <strong>Why this fits:<\/strong> Denormalized read model; optimized for key and time-range patterns (index\/time modeling required).\n   &#8211; <strong>Example:<\/strong> Key by <code>(customerId, orderId)<\/code>; record contains current state and last update.<\/p>\n<\/li>\n<li>\n<p><strong>Metadata Store for Object Storage \/ Data Lake<\/strong>\n   &#8211; <strong>Problem:<\/strong> Maintain metadata for files\/events stored in Object Storage.\n   &#8211; <strong>Why this fits:<\/strong> Fast metadata lookups; bulk payload stays in cheaper storage.\n   &#8211; <strong>Example:<\/strong> Key by <code>(datasetId, objectName)<\/code>; store schema version, tags, checksums.<\/p>\n<\/li>\n<li>\n<p><strong>Multi-tenant SaaS Tenant Registry<\/strong>\n   &#8211; <strong>Problem:<\/strong> Track tenant settings, plan, limits, routing.\n   &#8211; <strong>Why this fits:<\/strong> Strong key lookups, predictable latency for every request.\n   &#8211; <strong>Example:<\/strong> Key by <code>tenantId<\/code>; store planTier, region, feature entitlements.<\/p>\n<\/li>\n<li>\n<p><strong>Idempotency Key Store<\/strong>\n   &#8211; <strong>Problem:<\/strong> Prevent duplicate processing of API requests.\n   &#8211; <strong>Why this fits:<\/strong> Key existence checks and conditional writes (verify conditional put support).\n   &#8211; <strong>Example:<\/strong> Key by <code>(tenantId, idempotencyKey)<\/code>; store request hash and response pointer.<\/p>\n<\/li>\n<li>\n<p><strong>Leaderboard Snapshot Cache<\/strong>\n   &#8211; <strong>Problem:<\/strong> Serve precomputed leaderboard segments quickly.\n   &#8211; <strong>Why this fits:<\/strong> Hot reads, periodic batch writes.\n   &#8211; <strong>Example:<\/strong> Key by <code>(gameId, seasonId, segment)<\/code>; store top N scores.<\/p>\n<\/li>\n<li>\n<p><strong>Edge\/Regional Cache Backing Store<\/strong>\n   &#8211; <strong>Problem:<\/strong> Provide a durable, fast store behind regional caches.\n   &#8211; <strong>Why this fits:<\/strong> Predictable throughput; simple data model; durability within the region.\n   &#8211; <strong>Example:<\/strong> Key by cacheKey; store payload and expiry metadata.<\/p>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">6. Core Features<\/h2>\n\n\n\n<blockquote>\n<p>Feature availability can vary by region, API type, or service version. Always verify in the official OCI NoSQL Database documentation.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">6.1 Managed tables with capacity\/limits<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> Lets you create tables and define throughput and storage limits (commonly read units, write units, and storage in GB).<\/li>\n<li><strong>Why it matters:<\/strong> Predictable performance and cost; prevents runaway consumption.<\/li>\n<li><strong>Practical benefit:<\/strong> You can set a low-cost dev table and a larger production table aligned to SLOs.<\/li>\n<li><strong>Caveat:<\/strong> Mis-sized capacity can cause throttling or higher cost. Monitor and adjust.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6.2 Primary key + shard\/partition key modeling<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> Uses a primary key (often including a shard\/partition key) to distribute data and route requests efficiently.<\/li>\n<li><strong>Why it matters:<\/strong> Key design is the biggest determinant of performance and scalability.<\/li>\n<li><strong>Practical benefit:<\/strong> Even distribution avoids hot partitions; consistent low latency.<\/li>\n<li><strong>Caveat:<\/strong> Poor shard key choice can create hot spots and throttling.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6.3 SQL-like query language (NoSQL query)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> Enables selecting and filtering records beyond simple key gets, depending on indexes and supported query features.<\/li>\n<li><strong>Why it matters:<\/strong> Reduces the need for external query engines for common operational queries.<\/li>\n<li><strong>Practical benefit:<\/strong> You can build admin screens and API list endpoints.<\/li>\n<li><strong>Caveat:<\/strong> Non-key queries can be expensive and may require indexing; avoid unbounded scans in production.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6.4 Secondary indexes (where supported)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> Adds indexes on non-primary-key fields to support additional query patterns.<\/li>\n<li><strong>Why it matters:<\/strong> Enables efficient lookups by attributes (email, status, timestamps).<\/li>\n<li><strong>Practical benefit:<\/strong> Faster queries without full table scans.<\/li>\n<li><strong>Caveat:<\/strong> Indexes add write overhead and can increase storage consumption.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6.5 JSON\/semi-structured record support (API-dependent)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> Allows records to contain nested structures (commonly via SDK types or JSON payload fields).<\/li>\n<li><strong>Why it matters:<\/strong> Supports evolving schemas and flexible attributes.<\/li>\n<li><strong>Practical benefit:<\/strong> Add new fields without heavyweight migrations.<\/li>\n<li><strong>Caveat:<\/strong> Uncontrolled schema growth can create operational complexity and unpredictable query costs.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6.6 Consistency options (service\/SDK dependent)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> Many NoSQL systems offer tuning between latency and consistency (for example eventual vs strong\/absolute reads).<\/li>\n<li><strong>Why it matters:<\/strong> Some workloads (auth\/session validation) may require stronger consistency guarantees.<\/li>\n<li><strong>Practical benefit:<\/strong> Choose the right tradeoff per call.<\/li>\n<li><strong>Caveat:<\/strong> Stronger consistency can increase latency and cost.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6.7 TTL and data lifecycle controls (where supported)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> Automatically expires records after a defined period.<\/li>\n<li><strong>Why it matters:<\/strong> Prevents unbounded growth for ephemeral datasets (sessions, idempotency keys).<\/li>\n<li><strong>Practical benefit:<\/strong> Lower storage cost and simpler cleanup.<\/li>\n<li><strong>Caveat:<\/strong> TTL behavior and granularity should be validated; do not assume hard real-time deletion.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6.8 OCI-native governance: compartments, tags, IAM<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> Uses OCI compartments and IAM policies to control who can manage tables and access data.<\/li>\n<li><strong>Why it matters:<\/strong> Enterprise-grade separation of duties and least privilege.<\/li>\n<li><strong>Practical benefit:<\/strong> Separate dev\/test\/prod compartments; use tags for cost allocation.<\/li>\n<li><strong>Caveat:<\/strong> Over-broad policies are a common security mistake.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6.9 Observability via OCI Monitoring and Audit<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>What it does:<\/strong> Publishes metrics for performance\/capacity and emits audit logs for API operations.<\/li>\n<li><strong>Why it matters:<\/strong> You need to detect throttling, errors, or unexpected activity.<\/li>\n<li><strong>Practical benefit:<\/strong> Alerts when consumption approaches provisioned limits.<\/li>\n<li><strong>Caveat:<\/strong> Application-level tracing\/logging still needs to be implemented by you.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">7. Architecture and How It Works<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">High-level service architecture<\/h3>\n\n\n\n<p>At a high level:\n&#8211; Your application authenticates using OCI IAM (user principals, instance principals, workload identity, etc.).\n&#8211; The application calls NoSQL Database endpoints in a region using SDK\/CLI\/REST.\n&#8211; The service routes requests based on table and key\/shard design.\n&#8211; Metrics and audit events are emitted to OCI Monitoring and OCI Audit.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Request\/data\/control flow<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Control plane:<\/strong> Create\/update\/delete tables, manage limits\/capacity, define indexes. This is typically done via Console\/CLI\/API and recorded in OCI Audit.<\/li>\n<li><strong>Data plane:<\/strong> Read\/write\/query operations performed by applications via SDK or REST. Your application must handle retries\/backoff for throttling or transient issues.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Integrations with related services (common patterns)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Compute \/ OKE \/ Functions:<\/strong> Run microservices that call NoSQL Database.<\/li>\n<li><strong>API Gateway:<\/strong> Front-door for REST APIs; backends call NoSQL Database.<\/li>\n<li><strong>VCN + Service Gateway:<\/strong> Keep traffic from private subnets to OCI services off the public internet (verify NoSQL Database service endpoint support for Service Gateway in your region).<\/li>\n<li><strong>Vault:<\/strong> Store credentials\/secrets where needed (though OCI-native auth often reduces secret usage).<\/li>\n<li><strong>Monitoring + Alarms:<\/strong> Alert on throttling, high latency, or near-capacity usage.<\/li>\n<li><strong>Audit:<\/strong> Track administrative changes and access patterns at the API level.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Dependency services<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OCI IAM (authentication + authorization)<\/li>\n<li>OCI compartments (resource scoping)<\/li>\n<li>OCI networking (if using private access patterns)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Security\/authentication model (typical)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Administrative operations: controlled by IAM policies (<code>nosql-family<\/code> permissions).<\/li>\n<li>Application access: typically via OCI SDK using a principal (instance principal, resource principal, or user principal).<\/li>\n<li>Fine-grained data access patterns may exist, but you should verify the current support model in official docs.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Networking model<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Access is typically via OCI service endpoints in-region.<\/li>\n<li>To avoid public internet exposure from private subnets, many OCI architectures use a <strong>Service Gateway<\/strong> to reach OCI services through the Oracle Services Network (validate NoSQL Database support in your region).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Monitoring\/logging\/governance considerations<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use <strong>Monitoring<\/strong> metrics + alarms for:<\/li>\n<li>Throttles \/ rate limiting<\/li>\n<li>Read\/write unit consumption vs limits<\/li>\n<li>Error rates and latency (metrics depend on service)<\/li>\n<li>Use <strong>Audit<\/strong> to track:<\/li>\n<li>Table creation\/deletion<\/li>\n<li>Policy-impacting actions<\/li>\n<li>Administrative updates<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Simple architecture diagram (Mermaid)<\/h4>\n\n\n\n<pre><code class=\"language-mermaid\">flowchart LR\n  A[App \/ Script] --&gt;|SDK \/ REST| N[Oracle Cloud NoSQL Database\\n(Region)]\n  A --&gt; I[OCI IAM]\n  N --&gt; M[OCI Monitoring]\n  N --&gt; AU[OCI Audit]\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Production-style architecture diagram (Mermaid)<\/h4>\n\n\n\n<pre><code class=\"language-mermaid\">flowchart TB\n  subgraph VCN[OCI VCN]\n    subgraph PrivateSubnets[Private Subnets]\n      OKE[OKE \/ Microservices]\n      FN[OCI Functions\\n(optional)]\n    end\n    SG[Service Gateway]\n  end\n\n  APIGW[OCI API Gateway] --&gt; OKE\n  APIGW --&gt; FN\n\n  OKE --&gt;|IAM principal| IAM[OCI IAM]\n  FN --&gt;|Resource principal| IAM\n\n  OKE --&gt;|Private access via SG (if supported)| SG --&gt; NOSQL[NoSQL Database\\n(Regional Service)]\n  FN --&gt; NOSQL\n\n  NOSQL --&gt; MON[OCI Monitoring\\nMetrics\/Alarms]\n  NOSQL --&gt; AUD[OCI Audit\\nAdmin events]\n\n  OKE --&gt; LOG[App Logs \/ Tracing\\n(OCI Logging or 3rd party)]\n  FN --&gt; LOG\n\n  VAULT[OCI Vault\\n(Secrets\/Keys)] -. optional .- OKE\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">8. Prerequisites<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">OCI account\/tenancy requirements<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>An active <strong>Oracle Cloud (OCI) tenancy<\/strong><\/li>\n<li>Access to an OCI region where <strong>NoSQL Database<\/strong> is available (check regional availability in official docs)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Permissions \/ IAM roles<\/h3>\n\n\n\n<p>You need permissions to:\n&#8211; Create\/manage tables in a compartment\n&#8211; Use the service from your application identity<\/p>\n\n\n\n<p>A common starting policy for a lab (tighten for production):<\/p>\n\n\n\n<pre><code class=\"language-text\">Allow group &lt;your-group-name&gt; to manage nosql-family in compartment &lt;your-compartment-name&gt;\n<\/code><\/pre>\n\n\n\n<p>If you are using Cloud Shell, your user still needs permissions in IAM to manage NoSQL Database.<\/p>\n\n\n\n<blockquote>\n<p>Production tip: Separate \u201ctable administrators\u201d from \u201capplication runtime identities\u201d and grant least privilege.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Billing requirements<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A billable OCI account or eligible Free Tier (if NoSQL Database is included in your tenancy\u2019s Free Tier offering in your region\u2014<strong>verify in official Free Tier docs<\/strong>).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Tools needed (choose one path)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>OCI Console<\/strong> (browser)<\/li>\n<li><strong>OCI Cloud Shell<\/strong> (recommended for labs)<\/li>\n<li><strong>OCI CLI<\/strong> (if working locally)<\/li>\n<li><strong>One SDK<\/strong> (Python used in this tutorial)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Region availability<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Not every OCI service is available in every region. Verify service availability:<\/li>\n<li>OCI documentation and region\/service availability pages (official)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Quotas\/limits<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Check OCI <strong>Service Limits<\/strong> for NoSQL Database:<\/li>\n<li>Max tables per tenancy\/compartment<\/li>\n<li>Max read\/write units per table<\/li>\n<li>Max storage per table<\/li>\n<li>Any request size limits<\/li>\n<li>In Console: <strong>Governance &amp; Administration \u2192 Limits, Quotas and Usage<\/strong><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Prerequisite services (optional but common)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>VCN + Service Gateway (for private subnet access patterns)<\/li>\n<li>OCI Monitoring (enabled by default in OCI)<\/li>\n<li>OCI Audit (enabled by default in OCI)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">9. Pricing \/ Cost<\/h2>\n\n\n\n<blockquote>\n<p>Do not rely on blog posts for pricing. Always confirm on Oracle\u2019s official pricing pages because SKUs and units can change by region and over time.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Current pricing model (how you are billed)<\/h3>\n\n\n\n<p>Oracle Cloud NoSQL Database pricing is typically based on <strong>provisioned capacity and storage<\/strong>, commonly including:\n&#8211; <strong>Read throughput units<\/strong> (or similar read capacity dimension)\n&#8211; <strong>Write throughput units<\/strong> (or similar write capacity dimension)\n&#8211; <strong>Storage (GB-month)<\/strong><\/p>\n\n\n\n<p>Some managed NoSQL services also offer <strong>on-demand<\/strong> request-based billing modes; if you see this option in your OCI Console for NoSQL Database, validate how it is priced in the official pricing documentation for your region.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Pricing dimensions to expect<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Provisioned read capacity (units\/hour or units\/month)<\/li>\n<li>Provisioned write capacity (units\/hour or units\/month)<\/li>\n<li>Storage used by table data and indexes (GB-month)<\/li>\n<li>Backups\/snapshots (if offered\/used; verify)<\/li>\n<li>Data transfer (usually charged when crossing regions or leaving OCI; see below)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Free tier (if applicable)<\/h3>\n\n\n\n<p>OCI has an Always Free\/Free Tier program, but service inclusion varies.\n&#8211; <strong>Verify<\/strong> NoSQL Database Free Tier eligibility here:\n  &#8211; OCI Free Tier: https:\/\/www.oracle.com\/cloud\/free\/<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cost drivers (what increases your bill)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Higher provisioned read\/write capacity<\/li>\n<li>Large storage footprints, especially with indexes<\/li>\n<li>Inefficient access patterns that increase read units (scans, poorly selective queries)<\/li>\n<li>Multi-environment duplication (dev\/test\/prod tables)<\/li>\n<li>Cross-region traffic (if your app and NoSQL table are in different regions)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Hidden or indirect costs<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Networking costs<\/strong>:<\/li>\n<li>Data egress to the internet (varies)<\/li>\n<li>Inter-region data transfer (often billable)<\/li>\n<li><strong>Compute costs<\/strong>:<\/li>\n<li>OKE nodes \/ Compute instances \/ Functions invocations that use the database<\/li>\n<li><strong>Observability costs<\/strong>:<\/li>\n<li>Logging ingestion and retention if you push detailed logs<\/li>\n<li><strong>Backups\/export costs<\/strong> (if you implement exports to Object Storage)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Network\/data transfer implications<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Keep application compute and NoSQL Database in the <strong>same region<\/strong> to minimize latency and avoid inter-region data transfer charges.<\/li>\n<li>Use VCN private access patterns (Service Gateway) to reduce public internet exposure; pricing impact is mostly about data transfer rather than routing method.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">How to optimize cost<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Right-size read\/write units; monitor throttles and utilization.<\/li>\n<li>Use TTL for ephemeral datasets (if supported).<\/li>\n<li>Minimize secondary indexes; index only what you query.<\/li>\n<li>Avoid table scans; design keys and access patterns carefully.<\/li>\n<li>Separate dev\/test and apply automation to delete unused tables.<\/li>\n<li>Consider storing large blobs in <strong>Object Storage<\/strong> and only metadata\/pointers in NoSQL Database.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Example low-cost starter estimate (no fabricated numbers)<\/h3>\n\n\n\n<p>A starter lab environment typically uses:\n&#8211; One small table\n&#8211; Minimal read\/write capacity\n&#8211; 1\u20135 GB storage (or lower)\n&#8211; Light query volume<\/p>\n\n\n\n<p>To estimate accurately:\n&#8211; Use the official pricing page and OCI cost tools:\n  &#8211; Oracle Cloud pricing list: https:\/\/www.oracle.com\/cloud\/price-list\/\n  &#8211; OCI Cost Estimator: https:\/\/www.oracle.com\/cloud\/costestimator.html (verify current URL in case Oracle updates it)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Example production cost considerations (what to plan for)<\/h3>\n\n\n\n<p>For production, plan for:\n&#8211; Peak read\/write units (not just average)\n&#8211; Index storage and write amplification\n&#8211; Multiple tables per microservice\n&#8211; Separate compartments\/environments\n&#8211; Monitoring alarms and SRE response processes<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">10. Step-by-Step Hands-On Tutorial<\/h2>\n\n\n\n<p>This lab creates a NoSQL Database table in Oracle Cloud, writes a few records, queries them, and then cleans up. The workflow is designed to be safe and low-cost by using small table limits.<\/p>\n\n\n\n<blockquote>\n<p>Command syntax and API parameters can evolve. If any CLI\/SDK commands differ in your environment, follow the official docs for the exact flags and names.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Objective<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create a NoSQL Database table in Oracle Cloud<\/li>\n<li>Insert and read records<\/li>\n<li>Run a simple query<\/li>\n<li>Validate results<\/li>\n<li>Clean up resources to stop ongoing charges<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Lab Overview<\/h3>\n\n\n\n<p>You will:\n1. Create an IAM policy (if needed) and choose a compartment\n2. Create a NoSQL table with small limits\n3. Use Cloud Shell with Python SDK (or CLI if preferred) to insert\/query data\n4. Validate data and observe common failure modes\n5. Delete the table<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Prepare your compartment and permissions<\/h3>\n\n\n\n<p>1) Choose or create a compartment for the lab, for example:\n&#8211; <code>labs-data-management<\/code><\/p>\n\n\n\n<p>2) Ensure your user belongs to a group with permissions. For a lab, an admin can create this policy in the target compartment:<\/p>\n\n\n\n<pre><code class=\"language-text\">Allow group &lt;your-group-name&gt; to manage nosql-family in compartment &lt;your-compartment-name&gt;\n<\/code><\/pre>\n\n\n\n<p><strong>Expected outcome<\/strong>\n&#8211; You have permissions to create and delete NoSQL tables.<\/p>\n\n\n\n<p><strong>Verification<\/strong>\n&#8211; In OCI Console, search for <strong>NoSQL Database<\/strong>. You should be able to open the service without authorization errors.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Create a NoSQL Database table (Console)<\/h3>\n\n\n\n<p>1) In OCI Console, open:\n&#8211; <strong>NoSQL Database<\/strong><\/p>\n\n\n\n<p>2) Confirm the <strong>Region<\/strong> (top right) is the region you want.<\/p>\n\n\n\n<p>3) Click <strong>Create Table<\/strong> (label may vary slightly by console updates).<\/p>\n\n\n\n<p>4) Select:\n&#8211; <strong>Compartment:<\/strong> your lab compartment\n&#8211; <strong>Table name:<\/strong> <code>users_lab<\/code><\/p>\n\n\n\n<p>5) Provide a DDL statement.\nOracle NoSQL table DDL commonly looks like this (verify syntax in current docs if your console validates differently):<\/p>\n\n\n\n<pre><code class=\"language-sql\">CREATE TABLE IF NOT EXISTS users_lab (\n  user_id INTEGER,\n  email STRING,\n  full_name STRING,\n  created_at TIMESTAMP,\n  PRIMARY KEY (SHARD(user_id))\n)\n<\/code><\/pre>\n\n\n\n<p>6) Set small table limits (names vary by UI). Use minimal values allowed, for example:\n&#8211; Read units: minimal\n&#8211; Write units: minimal\n&#8211; Storage: minimal (for example 1 GB if that\u2019s the minimum)<\/p>\n\n\n\n<p>7) Create the table.<\/p>\n\n\n\n<p><strong>Expected outcome<\/strong>\n&#8211; Table status becomes <strong>Active<\/strong> (or similar).<\/p>\n\n\n\n<p><strong>Verification<\/strong>\n&#8211; In the table details page, confirm:\n  &#8211; Lifecycle state is Active\n  &#8211; Limits\/capacity are visible\n  &#8211; You can see DDL and primary key definition<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Use Cloud Shell to connect and write\/query data (Python SDK path)<\/h3>\n\n\n\n<p>This step uses Cloud Shell so you don\u2019t have to manage local OCI CLI auth.<\/p>\n\n\n\n<p>1) Open <strong>Cloud Shell<\/strong> from the OCI Console.<\/p>\n\n\n\n<p>2) Confirm your OCI CLI is authenticated:<\/p>\n\n\n\n<pre><code class=\"language-bash\">oci os ns get\n<\/code><\/pre>\n\n\n\n<p><strong>Expected outcome<\/strong>\n&#8211; A JSON response with your namespace (proves your CLI session works).<\/p>\n\n\n\n<p>3) Install the Oracle NoSQL Database SDK for Python.<\/p>\n\n\n\n<p>Oracle\u2019s Python SDK for NoSQL Database is typically distributed as <code>borneo<\/code>. Install it:<\/p>\n\n\n\n<pre><code class=\"language-bash\">python3 -m pip install --user borneo\n<\/code><\/pre>\n\n\n\n<p><strong>Expected outcome<\/strong>\n&#8211; Package installs successfully.<\/p>\n\n\n\n<p>4) Create a Python script <code>nosql_lab.py<\/code>.<\/p>\n\n\n\n<p>You must set:\n&#8211; Your region id (example: <code>us-ashburn-1<\/code>) to match your current region\n&#8211; The compartment OCID\n&#8211; The table name<\/p>\n\n\n\n<p>Get your compartment OCID from the compartment details page.<\/p>\n\n\n\n<p>Create the script:<\/p>\n\n\n\n<pre><code class=\"language-python\">#!\/usr\/bin\/env python3\nimport os\nimport time\n\nfrom borneo import (\n    NoSQLHandle, NoSQLHandleConfig,\n    PutRequest, GetRequest, QueryRequest\n)\nfrom borneo.iam import SignatureProvider\nfrom borneo.exception import NoSQLException\n\n# ---- Configure these values ----\nREGION_ID = os.environ.get(\"OCI_REGION_ID\", \"\")  # optional env override\nCOMPARTMENT_OCID = os.environ.get(\"OCI_COMPARTMENT_OCID\", \"\")\nTABLE_NAME = \"users_lab\"\n\nif not COMPARTMENT_OCID:\n    raise SystemExit(\"Set OCI_COMPARTMENT_OCID env var to your compartment OCID.\")\n\n# Cloud Shell typically has ~\/.oci\/config configured.\n# If your profile is not DEFAULT, set OCI_PROFILE.\nprofile = os.environ.get(\"OCI_PROFILE\", \"DEFAULT\")\n\n# Region: try Cloud Shell env, fallback to explicit value.\n# If REGION_ID is empty, set it explicitly (example: 'us-ashburn-1').\nif not REGION_ID:\n    raise SystemExit(\"Set OCI_REGION_ID (example: us-ashburn-1).\")\n\nprovider = SignatureProvider(config_file=\"~\/.oci\/config\", profile_name=profile)\n\nconfig = NoSQLHandleConfig(region=REGION_ID, provider=provider)\n# Optional tuning:\n# config.set_default_compartment(COMPARTMENT_OCID)\n\nhandle = NoSQLHandle(config)\n\ndef put_user(user_id, email, full_name):\n    row = {\n        \"user_id\": user_id,\n        \"email\": email,\n        \"full_name\": full_name,\n        \"created_at\": time.strftime(\"%Y-%m-%dT%H:%M:%SZ\", time.gmtime())\n    }\n    req = PutRequest().set_table_name(TABLE_NAME).set_value(row)\n    # Many SDKs support setting compartment at request time; if needed:\n    req.set_compartment(COMPARTMENT_OCID)\n    res = handle.put(req)\n    return res\n\ndef get_user(user_id):\n    key = {\"user_id\": user_id}\n    req = GetRequest().set_table_name(TABLE_NAME).set_key(key)\n    req.set_compartment(COMPARTMENT_OCID)\n    res = handle.get(req)\n    return res.get_value()\n\ndef query_users():\n    # SQL-like query language; verify supported syntax for your environment.\n    stmt = f\"SELECT user_id, email, full_name, created_at FROM {TABLE_NAME} ORDER BY user_id\"\n    req = QueryRequest().set_statement(stmt)\n    req.set_compartment(COMPARTMENT_OCID)\n\n    results = []\n    while True:\n        res = handle.query(req)\n        results.extend(res.get_results())\n        if req.is_done():\n            break\n    return results\n\ntry:\n    print(\"Inserting users...\")\n    put_user(1, \"alice@example.com\", \"Alice Adams\")\n    put_user(2, \"bob@example.com\", \"Bob Brown\")\n    put_user(3, \"cara@example.com\", \"Cara Clark\")\n\n    print(\"Reading user_id=2 ...\")\n    user = get_user(2)\n    print(user)\n\n    print(\"Query all users ...\")\n    rows = query_users()\n    for r in rows:\n        print(r)\n\nfinally:\n    handle.close()\n<\/code><\/pre>\n\n\n\n<p>5) Export environment variables and run.<\/p>\n\n\n\n<p>Set your region id (use the OCI region you are in) and compartment OCID:<\/p>\n\n\n\n<pre><code class=\"language-bash\">export OCI_REGION_ID=\"us-ashburn-1\"\nexport OCI_COMPARTMENT_OCID=\"ocid1.compartment.oc1..exampleuniqueID\"\npython3 nosql_lab.py\n<\/code><\/pre>\n\n\n\n<p><strong>Expected outcome<\/strong>\n&#8211; The script inserts 3 rows, reads user 2, and prints query results.<\/p>\n\n\n\n<p><strong>Verification<\/strong>\n&#8211; In the OCI Console NoSQL table view, if there is a data\/query view available in your region\/console version, you should see the inserted data.\n&#8211; If not, rely on the script output as validation.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: (Optional) Create an index for email lookups (only if supported)<\/h3>\n\n\n\n<p>If your workload needs <code>email -&gt; user<\/code> lookup, you typically add a secondary index.<\/p>\n\n\n\n<p>Index DDL varies by NoSQL implementation. If the console provides an \u201cIndexes\u201d tab, use the console to create an index on <code>email<\/code>.<\/p>\n\n\n\n<p><strong>Expected outcome<\/strong>\n&#8211; Index is created and becomes Active.<\/p>\n\n\n\n<p><strong>Verification<\/strong>\n&#8211; Query by email if supported by your query language and index model.<\/p>\n\n\n\n<blockquote>\n<p>If index creation is not available in your region\/service version, do not force it\u2014design your primary key to meet your query needs.<\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\">Validation<\/h3>\n\n\n\n<p>Use a checklist:\n&#8211; Table exists and is Active.\n&#8211; Script can authenticate and perform Put\/Get\/Query.\n&#8211; Results show inserted records.<\/p>\n\n\n\n<p>Recommended additional validation:\n&#8211; Run the script twice to observe idempotency behavior (a Put may overwrite existing key).\n&#8211; Temporarily reduce capacity (if supported) and observe throttling behavior under load (in a controlled manner).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Troubleshooting<\/h3>\n\n\n\n<p>Common issues and realistic fixes:<\/p>\n\n\n\n<p>1) <strong>NotAuthorizedOrNotFound \/ 403<\/strong>\n&#8211; Cause: Missing IAM policy for <code>nosql-family<\/code> in the compartment.\n&#8211; Fix: Ensure group policy includes <code>manage nosql-family<\/code> (lab) or correct least-privilege permissions (prod).<\/p>\n\n\n\n<p>2) <strong>Region mismatch<\/strong>\n&#8211; Cause: Script points to a different region than where the table exists.\n&#8211; Fix: Set <code>OCI_REGION_ID<\/code> to the region where you created the table.<\/p>\n\n\n\n<p>3) <strong>Table not found<\/strong>\n&#8211; Cause: Wrong compartment OCID or table name.\n&#8211; Fix: Confirm compartment OCID; confirm table exists in that compartment\/region.<\/p>\n\n\n\n<p>4) <strong>Python SDK errors (borneo import or provider)<\/strong>\n&#8211; Cause: Package not installed in the correct Python environment.\n&#8211; Fix:\n  &#8211; Use <code>python3 -m pip install --user borneo<\/code>\n  &#8211; Ensure you run with <code>python3<\/code><\/p>\n\n\n\n<p>5) <strong>Throttling \/ TooManyRequests<\/strong>\n&#8211; Cause: Table capacity too low for your request burst.\n&#8211; Fix:\n  &#8211; Increase read\/write units for the table (small increments)\n  &#8211; Implement exponential backoff retries in application code<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cleanup<\/h3>\n\n\n\n<p>To avoid ongoing charges, delete the table.<\/p>\n\n\n\n<p><strong>Console cleanup<\/strong>\n1) Open <strong>NoSQL Database<\/strong>\n2) Select the <code>users_lab<\/code> table\n3) Choose <strong>Delete<\/strong>\n4) Confirm deletion<\/p>\n\n\n\n<p><strong>Expected outcome<\/strong>\n&#8211; Table lifecycle state changes to Deleting and then disappears.<\/p>\n\n\n\n<p>Also remove (or narrow) any overly broad IAM policies created solely for the lab.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">11. Best Practices<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Architecture best practices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Model data by access pattern: design keys so your most frequent queries are key-based.<\/li>\n<li>Pick shard\/partition keys that distribute load evenly:<\/li>\n<li>Avoid monotonically increasing keys alone (can cause hot partitions).<\/li>\n<li>Prefer high-cardinality keys (userId, deviceId, tenantId).<\/li>\n<li>Use denormalization intentionally: duplicate small bits of data to avoid joins.<\/li>\n<li>Store large blobs externally (Object Storage), keep pointers in NoSQL Database.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">IAM\/security best practices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use compartments per environment (dev\/test\/prod).<\/li>\n<li>Prefer workload identities (instance principal\/resource principal) over long-lived user keys for apps.<\/li>\n<li>Apply least privilege:<\/li>\n<li>Separate \u201cmanage tables\u201d from \u201cread\/write data\u201d identities if supported by the service\u2019s permission model (verify exact permissions in docs).<\/li>\n<li>Tag tables for ownership and cost allocation.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Cost best practices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Start small, measure, then scale:<\/li>\n<li>Set minimal read\/write units for dev.<\/li>\n<li>Use production load tests to right-size capacity.<\/li>\n<li>Keep indexes minimal and purposeful.<\/li>\n<li>Use TTL for ephemeral datasets (if supported).<\/li>\n<li>Delete unused tables and test environments automatically.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Performance best practices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Avoid scans and unbounded queries.<\/li>\n<li>Keep item\/record size small and consistent when possible.<\/li>\n<li>Batch operations if the SDK supports it (verify).<\/li>\n<li>Implement retries with exponential backoff for throttling and transient failures.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Reliability best practices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Design for retries and idempotency at the application layer.<\/li>\n<li>Use circuit breakers\/timeouts in the client.<\/li>\n<li>Consider multi-region DR patterns at the application level if your business requires it; confirm NoSQL Database replication capabilities in official docs.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Operations best practices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create alarms on:<\/li>\n<li>throttling events<\/li>\n<li>near-capacity utilization<\/li>\n<li>elevated error rates<\/li>\n<li>Track deployment changes with tags and Terraform (infrastructure as code).<\/li>\n<li>Standardize naming:<\/li>\n<li><code>&lt;env&gt;-&lt;domain&gt;-&lt;service&gt;-&lt;table&gt;<\/code><\/li>\n<li>Example: <code>prod-commerce-cart-users<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Governance\/tagging\/naming best practices<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Apply defined tags:<\/li>\n<li><code>CostCenter<\/code>, <code>Owner<\/code>, <code>Environment<\/code>, <code>DataClassification<\/code><\/li>\n<li>Document table schemas, key design, and expected access patterns in a repo.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">12. Security Considerations<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Identity and access model<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Controlled by OCI <strong>IAM<\/strong>:<\/li>\n<li>Policies grant permissions to groups or dynamic groups in compartments.<\/li>\n<li>Application authentication should use:<\/li>\n<li><strong>Instance Principals<\/strong> (Compute)<\/li>\n<li><strong>Resource Principals<\/strong> (Functions)<\/li>\n<li>Or secure user principals for development only<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Encryption<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OCI managed services typically provide encryption at rest and TLS in transit.<\/li>\n<li>Verify encryption specifics for NoSQL Database in the official security documentation:<\/li>\n<li>Key management model (Oracle-managed keys vs customer-managed keys, if available)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Network exposure<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Prefer private access patterns:<\/li>\n<li>Use private subnets for workloads<\/li>\n<li>Use <strong>Service Gateway<\/strong> to reach OCI services without public internet traversal (verify NoSQL Database support)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Secrets handling<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Avoid embedding OCI credentials in code.<\/li>\n<li>If you must use API keys for development:<\/li>\n<li>Store them in OCI Vault or in a secure secrets manager<\/li>\n<li>Rotate keys regularly<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Audit\/logging<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enable and monitor OCI <strong>Audit<\/strong> for administrative actions.<\/li>\n<li>Log application access patterns at the application layer (request IDs, latency, errors).<\/li>\n<li>Avoid logging sensitive data fields.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Compliance considerations<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Classify data:<\/li>\n<li>PII should be minimized, tokenized, or encrypted at the application layer if required by policy.<\/li>\n<li>Use compartments and policies aligned to regulatory boundaries.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Common security mistakes<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Granting broad <code>manage nosql-family<\/code> to too many users\/roles<\/li>\n<li>Using long-lived user API keys in production workloads<\/li>\n<li>Storing secrets in code repos or container images<\/li>\n<li>Exposing workloads publicly when private access is possible<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Secure deployment recommendations<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Separate admin and runtime identities.<\/li>\n<li>Use least privilege and compartment boundaries.<\/li>\n<li>Use Vault for secrets and consider customer-managed keys if supported and required (verify availability).<\/li>\n<li>Monitor audit logs and set alerts for unusual administrative actions.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">13. Limitations and Gotchas<\/h2>\n\n\n\n<blockquote>\n<p>Specific limits can change. Check OCI Service Limits and the NoSQL Database docs for current numbers.<\/p>\n<\/blockquote>\n\n\n\n<p>Common limitations and operational gotchas to plan for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Key design is critical<\/strong>: hot partitions\/shards will throttle even if total capacity looks sufficient.<\/li>\n<li><strong>Secondary indexes cost writes<\/strong>: every write may update index structures, increasing write units and storage.<\/li>\n<li><strong>Query flexibility is not relational<\/strong>: no joins; complex analytics queries are not the goal.<\/li>\n<li><strong>Throttling behavior<\/strong>: if you exceed provisioned capacity, expect rate limiting; clients must retry with backoff.<\/li>\n<li><strong>Large items\/records<\/strong>: request size limits may apply; keep records reasonably sized and store blobs elsewhere.<\/li>\n<li><strong>Environment drift<\/strong>: without IaC (Terraform), it\u2019s easy for dev\/prod table limits and indexes to drift.<\/li>\n<li><strong>Region constraints<\/strong>: you must create and access tables in the correct region; cross-region latency can be significant.<\/li>\n<li><strong>Cost surprises<\/strong>:<\/li>\n<li>Overprovisioned read\/write units<\/li>\n<li>Unused indexes<\/li>\n<li>Long-retained data without TTL<\/li>\n<li><strong>Migration challenges<\/strong>:<\/li>\n<li>DynamoDB\/Cosmos\/Mongo data models don\u2019t map 1:1; plan key\/index translation and consistency semantics carefully.<\/li>\n<li><strong>Feature availability differences<\/strong>:<\/li>\n<li>Some capabilities may differ between Oracle NoSQL Database on-prem and OCI NoSQL Database; always validate against the OCI docs for your service.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">14. Comparison with Alternatives<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Nearest services in Oracle Cloud<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Oracle Autonomous Database<\/strong> (including JSON support): best for relational + SQL + analytics and mixed workloads.<\/li>\n<li><strong>Oracle MySQL HeatWave<\/strong>: relational MySQL with performance features, often for transactional + analytics patterns.<\/li>\n<li><strong>OCI Object Storage<\/strong>: durable blob storage, not a low-latency key-value database.<\/li>\n<li><strong>OCI Streaming<\/strong>: event streaming, not a database; commonly paired with NoSQL for state.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Nearest services in other clouds<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AWS DynamoDB<\/li>\n<li>Azure Cosmos DB<\/li>\n<li>Google Cloud Firestore \/ Bigtable (depending on model)<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Open-source \/ self-managed alternatives<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Apache Cassandra (self-managed)<\/li>\n<li>MongoDB (self-managed or MongoDB Atlas)<\/li>\n<li>Redis (for caching; not a durable system of record unless configured carefully)<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Comparison table<\/h4>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Option<\/th>\n<th>Best For<\/th>\n<th>Strengths<\/th>\n<th>Weaknesses<\/th>\n<th>When to Choose<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Oracle Cloud NoSQL Database<\/strong><\/td>\n<td>Low-latency key-value\/document workloads on OCI<\/td>\n<td>OCI IAM\/compartments integration, managed ops, predictable capacity planning<\/td>\n<td>Requires careful key modeling; not relational; verify advanced multi-region patterns<\/td>\n<td>You run workloads on OCI and need managed NoSQL for OLTP patterns<\/td>\n<\/tr>\n<tr>\n<td><strong>Oracle Autonomous Database (JSON\/ATP)<\/strong><\/td>\n<td>SQL, joins, mixed workloads, analytics<\/td>\n<td>Rich SQL, strong transactional semantics, mature tooling<\/td>\n<td>More complex\/costly for simple KV access; relational modeling overhead<\/td>\n<td>You need SQL analytics + transactions and can model relationally<\/td>\n<\/tr>\n<tr>\n<td><strong>MySQL HeatWave (OCI)<\/strong><\/td>\n<td>MySQL OLTP + acceleration<\/td>\n<td>MySQL ecosystem, familiar tooling<\/td>\n<td>Relational constraints; scaling patterns differ<\/td>\n<td>You need MySQL compatibility and relational queries<\/td>\n<\/tr>\n<tr>\n<td><strong>AWS DynamoDB<\/strong><\/td>\n<td>Managed KV at massive scale<\/td>\n<td>Mature ecosystem, global tables (service-specific)<\/td>\n<td>AWS lock-in; different IAM\/tooling<\/td>\n<td>You are primarily on AWS and need DynamoDB features<\/td>\n<\/tr>\n<tr>\n<td><strong>Azure Cosmos DB<\/strong><\/td>\n<td>Multi-model globally distributed NoSQL<\/td>\n<td>Global distribution options (service-specific), multiple APIs<\/td>\n<td>Cost\/complexity; modeling varies by API<\/td>\n<td>You are on Azure and need Cosmos global distribution<\/td>\n<\/tr>\n<tr>\n<td><strong>MongoDB (Atlas\/self-managed)<\/strong><\/td>\n<td>Document database with rich query<\/td>\n<td>Flexible documents, rich indexing and query<\/td>\n<td>Operational overhead (self-managed) or added managed cost<\/td>\n<td>You want MongoDB semantics and ecosystem<\/td>\n<\/tr>\n<tr>\n<td><strong>Cassandra (self-managed)<\/strong><\/td>\n<td>High write throughput, wide-column<\/td>\n<td>Scale-out, tunable consistency<\/td>\n<td>Significant ops complexity<\/td>\n<td>You need Cassandra model and can operate clusters<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">15. Real-World Example<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Enterprise example: Telecom device state platform<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem:<\/strong> A telecom operator needs to store the latest configuration and connectivity status for tens of millions of devices. Reads happen on every API call; writes happen when devices report in.<\/li>\n<li><strong>Proposed architecture:<\/strong><\/li>\n<li>OKE microservices in private subnets<\/li>\n<li>Service Gateway to reach NoSQL Database privately (verify service support)<\/li>\n<li>NoSQL Database table keyed by <code>deviceId<\/code> (shard key) to distribute load<\/li>\n<li>Secondary index (if supported) for <code>customerId<\/code> or <code>status<\/code> used by support tools<\/li>\n<li>Streaming pipeline writes events to Object Storage; NoSQL stores only latest state and pointers<\/li>\n<li>Monitoring alarms on throttling and latency; Audit for admin actions<\/li>\n<li><strong>Why NoSQL Database was chosen:<\/strong><\/li>\n<li>Predictable low-latency key lookups at high scale<\/li>\n<li>Managed operations with OCI governance<\/li>\n<li>Clear separation of state (NoSQL) vs raw events (Object Storage)<\/li>\n<li><strong>Expected outcomes:<\/strong><\/li>\n<li>Sub-10ms (target) state read latency within region (actual depends on design and provisioning)<\/li>\n<li>Simplified ops compared to self-managed clusters<\/li>\n<li>Controlled cost via provisioned throughput and TTL for ephemeral records<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Startup\/small-team example: SaaS feature flags service<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problem:<\/strong> A startup needs a simple, reliable store for feature flags and tenant config that is read on every request across microservices.<\/li>\n<li><strong>Proposed architecture:<\/strong><\/li>\n<li>OCI API Gateway \u2192 Functions for admin APIs<\/li>\n<li>OKE\/Compute microservices read flags directly via SDK<\/li>\n<li>NoSQL Database table keyed by <code>(tenantId, flagName)<\/code> (tenantId as shard key)<\/li>\n<li>TTL for temporary flags (if supported)<\/li>\n<li>CI\/CD uses Terraform to deploy table and policies<\/li>\n<li><strong>Why NoSQL Database was chosen:<\/strong><\/li>\n<li>Minimal ops burden for a small team<\/li>\n<li>Tight IAM\/compartment governance in OCI<\/li>\n<li>Low-latency reads for every API call<\/li>\n<li><strong>Expected outcomes:<\/strong><\/li>\n<li>Faster feature rollout and safer experimentation<\/li>\n<li>Predictable cost via small provisioned capacity and right-sized scaling<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">16. FAQ<\/h2>\n\n\n\n<p>1) <strong>Is \u201cNoSQL Database\u201d the same as \u201cOracle NoSQL Database Cloud Service\u201d?<\/strong><br\/>\nIn OCI, the console service is often labeled <strong>NoSQL Database<\/strong>, while Oracle documentation may refer to <strong>Oracle NoSQL Database Cloud Service<\/strong>. They refer to the managed NoSQL service on Oracle Cloud. Verify naming in your OCI Console and the latest docs.<\/p>\n\n\n\n<p>2) <strong>Is NoSQL Database a document database or key-value store?<\/strong><br\/>\nIt is commonly used as a key-value and table-based NoSQL datastore with support for semi-structured data and a SQL-like query language. The exact data model and API features depend on the SDK and service capabilities\u2014verify in official docs.<\/p>\n\n\n\n<p>3) <strong>Do I need to manage servers or clusters?<\/strong><br\/>\nNo. It\u2019s a managed OCI service; you manage tables, capacity\/limits, and access control.<\/p>\n\n\n\n<p>4) <strong>How do I control access?<\/strong><br\/>\nWith OCI IAM policies and compartments. Use least privilege and separate admin vs runtime identities.<\/p>\n\n\n\n<p>5) <strong>Can I access NoSQL Database privately from a VCN?<\/strong><br\/>\nOften OCI services can be reached from private subnets via a <strong>Service Gateway<\/strong>. Verify NoSQL Database support for Service Gateway in your region.<\/p>\n\n\n\n<p>6) <strong>What is the most important design decision?<\/strong><br\/>\nYour <strong>primary key\/shard key<\/strong> design. It affects distribution, scalability, and hot-spot risk.<\/p>\n\n\n\n<p>7) <strong>Does it support secondary indexes?<\/strong><br\/>\nMany NoSQL table services do, but capabilities can vary. Check the NoSQL Database documentation for current index support and limits.<\/p>\n\n\n\n<p>8) <strong>Does it support transactions?<\/strong><br\/>\nSome NoSQL systems offer limited transactional\/atomic operations (often within a partition\/shard key). Confirm current transactional semantics in the official docs.<\/p>\n\n\n\n<p>9) <strong>How do I avoid throttling?<\/strong><br\/>\nProvision sufficient capacity, design keys to distribute load evenly, and implement retries with exponential backoff.<\/p>\n\n\n\n<p>10) <strong>Is it suitable for analytics or reporting?<\/strong><br\/>\nNot typically. Use a data warehouse or Autonomous Database for analytics; use NoSQL Database for operational access patterns.<\/p>\n\n\n\n<p>11) <strong>How do I estimate cost?<\/strong><br\/>\nUse Oracle\u2019s official pricing pages and OCI cost estimator. Cost is usually driven by read\/write capacity and storage.<\/p>\n\n\n\n<p>12) <strong>Can I store large JSON payloads?<\/strong><br\/>\nYou can store semi-structured records, but request size limits may apply and large payloads increase cost and latency. Store large blobs in Object Storage and keep pointers in NoSQL Database.<\/p>\n\n\n\n<p>13) <strong>How do I back up data?<\/strong><br\/>\nBackup\/restore options vary by service. If native backups exist, use them; otherwise implement export pipelines (for example to Object Storage). Verify the supported approach in official docs.<\/p>\n\n\n\n<p>14) <strong>How do I migrate from DynamoDB\/CosmosDB\/MongoDB?<\/strong><br\/>\nPlan a migration that maps keys, indexes, and consistency semantics carefully. Expect application changes; NoSQL models are not 1:1 across vendors.<\/p>\n\n\n\n<p>15) <strong>What should I monitor in production?<\/strong><br\/>\nThrottling, latency, error rates, and capacity utilization (read\/write units and storage). Use OCI Monitoring alarms and application-level tracing.<\/p>\n\n\n\n<p>16) <strong>Can I use Terraform for NoSQL Database?<\/strong><br\/>\nOCI supports Terraform for many services. Verify current Terraform resource support for NoSQL Database in the OCI Terraform provider documentation.<\/p>\n\n\n\n<p>17) <strong>Is NoSQL Database \u201cserverless\u201d?<\/strong><br\/>\nIt\u2019s managed and you don\u2019t run servers, but you usually choose capacity\/limits. Whether it offers a fully on-demand serverless billing mode should be verified in the current pricing\/docs.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">17. Top Online Resources to Learn NoSQL Database<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Resource Type<\/th>\n<th>Name<\/th>\n<th>Why It Is Useful<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Official documentation<\/td>\n<td>OCI NoSQL Database docs: https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/NoSQL\/home.htm<\/td>\n<td>Primary source for features, limits, IAM, networking, and SDK usage<\/td>\n<\/tr>\n<tr>\n<td>Official product page<\/td>\n<td>Oracle NoSQL Database Cloud Service: https:\/\/www.oracle.com\/cloud\/cloud-native\/nosql-database\/<\/td>\n<td>High-level capabilities and entry points to docs<\/td>\n<\/tr>\n<tr>\n<td>Official pricing<\/td>\n<td>Oracle Cloud Price List: https:\/\/www.oracle.com\/cloud\/price-list\/<\/td>\n<td>Official SKU-based pricing reference (region\/SKU may vary)<\/td>\n<\/tr>\n<tr>\n<td>Pricing calculator\/estimator<\/td>\n<td>OCI Cost Estimator: https:\/\/www.oracle.com\/cloud\/costestimator.html<\/td>\n<td>Helps build cost estimates without guessing prices<\/td>\n<\/tr>\n<tr>\n<td>IAM documentation<\/td>\n<td>OCI IAM policies: https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Identity\/home.htm<\/td>\n<td>Learn how to write least-privilege policies for <code>nosql-family<\/code><\/td>\n<\/tr>\n<tr>\n<td>Networking documentation<\/td>\n<td>Service Gateway overview: https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Network\/Tasks\/servicegateway.htm<\/td>\n<td>Private access from VCNs to OCI services<\/td>\n<\/tr>\n<tr>\n<td>Monitoring documentation<\/td>\n<td>OCI Monitoring: https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Monitoring\/home.htm<\/td>\n<td>Metrics, alarms, and operational monitoring patterns<\/td>\n<\/tr>\n<tr>\n<td>Audit documentation<\/td>\n<td>OCI Audit: https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/Audit\/home.htm<\/td>\n<td>Governance trail for administrative operations<\/td>\n<\/tr>\n<tr>\n<td>Official SDK (Python)<\/td>\n<td>Oracle NoSQL Python SDK (borneo): https:\/\/github.com\/oracle\/nosql-python-sdk<\/td>\n<td>Practical code examples and SDK reference<\/td>\n<\/tr>\n<tr>\n<td>Official SDK (Java)<\/td>\n<td>Oracle NoSQL Java SDK: https:\/\/github.com\/oracle\/nosql-java-sdk<\/td>\n<td>Java client patterns used in enterprise services<\/td>\n<\/tr>\n<tr>\n<td>Official SDK (Node.js)<\/td>\n<td>Oracle NoSQL Node.js SDK: https:\/\/github.com\/oracle\/nosql-node-sdk<\/td>\n<td>Node.js client patterns for APIs and microservices<\/td>\n<\/tr>\n<tr>\n<td>OCI CLI<\/td>\n<td>OCI CLI docs: https:\/\/docs.oracle.com\/en-us\/iaas\/Content\/API\/Concepts\/cliconcepts.htm<\/td>\n<td>Automate table creation and ops workflows<\/td>\n<\/tr>\n<tr>\n<td>Architecture guidance<\/td>\n<td>OCI Architecture Center: https:\/\/docs.oracle.com\/en\/solutions\/<\/td>\n<td>Reference architectures and best practices (filter for data management patterns)<\/td>\n<\/tr>\n<tr>\n<td>Community learning<\/td>\n<td>Oracle Cloud Infrastructure workshops\/tutorials (catalog): https:\/\/oracle-devrel.github.io\/<\/td>\n<td>Hands-on labs; verify NoSQL coverage and currency<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">18. Training and Certification Providers<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Institute<\/th>\n<th>Suitable Audience<\/th>\n<th>Likely Learning Focus<\/th>\n<th>Mode<\/th>\n<th>Website URL<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>DevOpsSchool.com<\/td>\n<td>DevOps engineers, SREs, cloud engineers<\/td>\n<td>OCI operations, DevOps pipelines, cloud fundamentals, service integrations<\/td>\n<td>Check website<\/td>\n<td>https:\/\/www.devopsschool.com\/<\/td>\n<\/tr>\n<tr>\n<td>ScmGalaxy.com<\/td>\n<td>Beginners to intermediate engineers<\/td>\n<td>SCM\/DevOps foundations, cloud tooling, operational practices<\/td>\n<td>Check website<\/td>\n<td>https:\/\/www.scmgalaxy.com\/<\/td>\n<\/tr>\n<tr>\n<td>CLoudOpsNow.in<\/td>\n<td>Cloud ops and platform teams<\/td>\n<td>Cloud operations, monitoring, reliability practices<\/td>\n<td>Check website<\/td>\n<td>https:\/\/www.cloudopsnow.in\/<\/td>\n<\/tr>\n<tr>\n<td>SreSchool.com<\/td>\n<td>SREs and reliability-focused teams<\/td>\n<td>SRE practices, observability, incident response, reliability engineering<\/td>\n<td>Check website<\/td>\n<td>https:\/\/www.sreschool.com\/<\/td>\n<\/tr>\n<tr>\n<td>AiOpsSchool.com<\/td>\n<td>Ops teams adopting automation<\/td>\n<td>AIOps concepts, monitoring automation, operational analytics<\/td>\n<td>Check website<\/td>\n<td>https:\/\/www.aiopsschool.com\/<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">19. Top Trainers<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Platform\/Site<\/th>\n<th>Likely Specialization<\/th>\n<th>Suitable Audience<\/th>\n<th>Website URL<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>RajeshKumar.xyz<\/td>\n<td>Cloud\/DevOps training and guidance (verify current offerings)<\/td>\n<td>Engineers seeking practical coaching<\/td>\n<td>https:\/\/rajeshkumar.xyz\/<\/td>\n<\/tr>\n<tr>\n<td>devopstrainer.in<\/td>\n<td>DevOps and cloud training platform (verify course catalog)<\/td>\n<td>Beginners to intermediate DevOps learners<\/td>\n<td>https:\/\/devopstrainer.in\/<\/td>\n<\/tr>\n<tr>\n<td>devopsfreelancer.com<\/td>\n<td>Freelance DevOps help\/training (verify services)<\/td>\n<td>Teams needing short-term enablement<\/td>\n<td>https:\/\/www.devopsfreelancer.com\/<\/td>\n<\/tr>\n<tr>\n<td>devopssupport.in<\/td>\n<td>DevOps support and training (verify scope)<\/td>\n<td>Ops teams needing hands-on support<\/td>\n<td>https:\/\/www.devopssupport.in\/<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">20. Top Consulting Companies<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table>\n<thead>\n<tr>\n<th>Company<\/th>\n<th>Likely Service Area<\/th>\n<th>Where They May Help<\/th>\n<th>Consulting Use Case Examples<\/th>\n<th>Website URL<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>cotocus.com<\/td>\n<td>Cloud\/DevOps consulting (verify practice areas)<\/td>\n<td>Architecture, CI\/CD, operations<\/td>\n<td>OCI landing zones, migration planning, observability setup<\/td>\n<td>https:\/\/cotocus.com\/<\/td>\n<\/tr>\n<tr>\n<td>DevOpsSchool.com<\/td>\n<td>Training + consulting services (verify offerings)<\/td>\n<td>Platform engineering, DevOps transformation<\/td>\n<td>Designing IaC, building deployment pipelines, SRE enablement<\/td>\n<td>https:\/\/www.devopsschool.com\/<\/td>\n<\/tr>\n<tr>\n<td>DEVOPSCONSULTING.IN<\/td>\n<td>DevOps consulting (verify focus)<\/td>\n<td>DevOps automation, cloud operations<\/td>\n<td>Implementing CI\/CD, monitoring, security hardening<\/td>\n<td>https:\/\/www.devopsconsulting.in\/<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">21. Career and Learning Roadmap<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">What to learn before NoSQL Database (Oracle Cloud)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OCI fundamentals: regions, compartments, VCNs, IAM<\/li>\n<li>Basic database concepts: keys, indexing, consistency, CAP tradeoffs<\/li>\n<li>API development fundamentals (REST\/gRPC) and authentication concepts<\/li>\n<li>Observability basics: metrics, logs, tracing<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">What to learn after<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Advanced data modeling for NoSQL: partitioning, hot key mitigation, denormalization<\/li>\n<li>Infrastructure as Code (Terraform for OCI)<\/li>\n<li>Secure workload identity on OCI (instance principals\/resource principals)<\/li>\n<li>Event-driven patterns with OCI Streaming + Functions\/OKE<\/li>\n<li>Data lake patterns with Object Storage + analytics services<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Job roles that use it<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cloud engineer \/ platform engineer (OCI)<\/li>\n<li>Backend engineer building microservices<\/li>\n<li>DevOps\/SRE supporting managed data services<\/li>\n<li>Solutions architect designing operational data layers<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Certification path (if available)<\/h3>\n\n\n\n<p>Oracle\u2019s certification offerings change over time. For the most accurate path:\n&#8211; Check Oracle University and OCI certifications pages (official):\n  &#8211; https:\/\/education.oracle.com\/\n  &#8211; https:\/\/education.oracle.com\/oracle-cloud-infrastructure-certification<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Project ideas for practice<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Build a session store microservice with TTL and alarms for throttling<\/li>\n<li>Create a tenant registry for a multi-tenant SaaS (keys: tenantId, config)<\/li>\n<li>Implement an idempotency key service for payment APIs<\/li>\n<li>Create a telemetry \u201clatest state\u201d service storing device snapshots and pointers to Object Storage<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">22. Glossary<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>OCI (Oracle Cloud Infrastructure):<\/strong> Oracle Cloud\u2019s core platform for compute, networking, storage, and managed services.<\/li>\n<li><strong>Compartment:<\/strong> OCI resource container used for access control and organization.<\/li>\n<li><strong>IAM Policy:<\/strong> A rule granting permissions to groups\/dynamic groups in OCI.<\/li>\n<li><strong>NoSQL Table:<\/strong> Container for records in NoSQL Database.<\/li>\n<li><strong>Primary Key:<\/strong> Uniquely identifies a record. Often includes a shard\/partition key element.<\/li>\n<li><strong>Shard Key \/ Partition Key:<\/strong> Key component used to distribute data across partitions for scalability.<\/li>\n<li><strong>Secondary Index:<\/strong> Index on non-primary-key fields to support additional queries.<\/li>\n<li><strong>TTL (Time to Live):<\/strong> Data expiration mechanism to automatically remove old records.<\/li>\n<li><strong>Provisioned Capacity:<\/strong> Pre-allocated throughput (read\/write units) used for predictable performance and billing.<\/li>\n<li><strong>Throttling:<\/strong> Rate limiting when workload exceeds provisioned limits.<\/li>\n<li><strong>Service Gateway:<\/strong> OCI networking component that enables private access from a VCN to OCI services (Oracle Services Network).<\/li>\n<li><strong>Data plane:<\/strong> Runtime read\/write\/query traffic.<\/li>\n<li><strong>Control plane:<\/strong> Administrative operations such as table creation, updates, and deletion.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">23. Summary<\/h2>\n\n\n\n<p>Oracle Cloud <strong>NoSQL Database<\/strong> (in the <strong>Data Management<\/strong> category) is OCI\u2019s managed NoSQL service for low-latency, high-throughput operational workloads where key-based access patterns and predictable performance matter.<\/p>\n\n\n\n<p>It fits best when you can design effective primary\/shard keys, keep queries bounded, and provision capacity based on real throughput needs. Cost is typically driven by <strong>read\/write capacity and storage<\/strong>, with additional indirect costs from networking, compute runtimes, and logging. Security is anchored in OCI <strong>IAM + compartments<\/strong>, with <strong>Audit<\/strong> for governance and <strong>Monitoring<\/strong> for operational visibility.<\/p>\n\n\n\n<p>Use NoSQL Database for sessions, profiles, device state, carts, and configuration; choose relational or analytics services when you need joins, complex SQL, or reporting. Next step: read the official NoSQL Database docs and implement a small proof-of-concept with proper key modeling, monitoring alarms, and least-privilege IAM policies.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Data Management<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[68,62],"tags":[],"class_list":["post-896","post","type-post","status-publish","format-standard","hentry","category-data-management","category-oracle-cloud"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/896","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/comments?post=896"}],"version-history":[{"count":0,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/896\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/media?parent=896"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/categories?post=896"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/tags?post=896"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}