微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Cassandra Node.js 驱动程序 - 可以切换允许过滤吗?

如何解决Cassandra Node.js 驱动程序 - 可以切换允许过滤吗?

我们的团队最近从自托管 Cassandra 切换到 AWS Keyspaces。 尽管“手册”提到了 Cassandra 兼容性,但我们实际上正在失去一些 Cassandra 最关键的功能包括重要的功能 - UDT、物化视图和二级索引)。

然而,转换对我们来说仍然是值得的,因为对于一个小团队来说,自我维护的 Cassandra 开销太大。

作为迁移计划的一部分,我们决定在绝对需要的情况下用自我维护的表替换物化视图,其余的用 ALLOW FILTERING 替换,因为我们认为对未来 6-12 的性能影响很小一个月的时间,希望 Keyspaces 能够增加对 MV 的支持,或者通过使用 Spark、Elassandra 或类似工具实现搜索端点。

我们使用带有对象映射的 Node.js Datastax Cassandra 驱动程序。因此,我们希望保持这种方式,而不是使用原始 CQL 查询。 但是,在尝试使用映射器运行查询时,我们似乎无法使 ALLOW FILTERING 功能正常工作。

我们在 Node.js 和 express 中使用以下设置。

import {Client,mapping,auth,types} from "cassandra-driver";

const fs = require('fs');
const authProvider = new auth.PlainTextAuthProvider(process.env.CASSANDRA_USER!,process.env.CASSANDRA_PWD!);
const sslOptions1 = {
  cert: fs.readFileSync('AmazonRootCA1.pem'),host: 'cassandra.us-east-1.amazonaws.com',rejectUnauthorized: true
};

export const client = new Client({
  contactPoints: ['cassandra.us-east-1.amazonaws.com:9142'],localDataCenter: 'us-east-1',authProvider: authProvider,sslOptions: sslOptions1,protocolOptions: { port: 9142 },queryOptions: { consistency: types.consistencies.localQuorum,}
});

// table mapper
export const mapper: mapping.Mapper = new mapping.Mapper(client,{
    models: {
        products: {
            tables: ["products"],keyspace: "store"
        }
    }
});

到目前为止一切顺利。

问题是映射器方法似乎不支持“允许过滤”。

所以,这是有效的 -

await client.execute(
        'SELECT * FROM store.products where color = :color ALLOW FILTERING',{ color: 'red' },{ prepare: true }
      );

但是,当使用映射器时,似乎没有办法切换允许过滤选项

let productMapper = mapper.forModel("products");
const product: Product = await this.productMapper.find({color: 'red'});

理想情况下会有一个运行选项

this.productMapper.find({color: 'red'},{allow_filtering: true});

搜索文档没有发现任何相关选项。

任何帮助将不胜感激。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。