【问题标题】:Cassandra Prepared Statement and adding new columnsCassandra Prepared Statement 并添加新列
【发布时间】:2016-05-21 10:33:19
【问题描述】:

我们使用缓存的 PreparedStatement 查询 DataStax Cassandra。但是如果我们需要向表中添加新列,我们需要重新启动我们的应用服务器以重新缓存准备好的语句。

我在 cassandra 中遇到了这个错误,它解释了解决方案 https://datastax-oss.atlassian.net/browse/JAVA-420

它基本上解决了在查询中不使用“SELECT * FROM table”,而是使用“SELECT column_names FROM table”

但现在我们在 Delete 语句中遇到了同样的问题。向表中添加新列后,Delete 准备语句不会删除记录。

我认为我们不能使用与 Select 语句的票证中提到的相同的解决方法,因为 * 或 column_names 对删除行没有意义。

任何帮助将不胜感激。我们基本上希望避免重新启动我们的应用程序服务器以添加任何数据库表

【问题讨论】:

    标签: cassandra datastax-enterprise datastax-java-driver


    【解决方案1】:

    我们基本上希望避免重新启动我们的应用程序服务器来添加任何数据库表

    需要一点编码的简单解决方案:使用 JMX

    让我解释一下。

    在您的应用程序代码中,保留所有准备好的语句的缓存(例如,您可以使用 Guava 缓存实现)。例如,访问缓存的键可以是查询字符串。

    现在,公开一个 JMX 方法来清除缓存并强制应用程序重新准备查询。

    每次更新架构时,只需调用适当的方法来清理缓存,无需重新启动应用程序

    【讨论】:

    • 同意,我们可以做一些缓存失效服务。我一直在寻找更强大的内置 Cassandra 或 DataStax 驱动程序。由于这是使用 NoSql 数据库更改表模式的常见用例,我认为他们的驱动程序提供了更好的支持。
    猜你喜欢
    • 2015-10-04
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    相关资源
    最近更新 更多