【发布时间】:2021-06-18 00:13:29
【问题描述】:
我们的团队最近从自托管 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});
搜索文档不会显示任何相关选项。
任何帮助将不胜感激。
【问题讨论】:
标签: node.js cassandra amazon-keyspaces datastax-node-driver