Apache Cassandra 正在成为处理 JSON 文档的最佳数据库。如果您是一名 Cassandra 开发人员,并且发现该声明具有挑衅性,请继续阅读。
在上一篇文章中,我们讨论了使用数据 API 和数据建模将 Cassandra 塑造成更符合开发人员思维方式的开发人员体验,从而提高开发人员的工作效率,同时保持合理的数据库性能和规模。这是一个很好的假设,需要在特定的开发人员惯用语和开发人员社区的背景下进行测试。
Mongoose是一个对象数据映射库,通常与 MongoDB 驱动程序一起使用,是一个开源项目,周围有大量 JavaScript 开发人员。在Stargate 项目(旨在与 Cassandra 配合使用的开源 API 数据网关)中,我们已经与 Mongoose 合作,并且我们正在开发即将推出的JSON API ,该 API 将与通过该 JSON 工作的 Mongoose 版本一起发布连接到 Cassandra 的 API。这为 Mongoose 开发人员创建了一个完全开源的端到端堆栈。它改变了 Mongoose 开发人员的游戏规则,并为 Cassandra 开启了重要的新篇章。
在本文中,我将讨论如何结合使用 Cassandra 和 Stargate 提供对开发人员友好的 JSON 习惯用法,以及我们如何努力为 Mongoose 开发人员做到这一点。
2022 年 10 月,我们发布了新版本的星际之门。在新的版本 2中,单个 API 不再嵌入到核心 Stargate 协调器代码中,而是分离到单个服务中。这提高了 Stargate 的运营效率;现在可以独立部署和扩展单个 API 服务。这也使得新的 API 服务更容易开发。只要它们遵守服务边界,这些服务就可以与核心 Stargate 开发工作并行或独立开发。
然后,我们寻找可以提供给开发人员的真正地道的体验。 JavaScript 拥有 1800 万开发人员,是世界上最流行的编程语言,而 JSON 是 JavaScript 开发人员构建数据的标准方式。但是,1800万人不是一个共同体;这是许多社区。我们需要 JavaScript 社区的“金发姑娘”——大到足以成为重要人物,但又小到足以成为焦点。我们找到了围绕 Mongoose 构建的正确社区,Mongoose 是一个对象数据映射器库,用于连接到 MongoDB 的应用程序。猫鼬有几个重要的特点:
开发人员并没有真正直接与数据库交互,而是与数据模型交互。在 Stargate 的原始文档 API 中,API 通过使其看起来像传统的 Cassandra 表来处理 JSON。这给面向 JSON 的开发人员带来了从 Cassandra 数据结构的角度思考的负担,并且给 Cassandra 的面向行的索引逻辑带来了负担,因为 JSON 文档分布在多行中。
我们新的 JSON API 脱离了这个数据模型,取而代之的是我们称之为“超级分解”的数据模型。您可以通过观看 Aaron Morton 在最近的Cassandra Forward活动中的演讲来了解有关超级粉碎的更多信息。简而言之,我们利用 Cassandra 的宽列特性来每行存储一个文档,因为我们知道 Cassandra 行甚至可以处理非常大的文档。我们在该行中还有一组列,它们明确用于存储 JSON 文档的标准元数据特征。现在我们有了更容易索引的东西,以及保存和检索元数据的方法。
然后,我们将使用新的 JSON API 来处理此数据模型,使用与 Mongoose 相同的mQuery规范作为 API 需要支持的调用的指导要求。完成后,这将使超过 200 万个依赖 Mongoose 的应用程序中的任何一个都可以针对开源 Cassandra 或 DataStax 的托管 Cassandra 服务Astra DB运行,只需更改配置即可。
借助 Mongoose 和新的 JSON API,我们将为面向 JSON 的 JavaScript 开发人员提供完全惯用的体验,为他们提供支持真实 JSON 数据模型的 Cassandra 的规模和性能。
Mongoose 的创建者 Karpov 还在最近的 Cassandra Forward 活动中发表了讲话(您可以在此处观看重播),演示了一个简单的电子商务应用程序,该应用程序使用了 Stargate 版本的 Mongoose、开源 Stargate 和 DataStax Enterprise (DSE) 版本的 Cassandra。您可以从GitHub下载此应用程序的工作代码和支持平台部分。虽然我们有足够的代码来运行这个应用程序,但我们还没有完成代码。例如,我们现在针对 DSE 运行,因为我们需要存储附加索引(SAI),它与 DSE 一起工作,并计划在今年晚些时候在 Cassandra 5.0 中发布。
Cassandra 不是一个静态的软件;这是一个充满活力和不断发展的开源项目。因此,我们也延续了 Cassandra 的长期传统,即使用客户端出现的 SAI 等功能来促进数据库端的变化。o 同样,Stargate 的 Mongoose 工作已经为 Cassandra 提出了一系列围绕全局排序和高级查询过滤的建议,这些建议将不仅使 Stargate 的 JSON API 和 Mongoose 客户端更好,而且将为 Cassandra 查询语言添加强大的新功能。这是一个很好的提醒,数据工程师和应用程序开发人员不是两个不同的社区,而是扩展的 Cassandra 社区的互补群体。
而 JSON 只是第一步。从本质上讲,我们要做的是采用 Cassandra、Stargate 和相当高效的 Cassandra 数据模型的构建块,并构建一个文档数据库,您可以通过 JSON API 与之交互。换句话说,我们使用超级粉碎来创建一个专用数据库,更好地为 Mongoose 开发人员社区服务。
凭借Stargate v2的模块化架构以及 Mongoose 惯用方法的证明点,我们已准备好迎接围绕特定软件开发惯用语组织的新开发人员社区。我们利用 Cassandra for Mongoose 的过程是可重复的——我们将重复这一过程。通过这样做,我们极大地扩展了 Cassandra 可以解决的开发人员和用例的数量,这是一个值得开源项目实现的目标。
马克·斯通。 Mark 是 DataStax 的产品经理。他是一名技术资深人士,在产品管理、项目管理和人员管理方面拥有多年经验。 Mark 始终作为业务利益相关者和技术利益相关者之间的结缔组织的一部分,喜欢倡导技术平台的开发人员体验,并帮助组织与开发人员会面。