首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确地对Apache Cassandra中的数据建模,以允许由两个非唯一的不同字段进行查询

问如何正确地对Apache Cassandra中的数据建模,以允许由两个非唯一的不同字段进行查询
EN

Stack Overflow用户
提问于 2020-07-04 20:41:51
回答 1查看 66关注 0票数 1

我正在使用Apache在Go中开发一个简单的API,我想知道如何最好地表示我所拥有的数据。

我在Go中有以下结构。

代码语言:javascript
复制
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查询,我将创建如下表:

代码语言:javascript
复制
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)
);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-05 13:36:56

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

代码语言:javascript
复制
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确保原子性。

代码语言:javascript
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62734242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档