了解 Cassandra 背后的哲学

2023-12-26

我正在尝试熟悉 Apache Cassandra,以完成特定的 PoC 工作。在浏览了网上的各种文章,尝试了各种可用的库/客户端之后,我的脑海中突然出现了一个特定的问题。

我们想到 Cassandra 的最初原因是因为我们想要一个“真正的”分布式数据存储。根据我对“分布”的理解,如果我能够以超级简洁的方式表达自己的话,它最终归结为某种“键值”和某种“一致哈希”!

因此像 Cassandra 这样的键值存储是完美的选择。然而,当我尝试深入了解 Cassandra 中的数据建模的文章时,几乎所有文章都使用 CQL 进行解释/举例。此外,官方声明似乎是 CQL 应该是学习 Cassandra 的“法律上”方式。为什么要如此推动与 SQL 保持一致?

我不需要关系模型,这就是我选择 Cassandra 的原因。我很欣赏它的基本概念,例如分区键/集群列等,并且我想了解它是如何在 CQL 的底层实现的。

询问 Cassandra 专家,我是否真的不适合 Cassandra 用户?我真的应该忘记键值并尝试在我的用例中使用 CQL(如果可能的话)吗?


CQL不仅仅是一颗“糖”,尽管最初创建是为了鼓励人们从 SQL 世界迁移。 CQL 之前的世界是一团糟,数十个客户端以不同的方式编写,全部使用 Thrift 协议——但与 SQL 世界不同的是,Cassandra 每天都在改进,在每个版本中带来新功能——而且往往每一项改进都需要一个新的“客户端版本”,能够处理生成的新类型结果(例如考虑计数器或集合)或使用新功能的新语法。

我很高兴我有机会与 Thrift 客户端(Pelops)一起投入生产超过 3 年——这帮助我了解了很多 cassandra 世界、数据结构等——但现在我永远不会回到这样的客户(尽管它真的很棒!)。

一开始 Cassandra 完全不同,尤其是/曾经

  • "无模式“意味着 CF 的每一行可以包含不同数量的列,并且没有地方必须声明这些列。这给许多项目带来了灾难,在“运行时”添加新列的可能性导致了这样的情况:你不知道你能在桌子上找到什么。

  • "超级柱“已弃用的数据结构被宽行取代

既然数据模型是稳定的,CQL 语法带来了更多的可读性,您现在可以迁移到任何您不太熟悉的项目,并且由于独特的语法,您可以了解应用程序如何与数据库通信 - 更多 - 每个新的Cassandra 发布后立即发布了新版本的客户端。

CQL 并不是 SQL 的“子集”,正如许多人所写的那样:在某种程度上,它是一个“超集”,因为它能够处理扩展基本语言的不同数据结构。

我的回答是:以键值方式思考但仅使用 CQL

哈特哈, 卡洛

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

了解 Cassandra 背后的哲学 的相关文章

随机推荐

  • 什么时候将标志存储为位掩码比使用关联表更好?

    我正在开发一个应用程序 其中用户具有不同的权限来使用不同的功能 例如读取 创建 下载 打印 批准等 权限列表预计不会经常更改 我有几个选项可以选择如何将这些权限存储在数据库中 在什么情况下选项 2 会更好 Option 1 使用关联表 Us
  • 有人可以解释一下这种类型的递归是如何工作的吗?

    我在递归中遇到了这个问题 我不明白它是如何工作的 我了解递归的基础知识 但这让我完全困惑 请帮忙 main foo 3 void foo int x if x gt 1 foo x printf d x foo x 我以为这个程序不会打印任
  • 使用 ImageMagick 检测 EXIF 方向并旋转图像

    佳能数码单反相机似乎可以横向保存照片并使用exif orientation进行旋转 问题 如何使用 imagemagick 使用 exif 方向数据将图像重新保存到预期方向 以便不再需要 exif 数据以正确的方向显示 Use the 自动
  • 检查 SQL 对象是否被任何其他 SQL 对象引用

    我刚刚在读书这个所以线程 https stackoverflow com questions 26336840 accessing the name of the currently executing stored procedure n
  • 解析没有键的 JSON 数组

    我正在尝试解析jsonArray但无法理解这种格式 如何解析这种类型jsonArray 谁能帮我 rows farmfresh 20171211 4 farmfresh product d 20171215 4
  • Selenium ChromeDriver 切换选项卡

    当我单击测试中的链接时 它会打开一个新选项卡 我希望 ChromeDriver 然后专注于该选项卡 我尝试了以下代码来让 ChromeDriver 使用 ctrl tab 快捷方式更改 tabas Actions builder new A
  • 函数“fn:encode-for-uri”导致 XSLT 出错

    我需要对 XSLT 中的字符串进行 URL 编码 但函数 fn encode for uri 破坏了脚本 我在网上查了一下 显然它是命名空间的一部分 http www w3 org 2005 xpath functions 因此 我将以下行
  • 与另一个启动文件链接

    我正在尝试使用以下命令将程序与我自己的启动文件链接STARTUPLD 脚本中的指令 ENTRY start STARTUP my crt1 o GCC驱动程序用于链接程序 不关心像libgcc等库路径 gcc T my script ld
  • 如何仅使某些结构字段可变?

    我有一个结构 pub struct Test pub x i32 pub y i32 我想要一个改变这个的函数 简单 pub fn mutateit mut self self x 1 这使得整个结构在函数调用期间是可变的mutateit
  • java中工厂方法模式如何使用泛型?

    我的代码如下所示 public interface BaseDAO marker interface public interface CustomerDAO extends BaseDAO public void createCustom
  • 如何让 SoapClient 尊重会话?

    我正在使用电子商务购物车的 SOAP API 但我似乎无法让会话在不同页面中持续存在 作为示例 我下面有一些测试代码 带有一堆调试消息 它将一个项目添加到购物车 然后查看购物车 当我在浏览器中运行它时 它工作得很好 但是如果我刷新页面 我预
  • Flutter Google Chart Gauge - 将标签放在中心内

    我正在看图表颤振 https pub dartlang org packages charts flutter包裹 我需要实现一个仪表图表 其中有一个分段及其标签值位于仪表的中心 请参阅下面的模型文件 其中所需类型的三个图表放置在一行中 使
  • 仅使用变量进行单元测试

    我正在使用 Objective c 为 iPhone 应用程序编写单元测试 例如 我只想在编译测试用例时使用一些变量 ifdef UNIT TESTING synthesize requestFinished networkAvailabl
  • DTO 和实体是否都应该具有输入验证

    我有一个 WCF 层 我的域模型位于该 WCF 层后面 我使用 Nhibernate 作为 ORM 工具 我的所有业务逻辑 数据访问等都将位于此 WCF 层后面 我正在向我的客户公开 DTO 我有以下问题 1 我应该创建DTO吗 直接向 W
  • 针对开发的伪代码编辑器的建议[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Python Minidom:更改节点的值

    我正在使用 Python 的 minidom 库来尝试操作一些 XML 文件 这是一个示例文件
  • 当套接字错误发生时,QWebSocket 底层的 QTcpSocket(或 QSslSocket)是否会被自身破坏?

    When a QTcpSocket or QSslSocket 升级为QWebSocket 前者必须存储以供将来使用 因为它需要 无论何处都移动到同一个线程QWebSocket正在moveToThread deleteLater 每当QWe
  • Windows Azure 网站覆盖了我的 node.js 应用程序中的 404 和 500 错误页面

    我正在使用 Windows Azure 网站来托管 node js 应用程序 到目前为止 除了我的自定义错误之外 一切都很好 在我的节点应用程序中 我有一个错误处理程序 可以在我的本地计算机上很好地呈现自定义 404 和自定义 500 错误
  • 保留 python os.popen() 的彩色输出

    我正在使用 Python 使用 msbuild exe 从给定目录构建多个 VS 解决方案 我只想要特定的输出 但为了节省工作 解释结果的最佳方法是使用原始 ANSI 编码 Example import os output os popen
  • 了解 Cassandra 背后的哲学

    我正在尝试熟悉 Apache Cassandra 以完成特定的 PoC 工作 在浏览了网上的各种文章 尝试了各种可用的库 客户端之后 我的脑海中突然出现了一个特定的问题 我们想到 Cassandra 的最初原因是因为我们想要一个 真正的 分