使用CQL脚本进行Cassandra模式管理

4
给Cassandra专家们:我被分配任务,需要提出有关Cassandra CQL脚本管理和部署的建议。团队应该如何管理大量的CQL脚本(模式定义脚本(DDL),数据操作脚本(INSERT / UPDATE / DELETE)),从Cassandra开发的起始到应用程序模式的后续更改。如果可以的话,我想指出的是,开发团队规模并不小(每个应用程序功能区域有10多名开发人员)。
一种方法(可能是错误的方法)是像典型的关系数据库工作室那样做:应用程序开发人员或开发DBA设计和创建ddl、dml等脚本,将它们存储和维护在版本控制系统(例如SVN)中,并使用一些自动化在环境(dev、qc等等)中部署这些脚本(可能简单到shell或perl脚本)。我认为这种方法在NoSQL解决方案(如Cassandra)中的缺陷在于参与这三个步骤的角色。 1-设计和创建CQL脚本——这应该由DevOps(Cassandra管理员)还是应用程序开发人员完成?
2-在SVN中存储和维护它们——这是否应该类似于上述问题1中的方式?
3-脚本部署——应用程序开发人员还是DevOps? 我还想从应用程序模式控制和审计的角度得到答案。例如,对于上述问题1和2,如果应用程序开发人员设计、创建并存储CQL脚本在SVN中,如何能够控制哪些内容进入CQL模式并防止昂贵的错误。如果有专门的、单一的团队拥有数据模型而不是所有cassandra开发人员(类似于DBA /管理员),那么更容易实现这种控制。
我希望那些以前做过这件事的人能够为大型环境中的CQL代码开发、部署和维护提供选择和最佳实践的见解。 一如既往,感谢您的帮助。

我发表了这个问题已经几个月了,但并没有多少人评论...开始怀疑我的CQL开发期望值是否太高了。 - ganesh kannan
我认为这是每个人都会遇到的问题,但是在Cassandra中进行迁移从来不像关系型数据库那样简单,因此没有简单的解决方案。 - Saket
1个回答

2
我认为你将面临的主要问题是需要编写代码执行一些迁移操作,这与在典型的SQL场景中应用增量补丁有很大的不同。使用CQL定义的基本模式更改可以使用DevOps/DBA风格的 cqlsh 工具轻松应用。这些类型的更改包括添加列和删除列。但如果您需要做更基本的事情,那么您将需要编写CQL客户端代码来迁移旧数据。尤其是当您的应用程序需要进行更多反规范化和非声明性索引时,这一点尤为重要。
顺便说一下,我能够自动化CQL模式管理的一个方面,即找到一种方法来保持模式和应用程序代码同步。为此,我编写了一个 CQL模式编译器,它生成样板应用程序源代码,以便数据绑定始终与Cassandra中的当前模式同步。但这只是整个问题的一个方面。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接