设计Key / Value数据库模式的问题

时间:2014-04-17 19:39:36

标签: mysql sql cassandra nosql

我正在尝试使用Cassanda设计一个Key / Value NOSql数据库 从一个小社交网络的关系数据库开始,我想使用NOSql数据库模型制作一个“等效”模式。

关系数据库有3个表,如下所示:

     -------------
     | User      |
     -------------
     |id         |
     |name       |
     |bday       |
     |...        |
     -------------

     -------------
     | Statut    |
     -------------
     |Userid     |
     |Statutid   |
     |text       |
     |timestamp  |
     |...        |
     -------------

     -------------
     | Comment   |
     -------------
     |User1id    |
     |User2id    |
     |text       |
     |timestamp  |
     |......     |
     -------------

在创建密钥空间时,我对我应该创建的许多列族感到困惑:

  • 每个表的列族。
  • 只有一个列族代表用户的所有状态和评论(以集合的形式)。

什么是最佳解决方案,最少的数据冗余和避免连接。

1 个答案:

答案 0 :(得分:1)

如果您想减少冗余并避免连接,MongoDB将是最好的数据库。

请记住使用集合SET数据类型 Straight from the docs收藏价值不得超过64KB。
因此,使用SET可能会根据您存储的内容给您带来问题。

在Cassandra中,您可以使用3个列族来创建它。

DROP KEYSPACE your_keyspace ;
CREATE KEYSPACE your_keyspace
  WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1};

USE your_keyspace;


CREATE TABLE user(
  id TIMEUUID PRIMARY KEY,
  name TEXT,
  bday TEXT,
  ...
);


CREATE TABLE user_statut(
  id TIMEUUID,
  userid TIMEUUID,
  body TEXT,
  created_at TIMESTAMP,
  ...
  PRIMARY KEY(userid, id)
);


CREATE TABLE user_comment(
  id TIMEUUID,
  user1id TIMEUUID,
  user2id TIMEUUID,
  body TEXT,
  created_at TIMESTAMP,
  ...
  PRIMARY KEY(user1id, user2id, id)
);

但当然这需要您进行3个不同的查询才能加入所有数据。但这取决于您最终使用的任何查询。