【问题标题】:Limiting Cassandra query syntax for clients限制客户端的 Cassandra 查询语法
【发布时间】:2018-06-05 16:21:46
【问题描述】:

我们计划使用 Cassandra 3.x,并希望允许我们的客户直接连接到 Cassandra 以将数据导出到他们的数据仓库中。 他们将从远程通过 ODBC 连接。

有什么方法可以防止客户执行大量或错误的SELECT 语句,这将导致所有节点的高负载?我们在复制策略中使用了一个额外的数据中心,只有客户可以连接,因此实时系统不会受到影响。但我们也想设置一些将在这个 shadow 系统上运行的工作人员。最重要的是,连接的远程客户端不会对其他远程连接或我们的本地工作人员工作产生任何明显影响。已经有一个物化视图,我想强制客户仅基于主键获取数据(即不允许使用ALLOW FILTERING)。如果可以限制返回的行数(例如 100 万行)以防止提取所有数据,那也很棒。

此用例是否有最佳实践?

我知道与 C* 中的多租户策略相关的 BlackRocks 视频,该视频建议在架构中使用 tenant_id。这就是我们已经在做的事情,但是如何通过 ODBC 连接的租户/客户确保安全/隔离?还是我必须自己编写一个 API 来处理安全性?

【问题讨论】:

  • 我建议通过 API 而不是通过 ODBC 公开访问权限 - 至少您可以更好地控制执行的内容,并强制执行tenant_id 和其他检查...但这可能会很多工作,但也许你可以使用 Apache Calcite,或者类似的东西:calcite.apache.org/docs/cassandra_adapter.html
  • @AlexOtt 很遗憾,您的帖子已经很久没有新答案了。但由于我认为我的问题与其他用户相关,您会这么好心并根据您的评论做出回答,以便我接受吗?

标签: cassandra cassandra-3.0


【解决方案1】:

我建议通过 API 而不是通过 ODBC 公开访问 - 至少您可以更好地控制执行的内容,并强制执行tenant_id 和其他检查,如限制等。您可以尝试使用 Cassandra 的 CQL 解析器分解查询,并把所有需要的东西放回去。

例如,理论上,您可以使用Apache Calcite。它具有可以使用的 JDBC 驱动程序的实现,另外还有现有的 Cassandra adapter 可以修改以完成您的任务(将身份验证映射到租户 ID 等),但这将是很多工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 2015-06-21
    • 2012-02-22
    • 2021-12-08
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    相关资源
    最近更新 更多