限制客户端的 Cassandra 查询语法

Limiting Cassandra query syntax for clients

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

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

这个用例有最佳实践吗?

我知道与 C* 中的多租户策略相关的 BlackRocks 视频,它建议在模式中使用 tenant_id。这就是我们已经在做的事情,但是我如何确保通过 ODBC 连接 tenants/customers security/isolation?还是我必须自己写一个 API 来处理安全问题?

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

理论上,您可以利用可以修改的 Apache Calcite, for example. It has implementation of JDBC driver that could be used, plus there is existing Cassandra adapter 来完成您的任务(将身份验证映射到 tenant_ids 等),但这将需要大量工作。