教程:使用 Java 应用程序在 Azure Cosmos DB 中创建用于 Cassandra 帐户的 API 来存储键/值数据

适用对象: 卡珊德拉

重要

你是否正在寻找一种数据库解决方案,以应对需要高扩展性、99.999% 可用性服务级别协议(SLA)、即时自动扩展和跨多个区域的自动故障转移的场景? 请考虑使用 Azure Cosmos DB for NoSQL。

作为开发人员,你可能具有使用键/值对的应用程序。 可以使用 Azure Cosmos DB 中 Cassandra 帐户的 API 来存储密钥/值数据。 本教程介绍如何使用 Java 应用程序在 Azure Cosmos DB 中创建 Cassandra 帐户的 API,添加数据库(也称为密钥空间),并添加表。 Java 应用程序使用 Java 驱动程序 创建包含用户 ID、用户名和用户城市等详细信息的用户数据库。

本教程涵盖以下任务:

  • 创建 Cassandra 数据库帐户。
  • 获取帐户连接字符串。
  • 创建 Maven 项目和依赖项。
  • 添加数据库和表。
  • 运行应用。

先决条件

创建数据库帐户

  1. 在 Azure 门户菜单或主页中,选择“ 创建资源”。

  2. 在“新建”页面中搜索“Azure Cosmos DB”,然后选择它。

  3. 在“Azure Cosmos DB”页上,选择“创建”。

  4. 在 API 页上的 Cassandra 部分下,选择“ 创建”。

    API 确定要创建的帐户的类型。 Azure Cosmos DB 提供五种 API:适用于文档数据库的 NoSQL、适用于图形数据库的 Gremlin、适用于文档数据库的 MongoDB、Azure 表和 Cassandra。 必须为每种 API 创建单独的帐户。

    选择 Cassandra ,因为在本教程中,你将创建一个适用于 Cassandra API 的表。

    若要了解有关 Cassandra API 的详细信息,请参阅 什么是适用于 Apache Cassandra 的 Azure Cosmos DB?。

  5. 在 “创建 Azure Cosmos DB 帐户 ”页上,输入新 Azure Cosmos DB 帐户的基本设置。

    设置 值 说明
    订阅 你的订阅。 选择要用于此 Azure Cosmos DB 帐户的 Azure 订阅。
    资源组 新建。

    然后输入与 帐户名称相同的名称。
    选择“新建”。 然后输入帐户的新资源组名称。 为简单起见,请使用与 Azure Cosmos DB 帐户名称相同的名称。
    帐户名 输入唯一名称。 输入标识此 Azure Cosmos DB 帐户的唯一名称。 你的帐户 URI (cassandra.cosmos.azure.com),已追加到唯一帐户名称。

    帐户名称只能使用小写字母、数字和连字符(-),并且长度必须介于 3 到 31 个字符之间。
    位置 离用户最近的区域。 选择用于托管 Azure Cosmos DB 帐户的地理位置。 使用离用户最近的位置,使他们能够以最快的速度访问数据。
    容量模式 预配的吞吐量 或 无服务器。 选择 “预配吞吐量 ”以在 预配吞吐量 模式下创建帐户。 选择 “无服务器 ”以在 无服务器 模式下创建帐户。
    应用 Azure Cosmos DB 免费层折扣 应用 或 不适用。 使用 Azure Cosmos DB 免费层,可以在帐户中免费获取前 1,000 RU/秒和 25 GB 的存储空间。 详细了解免费层。

    注意

    每个 Azure 订阅最多可拥有一个免费的 Azure Cosmos DB 帐户。 创建帐户时必须选择加入。 如果您未看到应用免费层的折扣选项,则是因为订阅中的另一个帐户已经启用了免费层。

    Azure Cosmos DB for Apache Cassandra 的“新建帐户”页面

  6. 在“ 全局分发 ”选项卡上,配置以下详细信息。 使用本教程的默认值。

    设置 值 说明
    异地冗余 禁用 通过将你的区域与另一区域进行配对来启用或禁用帐户的全局分发。 稍后可以将更多区域添加到帐户。
    多区域写入 禁用 利用多区域写入功能,可以利用全球数据库和容器的预配吞吐量。
    可用性区域 禁用 可用性区域是 Azure 区域中的独立位置。 每个区域由一个或多个数据中心组成,这些数据中心配置了独立电源、冷却和网络。

    如果选择 “无服务器 ”作为 容量模式,则以下选项不可用:

    • 应用免费层折扣
    • 异地冗余
    • 多区域写入
  7. (可选)可以在以下选项卡上配置其他详细信息:

    • 网络:配置 来自虚拟网络的访问。
    • 备份策略:配置 定期 或 连续 备份策略。
    • 加密:使用服务管理的密钥或 客户管理的密钥。
    • 标记:标记是名称/值对,可用于对资源进行分类,并通过将同一标记应用于多个资源和资源组来查看合并计费。
  8. 选择“查看 + 创建”。

  9. 检查帐户设置,然后选择“创建”。 创建帐户需要几分钟时间。 等待门户页显示“你的部署已完成”消息。

    Azure 门户“通知”窗格

  10. 选择转到资源以访问 Azure Cosmos DB 账号页面。

获取帐户的连接详细信息

从 Azure 门户获取连接字符串信息,并将其复制到 Java 配置文件。 连接字符串使应用能与托管数据库进行通信。

  1. 从 Azure 门户转到 Azure Cosmos DB 帐户。

  2. 打开“连接字符串”窗格。

  3. 复制接触点、端口、用户名以及主密码值,以便在后续步骤中使用 。

创建项目和依赖项

本文中使用的 Java 示例项目托管在 GitHub 中。 可以运行本文中的步骤,也可以从 azure-cosmos-db-cassandra-java-getting-started 存储库下载示例。

下载文件后,更新 java-examples\src\main\resources\config.properties 文件中的连接字符串信息并运行它。

cassandra_host=<FILLME_with_CONTACT POINT> 
cassandra_port = 10350 
cassandra_username=<FILLME_with_USERNAME> 
cassandra_password=<FILLME_with_PRIMARY PASSWORD> 

若要从头开始生成示例,请执行以下步骤:

  1. 在终端或命令提示符下,创建名为 cassandra-demo 的新 Maven 项目。

    mvn archetype:generate -DgroupId=com.azure.cosmosdb.cassandra -DartifactId=cassandra-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false 
    
  2. 找到 cassandra-demo 文件夹。 使用文本编辑器打开 pom.xml 生成的文件。

    添加项目所需的 Cassandra 依赖项和生成插件,如 pom.xml 文件中所示。

  3. 在 cassandra-demo\src\main 文件夹下,创建名为 resources 的新文件夹。 在 resources 文件夹下添加 config.properties 和 log4j.properties 文件:

    • Config.properties 文件存储 API for Cassandra 帐户的连接终结点和键值。
    • log4j.properties 文件定义与 API for Cassandra 交互所需的日志记录级别。
  4. 浏览到 src/main/java/com/azure/cosmosdb/cassandra/ 文件夹。 在该 cassandra 文件夹中,创建另一个名为 . utils. 新文件夹存储连接到 Cassandra 帐户的 API 所需的实用工具类。

    添加 CassandraUtils 类来创建群集并打开和关闭 Cassandra 会话。 群集连接到 Azure Cosmos DB 中 Cassandra 帐户的 API,并返回一个用于访问的会话。 使用 Configurations 类从 config.properties 文件读取连接字符串信息。

  5. Java 示例创建一个数据库,其中包含用户名、用户 ID 和用户城市等用户信息。 你需要定义 get 和 set 方法才能访问主函数中的用户详细信息。

    使用和src/main/java/com/azure/cosmosdb/cassandra/方法在文件夹下get创建set类。

添加数据库和表

本部分介绍如何使用 Cassandra 查询语言(CQL)添加数据库(keyspace)和表。

  1. 在 src\main\java\com\azure\cosmosdb\cassandra 文件夹下,创建名为 repository 的新文件夹。

  2. 创建 UserRepository Java 类,并向其添加以下代码:

    package com.azure.cosmosdb.cassandra.repository; 
    import java.util.List; 
    import com.datastax.driver.core.BoundStatement; 
    import com.datastax.driver.core.PreparedStatement; 
    import com.datastax.driver.core.Row; 
    import com.datastax.driver.core.Session; 
    import org.slf4j.Logger; 
    import org.slf4j.LoggerFactory; 
    
    /** 
     * Create a Cassandra session 
     */ 
    public class UserRepository { 
    
        private static final Logger LOGGER = LoggerFactory.getLogger(UserRepository.class); 
        private Session session; 
        public UserRepository(Session session) { 
            this.session = session; 
        } 
    
        /** 
        * Create keyspace uprofile in cassandra DB 
         */ 
    
        public void createKeyspace() { 
             final String query = "CREATE KEYSPACE IF NOT EXISTS uprofile WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'datacenter1' : 1 }"; 
            session.execute(query); 
            LOGGER.info("Created keyspace 'uprofile'"); 
        } 
    
        /** 
         * Create user table in cassandra DB 
         */ 
    
        public void createTable() { 
            final String query = "CREATE TABLE IF NOT EXISTS uprofile.user (user_id int PRIMARY KEY, user_name text, user_bcity text)"; 
            session.execute(query); 
            LOGGER.info("Created table 'user'"); 
        } 
    } 
    
  3. 找到 src\main\java\com\azure\cosmosdb\cassandra 文件夹,并创建名为 examples 的新的子文件夹。

  4. 创建 UserProfile Java 类。 此类包含 main 方法,该方法调用前面定义的 createKeyspace 和 createTable 方法。

    package com.azure.cosmosdb.cassandra.examples; 
    import java.io.IOException; 
    import com.azure.cosmosdb.cassandra.repository.UserRepository; 
    import com.azure.cosmosdb.cassandra.util.CassandraUtils; 
    import com.datastax.driver.core.PreparedStatement; 
    import com.datastax.driver.core.Session; 
    import org.slf4j.Logger; 
    import org.slf4j.LoggerFactory; 
    
    /** 
     * Example class which will demonstrate following operations on Cassandra Database on CosmosDB 
     * - Create Keyspace 
     * - Create Table 
     * - Insert Rows 
     * - Select all data from a table 
     * - Select a row from a table 
     */ 
    
    public class UserProfile { 
    
        private static final Logger LOGGER = LoggerFactory.getLogger(UserProfile.class); 
        public static void main(String[] s) throws Exception { 
            CassandraUtils utils = new CassandraUtils(); 
            Session cassandraSession = utils.getSession(); 
    
            try { 
                UserRepository repository = new UserRepository(cassandraSession); 
                //Create keyspace in cassandra database 
                repository.createKeyspace(); 
                //Create table in cassandra database 
                repository.createTable(); 
    
            } finally { 
                utils.close(); 
                LOGGER.info("Please delete your table after verifying the presence of the data in portal or from CQL"); 
            } 
        } 
    } 
    

运行应用

  1. 打开命令提示符或终端窗口。 粘贴以下代码块。

    此代码将目录 (cd) 更改为创建项目的文件夹路径。 接着,它将运行 mvn clean install 命令以在目标文件夹中生成 cosmosdb-cassandra-examples.jar 文件。 最后,它运行 Java 应用程序。

    cd cassandra-demo
    
    mvn clean install 
    
    java -cp target/cosmosdb-cassandra-examples.jar com.azure.cosmosdb.cassandra.examples.UserProfile 
    

    终端窗口会显示通知,指出密钥空间和表已创建。

  2. 在 Azure 门户中,打开 数据资源管理器 以确认已创建密钥空间和表。

后续步骤

本教程介绍了如何使用 Java 应用程序在 Azure Cosmos DB、数据库和表中创建用于 Cassandra 帐户的 API。 你现在可以继续学习下一篇文章: