node.js - 在 Cassandra 中插入行后如何获取生成的 ID
问题描述
我正在尝试插入一些共享行 ID 的行,并决定坚持使用基于时间的 uuid。我能找到的所有文档都解释了如何创建这样的行:
INSERT INTO users (id, name) VALUES (now(), 'Florian')
我正在使用Node.js的 DataStaxcassandra-driver
来执行我的查询(其中包含来自上面的查询insertUser
的字符串):
var r = await client.execute(insertUser)
console.dir(r.rows)
结果如下所示:
ResultSet {
info:
{ queriedHost: '127.0.0.1:9042',
triedHosts: { '127.0.0.1:9042': null },
speculativeExecutions: 0,
achievedConsistency: 10,
traceId: undefined,
warnings: undefined,
customPayload: undefined,
isSchemaInAgreement: true },
rows: undefined,
rowLength: undefined,
columns: null,
pageState: null,
nextPage: undefined }
正如我们所见,结果中没有可用于创建相关行的 id。
是否有一种 Cassandra 惯用的方式来根据相同的 id 创建多行而不生成本地 id?
解决方案
您应该在查询参数中提供它,而不是依赖 CQLnow()
函数(返回 UUID v1)。
const cassandra = require('cassandra-driver');
const Uuid = cassandra.types.Uuid;
// ...
const query = 'INSERT INTO users (id, name) VALUES (?, ?)';
const id = Uuid.random();
const options = { prepare: true, isIdempotent: true };
const result = await client.execute(query, [ id, 'Florian' ], options);
从客户端生成 id 的额外好处是它使您的查询具有幂等性。
DataStax 驱动程序具有丰富的类型系统,您可以在此表中查看 CQL 类型到 JavaScript 类型表示:https ://docs.datastax.com/en/developer/nodejs-driver/latest/features/datatypes/
推荐阅读
- php - 如何制作、分组和转换这种响应?
- b2b - 如何使用 Sterling Integrator 中的业务流程通过 GPM 选择特定类型的文件(XML、txt)
- android - 如何将 Android SqlLite 数据库从内部存储迁移到 Room?
- git - 清理 git 存储库 BFG Repo-Cleaner --- 推送后 repo 大小仍然很大
- python - python和python3命令不指向pyenv全局版本
- android - 我怎样才能在android中设计这个布局?
- javascript - jQuery DFP - sizeMapping 返回错误的尺寸
- ruby-on-rails - kernel_require.rb 文件无法加载此类文件,但我有 gem
- php - PHP + MySQL - 从数据库自动完成没有从表中获取数据
- reactjs - reactjs预选单选按钮