全部產品
Search
文件中心

ApsaraDB for Cassandra - Deprecated:多語言SDK訪問(公網&內網)

更新時間:Jul 06, 2024

前言

相信大家已經會用cqlsh訪問Cassandra。但是實際應用中我們需要自己開發代碼去訪問Cassandra,並不想像cqlsh這樣只是簡單的串連一個節點,敲一些cql。我們需要串連多個節點,平衡請求到每個Cassandra node上,我們要管理串連池等等。當然這些都不用大家操心,社區版本的SDK已經完成了這些功能,我們接下來將教大家如果使用SDK進行訪問。

準備工作

  1. 擷取訪問地址。
    1. 進入Cassandra控制台> 資料庫連接

    2. 查看私網串連地址。由於安全考慮,預設不開通公網,如需擷取公網串連地址,請單擊申請外網地址p122701
      說明 根據叢集規模不同,訪問地址個數也不相同。如果有多個盡量使用多個地址,避免單個節點掛掉串連不上叢集。公網和內網訪問方式幾乎相同,只是地址不同。
  2. 添加白名單。

    實際訪問之前,請確保已經將客戶機的IP加入白名單,具體操作參見設定白名單

多語言程式碼範例

Java訪問
  1. Maven加入依賴。
    <dependency>
        <groupId>com.datastax.cassandra</groupId>
        <artifactId>cassandra-driver-core</artifactId>
        <version>3.7.2</version>
    </dependency>
                
    重要 這個依賴會引入一些公用庫,為了避免依賴衝突導致不必要的麻煩,請先在一個新工程中測試。
  2. 編寫Java存取碼。
    import com.datastax.driver.core.Cluster;
    import com.datastax.driver.core.PlainTextAuthProvider;
    import com.datastax.driver.core.ResultSet;
    import com.datastax.driver.core.Session;
    
    public class Demo {
    
      public static void main(String[] args) {
    
        // 此處填寫資料庫連接點地址(公網或者內網的),控制台有幾個就填幾個。
        // 實際上SDK最終只會連上第一個可串連的連接點並建立控制串連,填寫多個是為了防止單個節點掛掉導致無法串連資料庫。
        // 此處無需關心連接點的順序,因為SDK內部會先打亂連接點順序避免不同用戶端的控制串連總是連一個點。
        // 千萬不要把公網和內網的地址一起填入。
        String[] contactPoints = new String[]{
          "cds-xxxxxxxx-core-003.cassandra.rds.aliyuncs.com",
          "cds-xxxxxxxx-core-002.cassandra.rds.aliyuncs.com"
        };
    
        Cluster cluster = Cluster.builder()
          .addContactPoints(contactPoints)
          // 填寫賬戶名密碼(如果忘記可以在 帳號管理 處重設)
          .withAuthProvider(new PlainTextAuthProvider("cassandra", "123456"))
          // 如果進行的是公網訪問,需要在帳號名後面帶上 @public 以切換至完全的公網鏈路。
          // 否則無法在公網連上所有內部節點,會看到異常或者卡頓,影響本地開發調試。
          // 後續會支援網路鏈路自動識別(即無需手動添加@public)具體可以關注官網Changelog。
          //.withAuthProvider(new PlainTextAuthProvider("cassandra@public", "123456"))
          .build();
    
        // 初始化叢集,此時會建立控制串連(這步可忽略,建立Session時候會自動調用)
        cluster.init();
    
        // 串連叢集,會對每個Cassandra節點建立長串連池。
        // 所以這個操作非常重,不能每個請求建立一個Session。合理的應該是每個進程預先建立若干個。
        // 通常來說一個夠用了,你也可以根據自己業務測試情況適當調整,比如把讀寫的Session分開管理等。
        Session session = cluster.connect();
    
        // 查詢,此處我們查一下許可權相關的表,看看我們建立了幾個角色。
        // 這是系統資料表,預設只有cassandra這個superuser賬戶有SELECT許可權。
        // 如果你使用其他帳號測試,可以換一個表或者授權一下。
        ResultSet res = session.execute("SELECT * FROM system_auth.roles");
    
        // ResultSet 實現了 Iterable 介面,我們直接將每行資訊列印到控制台
        res.forEach(System.out::println);
    
        // 關閉Session
        session.close();
    
        // 關閉Cluster
        cluster.close();
      }
    
    }
    
                
Python訪問
  1. 安裝SDK庫。
    # 指定版本安裝(建議安裝3.x版本)
    pip install cassandra-driver==3.19.0
    # 安裝最新版本
    pip install cassandra-driver
    # https://pypi.org/project/cassandra-driver/#history      
  2. 編寫Python存取碼。
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    
    import logging
    import sys
    from cassandra.cluster import Cluster
    from cassandra.auth import PlainTextAuthProvider
    
    logging.basicConfig(stream=sys.stdout, level=logging.INFO)
    
    
    cluster = Cluster(
        # 此處填寫資料庫連接點地址(公網或者內網的),控制台有幾個就填幾個。
        # 實際上SDK最終只會連上第一個可串連的連接點並建立控制串連,填寫多個是為了防止單個節點掛掉導致無法串連資料庫。
        # 此處無需關心連接點的順序,因為SDK內部會先打亂連接點順序避免不同用戶端的控制串連總是連一個點。
        # 千萬不要把公網和內網的地址一起填入。
        contact_points=["cds-xxxxxxxx-core-003.cassandra.rds.aliyuncs.com",
                        "cds-xxxxxxxx-core-002.cassandra.rds.aliyuncs.com"],
        # 填寫賬戶名密碼(如果忘記可以在 帳號管理 處重設)
        auth_provider=PlainTextAuthProvider("cassandra", "123456"))
        # 果進行的是公網訪問,需要在帳號名後面帶上 @public 以切換至完全的公網鏈路。
        # 否則無法在公網連上所有內部節點,會看到異常或者卡頓,影響本地開發調試。
        # 後續會支援網路鏈路自動識別(即無需手動添加 @public)具體可以關注官網Changelog。
        # auth_provider=PlainTextAuthProvider("cassandra@public", "123456"))
    
    # 串連叢集,會對每個Cassandra節點建立長串連池。
    # 所以這個操作非常重,不能每個請求建立一個Session。合理的應該是每個進程預先建立若干個。
    # 通常來說一個夠用了,你也可以根據自己業務測試情況適當調整,比如把讀寫的Session分開管理等。
    session = cluster.connect()
    
    # 查詢,此處我們查一下許可權相關的表,看看我們建立了幾個角色。
    # 這是系統資料表,預設只有cassandra這個superuser賬戶有SELECT許可權。
    # 如果你使用其他帳號測試,可以換一個表或者授權一下。
    rows = session.execute('SELECT * FROM system_auth.roles')
    
    # 列印每行資訊到控制台
    for row in rows:
        print("# row: {}".format(row))
    
    # 關閉Session
    session.shutdown()
    
    # 關閉Cluster
    cluster.shutdown()
                
  3. 其他語言訪問。

    其他語言提供者類似Python和Java,可以參考github社區文檔: