gpt4 book ai didi

database - 如何在Apache Cassandra中正确建模数据以允许通过两个唯一的不同字段进行查询

转载 作者:行者123 更新时间:2023-12-01 21:09:40 25 4
gpt4 key购买 nike

我正在使用Apache Cassandra在Go中开发一个简单的API,我想知道什么是代表我拥有的数据的最佳方法。
我在Go中有以下结构。

type Message struct {
Id gocql.UUID `json:"id"`
Email string `json:"email"`
Title string `json:"title"`
Content string `json:"content"`
Number int64 `json:"number"`
DateCreated time.Time `json:"dateCreated"`
}
在Cassandra中创建数据结构以允许通过电子邮件和数字查询的最佳方法是什么,两者都是 而不是唯一(仅ID是唯一的。可以有多个具有相同电子邮件和/或编号的消息)?我是否应该创建两个单独的表以允许通过这两个字段进行查询?
对于通过ID进行查询,我将创建如下表格:
USE some_keyspace;

CREATE TABLE IF NOT EXISTS messages
(
id UUID,
email TEXT,
title TEXT,
content TEXT,
number. BIGINT,
date_created TIMESTAMP,
PRIMARY KEY (id)
);

最佳答案

最好的方式?为您要服务的每个查询创建一个表。使用您要查询的列和id来构建PRIMARY KEY定义(以确保唯一性):

CREATE TABLE IF NOT EXISTS messages_by_email (
id UUID,
email TEXT,
title TEXT,
content TEXT,
number BIGINT,
date_created TIMESTAMP,
PRIMARY KEY (email,id));

CREATE TABLE IF NOT EXISTS messages_by_number (
....
PRIMARY KEY (number,id));
在这些表中写一行时,请使用 BATCH来确保原子性。
BEGIN BATCH
INSERT INTO messages (id,email,number,title,content,date_created)
VALUES (uuid(),'aaron@dot.com',1,'Hi','Cassandra rocks!',toTimestamp(now()));
INSERT INTO messages_by_email (id,email,number,title,content,date_created)
VALUES (uuid(),'aaron@dot.com',1,'Hi','Cassandra rocks!',toTimestamp(now()));
INSERT INTO messages_by_number (id,email,number,title,content,date_created)
VALUES (uuid(),'aaron@dot.com',1,'Hi','Cassandra rocks!',toTimestamp(now()));
APPLY BATCH;

关于database - 如何在Apache Cassandra中正确建模数据以允许通过两个唯一的不同字段进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62734242/

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