我们的团队最近从自托管 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});
搜索文档不会显示任何相关选项。
任何帮助将不胜感激。