使用 Cassandra、Astra 和 Stargate 构建仪表板 | baeldung


在本文中,我们将构建“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 访问它。我们的下一篇文章将展示如何使用基于行的数据的事件集合。
具体设置点击标题见原文