使用 Cassandra、Astra 和 Stargate 構建儀表板 | baeldung

banq 發表於 2022-01-23

在本文中,我們將構建“Tony Stark 的復仇者聯盟狀態儀表板”,復仇者聯盟使用它來監控團隊成員的狀態。

這將使用DataStax Astra構建,這是一個由Apache Cassandra提供支援的 DBaaS,使用Stargate提供額外的 API 來使用它。最重要的是,我們將使用 Spring Boot 應用程式來呈現儀表板並顯示正在發生的事情。

我們將使用 Java 16 構建它,因此請確保它已安裝並準備好使用,然後再繼續。

 

DataStax Astra 是由 Apache Cassandra 提供支援的資料庫即服務產品。這為我們提供了一個完全託管、完全託管的 Cassandra 資料庫,我們可以使用它來儲存我們的資料,其中包括 Cassandra 為可擴充套件性、高可用性和效能提供的所有功能。

除此之外,Astra 還整合了 Stargate 資料平臺,該平臺通過不同的 API 公開完全相同的底層資料。這使我們能夠使用 REST 和 GraphQL API 訪問傳統的 Cassandra 表——這兩者與更傳統的 CQL API 100% 相容。這些可以使僅使用標準 HTTP 客戶端(例如 Spring RestTemplate)就可以非常靈活地訪問我們的資料。

它還提供了一個 JSON 文件 API,允許更靈活的資料訪問。有了這個 API,就不需要模式,如果需要,每條記錄都可以是不同的形狀。此外,記錄可以根據需要儘可能複雜,支援 JSON 的全部功能來表示資料。

但這確實是有代價的——文件 API 不能與其他 API 互換,因此提前決定如何對資料進行建模以及最適合使用哪些 API 訪問它很重要。

 

我們正在圍繞 Cassandra 之上的 Astra 系統構建我們的系統。這將直接反映我們對資料建模的方式。

Cassandra 旨在以非常高的吞吐量處理大量資料,並以表格形式儲存記錄。Astra 新增了一些替代 API——REST 和 GraphQL——以及表示文件和簡單表格資料的能力——使用 Document API。

這仍然得到 Cassandra 的支援,它以不同的方式設計模式。在現代系統中,空間不再是一種限制。複製資料不再是問題,無需跨資料集合或分割槽進行連線。這意味著我們可以對集合中的資料進行非規範化以滿足我們的需求。

因此,我們的資料模型將圍繞兩個集合構建——事件和狀態。事件集合是曾經發生過的每個狀態事件的記錄——這可能會變得非常大,Cassandra 非常適合這種情況。這將在下一篇文章中更詳細地介紹。

此集合中的記錄將如下所示:

avenger    falcon
timestamp    2021-04-02T14:23:12Z
latitude    40.714558
longitude    -73.975029
status    0.72

這為我們提供了單個事件更新,給出了更新的確切時間戳和位置以及復仇者狀態的百分比值。

statuses集合包含一個包含儀表板資料的文件,它是進入events集合的資料的非規範化彙總檢視。該文件將類似於以下內容:

{
    "falcon": {
    "realName": "Sam Wilson",
    "location": "New York",
    "status": "INJURED",
    "name": "Falcon"
    },
    "wanda": {
        "realName": "Wanda Maximoff",
        "location": "New York",
        "status": "HEALTHY"
    }
}

這裡我們有一些不會改變的通用資料——名稱和實名欄位——我們有一些從這個復仇者的最新事件中生成的摘要資料——位置來自緯度和經度值,狀態是事件狀態欄位的一般摘要。

本文重點介紹狀態集合,並使用 Document API 訪問它。我們的下一篇文章將展示如何使用基於行的資料的事件集合。

具體設定點選標題見原文