Skip to content

🔌 API Selection Guide for Azure Cosmos DB

Multi-Model

Choose the right API for your application based on data model, query patterns, and migration requirements.


🎯 API Comparison Matrix

API Data Model Query Language Best For Migration From
SQL (Core) JSON documents SQL-like New applications -
MongoDB BSON documents MongoDB query Existing MongoDB apps MongoDB
Cassandra Wide-column CQL High-scale writes Apache Cassandra
Gremlin Graph Gremlin traversal Connected data Neo4j, TinkerPop
Table Key-value OData/LINQ Simple lookups Azure Table Storage

📊 SQL (Core) API

When to Use

  • Building new cloud-native applications
  • Flexible JSON document storage
  • Rich SQL query capabilities
  • Need for transactions and stored procedures

Example Usage

from azure.cosmos import CosmosClient

client = CosmosClient(url="<cosmos-url>", credential="<credential>")
database = client.get_database_client("ecommerce")
container = database.get_container_client("products")

# Create document
product = {
    "id": "prod-001",
    "name": "Laptop",
    "category": "Electronics",
    "price": 999.99,
    "inventory": {"warehouse": "WH-01", "quantity": 50}
}
container.create_item(body=product)

# Query with SQL
query = """
    SELECT p.id, p.name, p.price 
    FROM products p 
    WHERE p.category = @category AND p.price < @maxPrice
"""
results = container.query_items(
    query=query,
    parameters=[
        {"name": "@category", "value": "Electronics"},
        {"name": "@maxPrice", "value": 1000}
    ]
)

🍃 MongoDB API

When to Use

  • Migrating from MongoDB
  • Using MongoDB tools and drivers
  • Need for MongoDB aggregation pipeline
  • Existing MongoDB expertise in team

Example Usage

from pymongo import MongoClient

client = MongoClient("mongodb://<cosmos-account>.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb")
db = client['ecommerce']
products = db['products']

# Insert document
product = {
    "_id": "prod-001",
    "name": "Laptop",
    "category": "Electronics",
    "price": 999.99,
    "specs": {"cpu": "Intel i7", "ram": "16GB"}
}
products.insert_one(product)

# Aggregation pipeline
pipeline = [
    {"$match": {"category": "Electronics"}},
    {"$group": {"_id": "$category", "avgPrice": {"$avg": "$price"}}},
    {"$sort": {"avgPrice": -1}}
]
results = products.aggregate(pipeline)

🔷 Cassandra API

When to Use

  • Migrating from Apache Cassandra
  • Time-series data workloads
  • High write throughput requirements
  • Need for wide-column storage

Example Usage

from cassandra.cluster import Cluster
from cassandra.auth import PlainTextAuthProvider

auth_provider = PlainTextAuthProvider(username='<username>', password='<password>')
cluster = Cluster(['<cosmos-account>.cassandra.cosmos.azure.com'], port=10350, auth_provider=auth_provider, ssl_options={'ssl_version': PROTOCOL_TLSv1_2})
session = cluster.connect()

# Create keyspace and table
session.execute("""
    CREATE KEYSPACE IF NOT EXISTS iot 
    WITH REPLICATION = {'class': 'SimpleStrategy', 'replication_factor': 1}
""")

session.execute("""
    CREATE TABLE iot.device_telemetry (
        device_id UUID,
        timestamp TIMESTAMP,
        temperature DECIMAL,
        humidity DECIMAL,
        PRIMARY KEY (device_id, timestamp)
    ) WITH CLUSTERING ORDER BY (timestamp DESC)
""")

# Insert data
session.execute("""
    INSERT INTO iot.device_telemetry (device_id, timestamp, temperature, humidity)
    VALUES (uuid(), toTimestamp(now()), 72.5, 45.2)
""")

📈 Gremlin (Graph) API

When to Use

  • Social networks and connections
  • Recommendation engines
  • Fraud detection patterns
  • Network and IT operations topology

Example Usage

from gremlin_python.driver import client, serializer

gremlin_client = client.Client(
    'wss://<cosmos-account>.gremlin.cosmos.azure.com:443/',
    'g',
    username="/dbs/<database>/colls/<graph>",
    password="<primary-key>",
    message_serializer=serializer.GraphSONSerializersV2d0()
)

# Add vertices
gremlin_client.submit("g.addV('person').property('id', 'john').property('name', 'John Doe')")
gremlin_client.submit("g.addV('person').property('id', 'jane').property('name', 'Jane Smith')")

# Add edge
gremlin_client.submit("g.V('john').addE('knows').to(g.V('jane'))")

# Query graph
results = gremlin_client.submit("g.V('john').out('knows').values('name')")
for result in results:
    print(result)

🗂️ Table API

When to Use

  • Migrating from Azure Table Storage
  • Simple key-value scenarios
  • Need for minimal code changes from Table Storage

Example Usage

from azure.data.tables import TableServiceClient

connection_string = "<cosmos-table-connection-string>"
table_service = TableServiceClient.from_connection_string(connection_string)

table_client = table_service.create_table_if_not_exists("products")

# Insert entity
entity = {
    'PartitionKey': 'Electronics',
    'RowKey': 'prod-001',
    'Name': 'Laptop',
    'Price': 999.99
}
table_client.create_entity(entity)

# Query entities
entities = table_client.query_entities("PartitionKey eq 'Electronics'")
for entity in entities:
    print(entity)


Last Updated: 2025-01-28 Documentation Status: Complete