gpt4 book ai didi

node.js - 如何在 Cassandra 中插入行后获取生成的 Id

转载 作者:太空宇宙 更新时间:2023-11-03 23:16:14 24 4
gpt4 key购买 nike

我正在尝试插入一些共享 row-id 的行,并决定坚持使用基于时间的 uuid。我能找到的所有文档都解释了如何创建这样的行:

INSERT INTO users (id, name) VALUES (now(), 'Florian')

我正在使用DataStax's cassandra-driver for Node.js执行我的查询(其中 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?

最佳答案

您应该在查询参数中提供它,而不是依赖 CQL now() 函数(它返回 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 的额外好处是它可以使您的查询 idempotent .

DataStax 驱动程序具有丰富的类型系统,您可以在此表中查看 CQL 类型到 JavaScript 类型的表示:https://docs.datastax.com/en/developer/nodejs-driver/latest/features/datatypes/

关于node.js - 如何在 Cassandra 中插入行后获取生成的 Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55149003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com