登录
首页 >  Golang >  Go问答

在 Apache Cassandra 中如何建立数据模型,以便通过两个不唯一且不同的字段进行查询

来源:stackoverflow

时间:2024-02-29 19:06:28 120浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《在 Apache Cassandra 中如何建立数据模型,以便通过两个不唯一且不同的字段进行查询》,聊聊,希望可以帮助到正在努力赚钱的你。

问题内容

我正在使用 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 构建主键定义(以确保唯一性):

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(),'[email protected]',1,'Hi','Cassandra rocks!',toTimestamp(now()));
    INSERT INTO messages_by_email (id,email,number,title,content,date_created)
        VALUES (uuid(),'[email protected]',1,'Hi','Cassandra rocks!',toTimestamp(now()));
    INSERT INTO messages_by_number (id,email,number,title,content,date_created)
        VALUES (uuid(),'[email protected]',1,'Hi','Cassandra rocks!',toTimestamp(now()));
APPLY BATCH;

终于介绍完啦!小伙伴们,这篇关于《在 Apache Cassandra 中如何建立数据模型,以便通过两个不唯一且不同的字段进行查询》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>