我正在使用Apache在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)
);发布于 2020-07-05 13:36:56
最好的方法?为要服务的每个查询创建一个表。使用要查询的列和id (以确保唯一性)构建主键定义:
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;https://stackoverflow.com/questions/62734242
复制相似问题