首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cassandra模式设计优化

Cassandra模式设计优化
EN

Stack Overflow用户
提问于 2013-05-16 18:53:37
回答 1查看 339关注 0票数 0

我的问题是:-

代码语言:javascript
复制
   I have a college , every college have some students , 
every student has some data(for eg student id , student name , class etc) related to him.

我想回答的问题如下:

代码语言:javascript
复制
a) get all students of a particular college.(student id and name only not the other data)
b) get data of a student of a college given his ID and college name .
c) create a student to a college.(ADD a new student in college).
d) delete a student of a particular college given his id and college name .
e) UPdate a students data of a particular college given his ID and college name .

我曾想过以下方案:

一个列族,它使用row_key作为college$student_id(大学和学生身份的连接),并在JSON中值作为学生的数据。另一列族以大学为row_key,另一列具有学生和学生姓名列表(学生姓名是第一个CF中学生数据的一部分),连接为逗号分隔字符串。(特别是对于第一个查询)

我可以用它回答所有的问题。

第二,我可以想到:-一个列族,其中大学为row_key,列名为student_id,值为学生数据(其中也包含学生姓名)。有了这个CF本身,我可以回答所有的问题。

但是,对于某一特定大学的所有学生来说,该查询在效率方面将如何表现。

,我已经读过,它将把整个行带入内存,即使我只需要学生的id和学生的名字,我已经在我的第一种方法中保留了第二列家族。即使我想要一个特定的id和大学的学生,它也会占用整个行的记忆,因为它给了我第一个CF在第一个接近

第二,在这种方法中,可能存在热点问题。

即使我想要一个特殊的id和大学的学生,它也会为给我第一次获得CF的第一次机会而付出全部的记忆。

我想到第二种方法的唯一原因是下面的新查询,它必须从集群中的多个节点执行多个获取。

获取来自某一特定学院的所有学生的ids列表。

在我的第一种方法中,由于大学数据将跨节点传播,我将不得不从多个节点获取数据。而在第二种方法中,由于大学是关键,我将从一个节点本身获得它。

我前面讨论过的BUt第二种方法还有许多其他缺点。

什么是更好的方法,还是第一种方法是正确和有效的?

EN

回答 1

Stack Overflow用户

发布于 2013-05-16 20:00:12

您可以有一个类似于这个的模式

代码语言:javascript
复制
CREATE COLUMNFAMILY cf(
    college  text,
    student_id bigint,
    student_name text,
    class text,
    ...
    ...,
    PRIMARY KEY(college, student_id)

);

获取某一特定学院的所有学生。(学生id和名称仅限于其他数据)

代码语言:javascript
复制
 cqlsh:keyspace> SELECT * FROM cf;


 college | student_id | student_class | student_name
---------+------------+---------------+--------------
    IITK |        102 |            B! |          sam
    IITK |        103 |            B! |         bugy
     SMU |        101 |            B* |         abhi
     SMU |        103 |            B! |        sandy

获取一所大学学生的资料,提供他的身份证和大学名称。

代码语言:javascript
复制
cqlsh:keyspace> SELECT college,student_id,student_class,student_name FROM cf WHERE college='SMU' AND student_id=101;

 college | student_id | student_class | student_name
---------+------------+---------------+--------------
     SMU |        101 |            B* |         abhi

在大学里创建一个学生。(在大学里增加一个新的学生)。

代码语言:javascript
复制
INSERT INTO cf (college, student_id ,student_class,student_name) VALUES ( 'SMU',104,'B!','mat');
cqlsh:keyspace> select * from cf ;

 college | student_id | student_class | student_name
---------+------------+---------------+--------------
    IITK |        102 |            B! |          sam
    IITK |        103 |            B! |         bugy
     SMU |        101 |            B* |         abhi
     SMU |        103 |            B! |        sandy
     SMU |        104 |            B! |          mat

删除某一特定学院的学生,并给出他的身份证和大学名称.

代码语言:javascript
复制
cqlsh:keyspace> DELETE FROM cf where college='SMU' AND student_id=104;
cqlsh:keyspace> select * from cf ;

 college | student_id | student_class | student_name
---------+------------+---------------+--------------
    IITK |        102 |            B! |          sam
    IITK |        103 |            B! |         bugy
     SMU |        101 |            B* |         abhi
     SMU |        103 |            B! |        sandy

更新特定学院的学生数据,给出他的ID和大学名称。

代码语言:javascript
复制
cqlsh:keyspace> UPDATE cf SET student_class='B!' where college='SMU' AND student_id=101;
cqlsh:keyspace> select * from cf ;

 college | student_id | student_class | student_name
---------+------------+---------------+--------------
    IITK |        102 |            B! |          sam
    IITK |        103 |            B! |         bugy
     SMU |        101 |            B! |         abhi
     SMU |        103 |            B! |        sandy

获取来自某一特定学院的所有学生的ids列表()

代码语言:javascript
复制
cqlsh:keyspace> SELECT * FROM cf WHERE college='SMU' AND student_id IN ( 101,103);

 college | student_id | student_class | student_name
---------+------------+---------------+--------------
     SMU |        101 |            B! |         abhi
     SMU |        103 |            B! |        sandy
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16595243

复制
相关文章

相似问题

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